-
Notifications
You must be signed in to change notification settings - Fork 309
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[톰캣 구현하기 - 3, 4단계] 베베(최원용) 미션 제출합니다. (#417)
* refactor: request 객체 분리 * refactor: 매직넘버 상수화 * refactor: 패키지 구조 변경 * refactor: Status Code와 Redirect URL Enum으로 분리 * refactor: AuthService 메서드 분리 * refactor: ResponsePage 패키지 변경 * refactor: Login, Register 서비스, 컨트롤러 분리 * refactor: 스레드 풀 설정 * refactor: null이면 ConcurrentHashMap에 데이터를 넣지 않는다. * chore: 사용하지 않는 import 제거 * refactor: request, response add prefix http * refactor: 로그인이 되어있다면 인덱스 페이지로 리다이렉트 * refactor: controller 추상화 * fix: 테스트케이스 수정 * refactor: service layer에서는 request와 response의 연관관계를 끊는다. * chore: 사용하지 않는 import 제거 * refactor: HttpRequestGenerator 필드 제거 * refactor: 다중 cookie header 설정 지원 * refactor: RequestHeader 추상화 * refactor: Session에서 null 대신 Optional 반환 * refactor: null 검증 로직 제거 * fix: 테스트 코드 수정 * refactor: cookie 값 Optional로 반환 * refactor: 여러개의 cookie 값 처리 * chore: 사용하지 않는 메서드 제거
- Loading branch information
1 parent
6054c80
commit 3bae892
Showing
33 changed files
with
745 additions
and
487 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
76 changes: 0 additions & 76 deletions
76
tomcat/src/main/java/org/apache/coyote/http11/auth/AuthService.java
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
49 changes: 49 additions & 0 deletions
49
tomcat/src/main/java/org/apache/coyote/http11/auth/LoginService.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
package org.apache.coyote.http11.auth; | ||
|
||
import java.util.Optional; | ||
import java.util.UUID; | ||
import nextstep.jwp.db.InMemoryUserRepository; | ||
import nextstep.jwp.model.User; | ||
import org.apache.coyote.http11.request.line.Protocol; | ||
import org.apache.coyote.http11.response.HttpResponse; | ||
|
||
import static org.apache.coyote.http11.response.ResponsePage.INDEX_PAGE; | ||
import static org.apache.coyote.http11.response.ResponsePage.LOGIN_PAGE; | ||
import static org.apache.coyote.http11.response.ResponsePage.UNAUTHORIZED_PAGE; | ||
|
||
public class LoginService { | ||
|
||
public static final String COOKIE_KEY = "JSESSIONID"; | ||
|
||
private final SessionRepository sessionRepository = new SessionRepository(); | ||
|
||
public HttpResponse getLoginViewResponse(Cookie cookie, Protocol protocol) { | ||
Optional<String> cookieOption = cookie.get(COOKIE_KEY); | ||
if (cookieOption.isEmpty()) { | ||
return HttpResponse.getCookieNullResponseEntity(protocol, LOGIN_PAGE); | ||
} | ||
final Optional<Session> session = sessionRepository.getSession(cookieOption.get()); | ||
if (session.isEmpty()) { | ||
return HttpResponse.getCookieNullResponseEntity(protocol, LOGIN_PAGE); | ||
} | ||
return HttpResponse.getCookieNullResponseEntity(protocol, INDEX_PAGE); | ||
} | ||
|
||
public HttpResponse getLoginOrElseUnAuthorizedResponse(Protocol protocol, String account, String password) { | ||
return InMemoryUserRepository.findByAccount(account) | ||
.filter(user -> user.checkPassword(password)) | ||
.map(user -> getSuccessLoginResponse(user, protocol)) | ||
.orElseGet(() -> HttpResponse.getCookieNullResponseEntity(protocol, UNAUTHORIZED_PAGE)); | ||
} | ||
|
||
private HttpResponse getSuccessLoginResponse(final User user, final Protocol protocol) { | ||
final String uuid = UUID.randomUUID().toString(); | ||
final Session session = Session.from(uuid); | ||
session.setAttribute("user", user); | ||
sessionRepository.create(session); | ||
Cookie cookie = new Cookie(); | ||
cookie.setSession(session); | ||
return HttpResponse.getResponseEntity(protocol, cookie, INDEX_PAGE); | ||
} | ||
|
||
} |
22 changes: 22 additions & 0 deletions
22
tomcat/src/main/java/org/apache/coyote/http11/auth/RegisterService.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
package org.apache.coyote.http11.auth; | ||
|
||
import nextstep.jwp.db.InMemoryUserRepository; | ||
import nextstep.jwp.model.User; | ||
import org.apache.coyote.http11.request.line.Protocol; | ||
import org.apache.coyote.http11.response.HttpResponse; | ||
|
||
import static org.apache.coyote.http11.response.ResponsePage.CONFLICT_PAGE; | ||
import static org.apache.coyote.http11.response.ResponsePage.INDEX_PAGE; | ||
|
||
public class RegisterService { | ||
|
||
public HttpResponse getIndexOrConflictResponse(String account, String password, String email, Protocol protocol) { | ||
if (InMemoryUserRepository.findByAccount(account).isPresent()) { | ||
return HttpResponse.getCookieNullResponseEntity(protocol, CONFLICT_PAGE); | ||
} | ||
|
||
InMemoryUserRepository.save(new User(account, password, email)); | ||
return HttpResponse.getCookieNullResponseEntity(protocol, INDEX_PAGE); | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
16 changes: 8 additions & 8 deletions
16
tomcat/src/main/java/org/apache/coyote/http11/auth/SessionRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,22 +1,22 @@ | ||
package org.apache.coyote.http11.auth; | ||
|
||
import java.util.HashMap; | ||
import java.util.Map; | ||
import java.util.Optional; | ||
import java.util.concurrent.ConcurrentHashMap; | ||
|
||
public class SessionRepository { | ||
|
||
private static final Map<String, Session> SESSIONS = new HashMap<>(); | ||
private static final Map<String, Session> SESSIONS = new ConcurrentHashMap<>(); | ||
|
||
public static void create(Session session) { | ||
SESSIONS.put(session.getId(), session); | ||
} | ||
|
||
public Session getSession(String id) { | ||
return SESSIONS.get(id); | ||
} | ||
|
||
public static void clearSessions() { | ||
SESSIONS.clear(); | ||
public Optional<Session> getSession(String id) { | ||
if (id == null) { | ||
return Optional.ofNullable(null); | ||
} | ||
return Optional.ofNullable(SESSIONS.get(id)); | ||
} | ||
|
||
} |
24 changes: 24 additions & 0 deletions
24
tomcat/src/main/java/org/apache/coyote/http11/controller/AbstractController.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
package org.apache.coyote.http11.controller; | ||
|
||
import org.apache.coyote.http11.request.HttpRequest; | ||
import org.apache.coyote.http11.request.line.HttpMethod; | ||
import org.apache.coyote.http11.response.HttpResponse; | ||
|
||
public abstract class AbstractController implements Controller { | ||
|
||
@Override | ||
public HttpResponse service(final HttpRequest request, final HttpResponse response) { | ||
if (request.methodIsEqualTo(HttpMethod.GET)) { | ||
return doGet(request, response); | ||
} | ||
if (request.methodIsEqualTo(HttpMethod.POST)) { | ||
return doPost(request, response); | ||
} | ||
return null; | ||
} | ||
|
||
protected abstract HttpResponse doPost(final HttpRequest request, final HttpResponse response); | ||
|
||
protected abstract HttpResponse doGet(final HttpRequest request, final HttpResponse response); | ||
|
||
} |
Oops, something went wrong.