Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 8 additions & 3 deletions src/main/java/controller/CreateUserController.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,17 @@ public class CreateUserController extends AbstractController {

@Override
public void doPost(HttpRequest request, HttpResponse response) {
User user = getUserFrom(request);
DataBase.addUser(user);
response.sendRedirect("/index.html");
log.debug("{}님이 회원가입에 성공하셨습니다.", user.getUserId());
}

private User getUserFrom(HttpRequest request) {
String userId = request.getParameter("userId");
String password = request.getParameter("password");
String name = request.getParameter("name");
String email = request.getParameter("email");
DataBase.addUser(new User(userId, password, name, email));
response.sendRedirect("/index.html");
log.debug("{}님이 회원가입에 성공하셨습니다.", userId);
return new User(userId, password, name, email);
}
}
78 changes: 45 additions & 33 deletions src/main/java/controller/ListUserController.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package controller;

import db.DataBase;
import db.SessionDataBase;
import model.User;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand All @@ -19,44 +20,55 @@ public class ListUserController extends AbstractController {

@Override
public void doGet(HttpRequest request, HttpResponse response) {
String cookies = request.getHeader("Cookie");
Map<String, String> cookieStringMap = HttpRequestUtils.parseCookies(cookies);
log.info("Cookie: {}", cookieStringMap.toString());
if (cookieStringMap.get("logined").equals("false")) {
String sessionId = request.getHeader("Cookie");
if (!isLogin(sessionId)) {
response.sendRedirect("/user/login.html");
} else {
String url = "/user/list.html";
byte[] body = new byte[0];
try {
body = Files.readAllBytes(new File("./webapp" + url).toPath());
} catch (IOException e) {
e.printStackTrace();
}
String bodyStr = new String(body);
int tbodyIndex = bodyStr.indexOf("<tbody>");
log.info("bodyStr : {}", bodyStr.substring(0, tbodyIndex + 7));

StringBuilder result = new StringBuilder(bodyStr.substring(0, tbodyIndex + 7));
Collection<User> users = DataBase.findAll();
int id = 0;
for (User user : users) {
id++;
result.append("<tr><th scope=\"row\">")
.append(id).append("</th> <td>")
.append(user.getUserId()).append("</td> <td>")
.append(user.getName()).append("</td> <td>")
.append(user.getEmail()).append("</td> <td>")
.append("<a href=\"#\" class=\"btn btn - success\" role=\"button\">수정</a></td>");
}
result.append(bodyStr.substring(tbodyIndex + 7));
log.info("result: {}", result.toString());
response.response200Header(result.toString().getBytes().length, "text/html");
response.responseBody(result.toString().getBytes());
String body = getBody("/user/list.html");
int tbodyIndex = body.indexOf("<tbody>");
String result = addUserList(body, tbodyIndex).toString();
response.forwardBody(result);
}
}

public boolean isLogin(String id) {
private boolean isLogin(String id) {
Map<String, String> cookieStringMap = HttpRequestUtils.parseCookies(id);
log.info("Cookie: {}", cookieStringMap.toString());
return SessionDataBase.isLoginUser(cookieStringMap.get("JSESSIONID"));
}

private String getBody(String url) {
byte[] body = new byte[0];
try {
body = Files.readAllBytes(new File("./webapp" + url).toPath());
} catch (IOException e) {
e.printStackTrace();
}
return new String(body);
}

private StringBuilder processUserList(String body, int tbodyIndex) {
StringBuilder result = new StringBuilder(body.substring(0, tbodyIndex + 7));
Collection<User> users = DataBase.findAll();
int id = 0;
for (User user : users) {
id++;
result.append("<tr><th scope=\"row\">")
.append(id)
.append("</th> <td>")
.append(user.getUserId())
.append("</td> <td>")
.append(user.getName())
.append("</td> <td>")
.append(user.getEmail())
.append("</td> <td>")
.append("<a href=\"#\" class=\"btn btn - success\" role=\"button\">수정</a></td>");
}
return result;
}

return false;
private StringBuilder addUserList(String body, int tbodyIndex) {
StringBuilder result = processUserList(body, tbodyIndex);
return result.append(body.substring(tbodyIndex + 7));
}
}
9 changes: 7 additions & 2 deletions src/main/java/controller/LoginController.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
package controller;

import db.DataBase;
import db.SessionDataBase;
import model.User;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import webserver.HttpRequest;
import webserver.HttpResponse;

import java.util.UUID;

public class LoginController extends AbstractController {
private static final Logger log = LoggerFactory.getLogger(LoginController.class);

Expand All @@ -17,10 +20,12 @@ public void doPost(HttpRequest request, HttpResponse response) {
User targetUser = DataBase.findUserById(userId);
// todo : 세션의 작동원리를 깊히 생각해보기
if (targetUser == null || !password.equals(targetUser.getPassword())) {
response.addHeader("Set-Cookie", "logined=false");
response.addHeader("Set-Cookie", "loggedIn=false");
response.sendRedirect("/user/login_failed.html");
} else if (password.equals(targetUser.getPassword())) {
response.addHeader("Set-Cookie", "logined=true");
UUID uuid = UUID.randomUUID();
SessionDataBase.sessions.put(uuid.toString(), targetUser);
response.addHeader("Set-Cookie", SessionDataBase.JSESSIONID + "=" + uuid);
Comment on lines +26 to +28
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UUID를 사용하여 세션을 저장해주신 부분이 좋네요!

response.sendRedirect("/index.html");
log.info("{}님이 로그인하셨습니다.", userId);
}
Expand Down
20 changes: 20 additions & 0 deletions src/main/java/db/SessionDataBase.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package db;

import com.google.common.collect.Maps;
import model.User;

import java.util.Map;

public class SessionDataBase {
public static Map<String, User> sessions = Maps.newHashMap();

public static final String JSESSIONID = "JSESSIONID";

public static boolean isLoginUser(String sessionId) {
return getSessionUser(sessionId) != null;
}

public static User getSessionUser(String sessionId) {
return sessions.get(sessionId);
}
}
7 changes: 7 additions & 0 deletions src/main/java/webserver/HttpResponse.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

import java.io.DataOutputStream;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.util.HashMap;
import java.util.Map;
Expand Down Expand Up @@ -37,6 +38,12 @@ public void forward(String url) throws IOException {
responseBody(body);
}

public void forwardBody(String result) {
byte[] body = result.getBytes(StandardCharsets.UTF_8);
response200Header(body.length, "text/html");
responseBody(body);
}

public void response200Header(int lengthOfBodyContent, String contentType) {
try {
dos.writeBytes("HTTP/1.1 200 OK \r\n");
Expand Down