From 2ebc909038c87755feb765f796749e9c08276fc0 Mon Sep 17 00:00:00 2001 From: sanhee <68936@naver.com> Date: Thu, 19 Aug 2021 12:25:31 +0900 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20user/list=20=EC=A0=91=EA=B7=BC?= =?UTF-8?q?=EC=8B=9C=20Cookie=20=ED=97=A4=EB=8D=94=20=EC=9C=A0=EB=AC=B4?= =?UTF-8?q?=EC=97=90=20=EB=94=B0=EB=9D=BC=20=EB=A6=AC=EB=8B=A4=EC=9D=B4?= =?UTF-8?q?=EB=A0=89=ED=8A=B8=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - user/list 접근시 Cookie 헤더를 읽어서 logined=true가 있을 경우에 사용자 목록을 출력한다. - 만약, logined=true가 아니라면 로그인 페이지로 이동한다. --- src/main/java/webserver/RequestHandler.java | 46 +- .../java/webserver/RequestHandlerTest.java | 427 ++++++++++-------- 2 files changed, 271 insertions(+), 202 deletions(-) diff --git a/src/main/java/webserver/RequestHandler.java b/src/main/java/webserver/RequestHandler.java index 473cb85..51f98c5 100644 --- a/src/main/java/webserver/RequestHandler.java +++ b/src/main/java/webserver/RequestHandler.java @@ -28,7 +28,7 @@ public RequestHandler(Socket connectionSocket) { public void run() { log.debug("New Client Connect! Connected IP : {}, Port : {}", connection.getInetAddress(), - connection.getPort()); + connection.getPort()); try (InputStream in = connection.getInputStream(); OutputStream out = connection.getOutputStream()) { BufferedReader br = new BufferedReader(new InputStreamReader(in)); @@ -63,10 +63,10 @@ public void run() { byte[] body = Files.readAllBytes(htmlFile.toPath()); responseMessage = "HTTP/1.1 200 OK" + System.lineSeparator() + - "Content-Type: text/html;charset=utf-8" + System.lineSeparator() + - "Content-Length: " + body.length + System.lineSeparator() + - System.lineSeparator() + - new String(body); + "Content-Type: text/html;charset=utf-8" + System.lineSeparator() + + "Content-Length: " + body.length + System.lineSeparator() + + System.lineSeparator() + + new String(body); } } @@ -75,20 +75,34 @@ public void run() { Map parameters = request.getRequestMessage().getParameters(); User newUser = User.builder() - .setUserId(parameters.get("userId")) - .setPassword(parameters.get("password")) - .setName(parameters.get("name")) - .setEmail(parameters.get("email")) - .build(); + .setUserId(parameters.get("userId")) + .setPassword(parameters.get("password")) + .setName(parameters.get("name")) + .setEmail(parameters.get("email")) + .build(); DataBase.addUser(newUser); responseMessage = "HTTP/1.1 302 Found" + System.lineSeparator() + - "Location: /index.html"; + "Location: /index.html"; break; } case "/user/login": { responseMessage = loginHandler(request.getRequestMessage().getParameters()); + + break; + } + case "/user/list": { + Map parameters = request.getRequestMessage().getHeader().getAttributes(); + + if (parameters.containsKey("Cookie") && parameters.get("Cookie").equals("logined=true")) { + responseMessage = "HTTP/1.1 302 Found" + System.lineSeparator() + + "Location: /user/list.html"; + + } else { + responseMessage = "HTTP/1.1 302 Found" + System.lineSeparator() + + "Location: /user/login.html"; + } } } @@ -106,7 +120,7 @@ public String loginHandler(Map parameters) { try { findUser = DataBase.findUserById(parameters.get("userId")) - .orElseThrow(UserNotFoundException::new); + .orElseThrow(UserNotFoundException::new); } catch (UserNotFoundException userNotFoundException) { throw new LoginFailedException(); } @@ -118,12 +132,12 @@ public String loginHandler(Map parameters) { } return "HTTP/1.1 302 Found" + System.lineSeparator() + - "Location: /index.html" + System.lineSeparator() + - "Set-Cookie: logined=true; Path=/"; + "Location: /index.html" + System.lineSeparator() + + "Set-Cookie: logined=true; Path=/"; } catch (LoginFailedException loginFailedException) { return "HTTP/1.1 302 Found" + System.lineSeparator() + - "Location: /user/login_failed.html" + System.lineSeparator() + - "Set-Cookie: logined=false; Path=/"; + "Location: /user/login_failed.html" + System.lineSeparator() + + "Set-Cookie: logined=false; Path=/"; } } } diff --git a/src/test/java/webserver/RequestHandlerTest.java b/src/test/java/webserver/RequestHandlerTest.java index a60c0ef..b220d6f 100644 --- a/src/test/java/webserver/RequestHandlerTest.java +++ b/src/test/java/webserver/RequestHandlerTest.java @@ -90,60 +90,60 @@ static Stream run() throws IOException { return Stream.of( Arguments.arguments( "GET /index.html HTTP/1.1" + System.lineSeparator() + - "Host: localhost:8080" + System.lineSeparator() + - "Connection: keep-alive" + System.lineSeparator() + - "Accept: */*" + System.lineSeparator() + - "" + System.lineSeparator(), + "Host: localhost:8080" + System.lineSeparator() + + "Connection: keep-alive" + System.lineSeparator() + + "Accept: */*" + System.lineSeparator() + + "" + System.lineSeparator(), "HTTP/1.1 200 OK" + System.lineSeparator() + - "Content-Type: text/html;charset=utf-8" + System.lineSeparator() + - "Content-Length: 6903" + System.lineSeparator() + - "" + System.lineSeparator() + - Files.lines(new File("./webapp/index.html").toPath()) - .collect(Collectors.joining(System.lineSeparator())) + "Content-Type: text/html;charset=utf-8" + System.lineSeparator() + + "Content-Length: 6903" + System.lineSeparator() + + "" + System.lineSeparator() + + Files.lines(new File("./webapp/index.html").toPath()) + .collect(Collectors.joining(System.lineSeparator())) ), Arguments.arguments( "GET /index2.html HTTP/1.1" + System.lineSeparator() + - "Host: localhost:8080" + System.lineSeparator() + - "Connection: keep-alive" + System.lineSeparator() + - "Accept: */*" + System.lineSeparator() + - "" + System.lineSeparator(), + "Host: localhost:8080" + System.lineSeparator() + + "Connection: keep-alive" + System.lineSeparator() + + "Accept: */*" + System.lineSeparator() + + "" + System.lineSeparator(), "HTTP/1.1 404 NotFound" + System.lineSeparator() ), Arguments.arguments( "GET /user/form.html HTTP/1.1" + System.lineSeparator() + - "Host: localhost:8080" + System.lineSeparator() + - "Connection: keep-alive" + System.lineSeparator() + - "Accept: */*" + System.lineSeparator() + - "" + System.lineSeparator(), + "Host: localhost:8080" + System.lineSeparator() + + "Connection: keep-alive" + System.lineSeparator() + + "Accept: */*" + System.lineSeparator() + + "" + System.lineSeparator(), "HTTP/1.1 200 OK" + System.lineSeparator() + - "Content-Type: text/html;charset=utf-8" + System.lineSeparator() + - "Content-Length: 5169" + System.lineSeparator() + - "" + System.lineSeparator() + - Files.lines(new File("./webapp/user/form.html").toPath()) - .collect(Collectors.joining(System.lineSeparator())) + "Content-Type: text/html;charset=utf-8" + System.lineSeparator() + + "Content-Length: 5169" + System.lineSeparator() + + "" + System.lineSeparator() + + Files.lines(new File("./webapp/user/form.html").toPath()) + .collect(Collectors.joining(System.lineSeparator())) ), Arguments.arguments( "POST /user/create HTTP/1.1" + System.lineSeparator() + - "Host: localhost:8080" + System.lineSeparator() + - "Connection: keep-alive" + System.lineSeparator() + - "Content-Length: 48" + System.lineSeparator() + - "Cache-Control: max-age=0" + System.lineSeparator() + - "sec-ch-ua: \"Google Chrome\";v=\"89\", \"Chromium\";v=\"89\", \";Not A Brand\";v=\"99\"" + System.lineSeparator() + - "sec-ch-ua-mobile: ?0" + System.lineSeparator() + - "Upgrade-Insecure-Requests: 1" + System.lineSeparator() + - "Origin: http://localhost:8080" + System.lineSeparator() + - "Content-Type: application/x-www-form-urlencoded" + System.lineSeparator() + - "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36" + System.lineSeparator() + - "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" + System.lineSeparator() + - "Sec-Fetch-Site: same-origin" + System.lineSeparator() + - "Sec-Fetch-Mode: navigate" + System.lineSeparator() + - "Sec-Fetch-User: ?1" + System.lineSeparator() + - "Sec-Fetch-Dest: document" + System.lineSeparator() + - "Referer: http://localhost:8080/user/form.html" + System.lineSeparator() + - "Accept-Encoding: gzip, deflate, br" + System.lineSeparator() + - "Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7" + System.lineSeparator() + - "Cookie: _ga=GA1.1.773336800.1611186274; Idea-dc7ca9b6=ac856d6e-e872-46ac-b153-000bdad105ec" + System.lineSeparator() + - "" + System.lineSeparator() + - "userId=dae&password=dae&name=dae&email=dae%40dae", + "Host: localhost:8080" + System.lineSeparator() + + "Connection: keep-alive" + System.lineSeparator() + + "Content-Length: 48" + System.lineSeparator() + + "Cache-Control: max-age=0" + System.lineSeparator() + + "sec-ch-ua: \"Google Chrome\";v=\"89\", \"Chromium\";v=\"89\", \";Not A Brand\";v=\"99\"" + System.lineSeparator() + + "sec-ch-ua-mobile: ?0" + System.lineSeparator() + + "Upgrade-Insecure-Requests: 1" + System.lineSeparator() + + "Origin: http://localhost:8080" + System.lineSeparator() + + "Content-Type: application/x-www-form-urlencoded" + System.lineSeparator() + + "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36" + System.lineSeparator() + + "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" + System.lineSeparator() + + "Sec-Fetch-Site: same-origin" + System.lineSeparator() + + "Sec-Fetch-Mode: navigate" + System.lineSeparator() + + "Sec-Fetch-User: ?1" + System.lineSeparator() + + "Sec-Fetch-Dest: document" + System.lineSeparator() + + "Referer: http://localhost:8080/user/form.html" + System.lineSeparator() + + "Accept-Encoding: gzip, deflate, br" + System.lineSeparator() + + "Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7" + System.lineSeparator() + + "Cookie: _ga=GA1.1.773336800.1611186274; Idea-dc7ca9b6=ac856d6e-e872-46ac-b153-000bdad105ec" + System.lineSeparator() + + "" + System.lineSeparator() + + "userId=dae&password=dae&name=dae&email=dae%40dae", "HTTP/1.1 302 Found" + System.lineSeparator() + - "Location: /index.html" + System.lineSeparator() + "Location: /index.html" + System.lineSeparator() ) ); } @@ -169,44 +169,44 @@ static Stream runWithCheckUserCreated() { return Stream.of( Arguments.arguments( "POST /user/create HTTP/1.1" + System.lineSeparator() + - "Host: localhost:8080" + System.lineSeparator() + - "Connection: keep-alive" + System.lineSeparator() + - "Content-Length: 53" + System.lineSeparator() + - "Cache-Control: max-age=0" + System.lineSeparator() + - "sec-ch-ua: \"Google Chrome\";v=\"89\", \"Chromium\";v=\"89\", \";Not A Brand\";v=\"99\"" + System.lineSeparator() + - "sec-ch-ua-mobile: ?0" + System.lineSeparator() + - "Upgrade-Insecure-Requests: 1" + System.lineSeparator() + - "Origin: http://localhost:8080" + System.lineSeparator() + - "Content-Type: application/x-www-form-urlencoded" + System.lineSeparator() + - "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36" + System.lineSeparator() + - "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" + System.lineSeparator() + - "Sec-Fetch-Site: same-origin" + System.lineSeparator() + - "Sec-Fetch-Mode: navigate" + System.lineSeparator() + - "Sec-Fetch-User: ?1" + System.lineSeparator() + - "Sec-Fetch-Dest: document" + System.lineSeparator() + - "Referer: http://localhost:8080/user/form.html" + System.lineSeparator() + - "Accept-Encoding: gzip, deflate, br" + System.lineSeparator() + - "Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7" + System.lineSeparator() + - "Cookie: _ga=GA1.1.773336800.1611186274; Idea-dc7ca9b6=ac856d6e-e872-46ac-b153-000bdad105ec" + System.lineSeparator() + - "" + System.lineSeparator() + - "userId=test&password=test&name=test&email=test%40test", + "Host: localhost:8080" + System.lineSeparator() + + "Connection: keep-alive" + System.lineSeparator() + + "Content-Length: 53" + System.lineSeparator() + + "Cache-Control: max-age=0" + System.lineSeparator() + + "sec-ch-ua: \"Google Chrome\";v=\"89\", \"Chromium\";v=\"89\", \";Not A Brand\";v=\"99\"" + System.lineSeparator() + + "sec-ch-ua-mobile: ?0" + System.lineSeparator() + + "Upgrade-Insecure-Requests: 1" + System.lineSeparator() + + "Origin: http://localhost:8080" + System.lineSeparator() + + "Content-Type: application/x-www-form-urlencoded" + System.lineSeparator() + + "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36" + System.lineSeparator() + + "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" + System.lineSeparator() + + "Sec-Fetch-Site: same-origin" + System.lineSeparator() + + "Sec-Fetch-Mode: navigate" + System.lineSeparator() + + "Sec-Fetch-User: ?1" + System.lineSeparator() + + "Sec-Fetch-Dest: document" + System.lineSeparator() + + "Referer: http://localhost:8080/user/form.html" + System.lineSeparator() + + "Accept-Encoding: gzip, deflate, br" + System.lineSeparator() + + "Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7" + System.lineSeparator() + + "Cookie: _ga=GA1.1.773336800.1611186274; Idea-dc7ca9b6=ac856d6e-e872-46ac-b153-000bdad105ec" + System.lineSeparator() + + "" + System.lineSeparator() + + "userId=test&password=test&name=test&email=test%40test", User.builder() - .setUserId("test") - .setPassword("test") - .setName("test") - .setEmail("test@test") - .build() + .setUserId("test") + .setPassword("test") + .setName("test") + .setEmail("test@test") + .build() ), Arguments.arguments( "GET /user/create?userId=javajigi&password=password&name=%EB%B0%95%EC%9E%AC%EC%84%B1&email=javajigi%40slipp.net HTTP/1.1" + System.lineSeparator() + - "Host: localhost:8080" + System.lineSeparator() + - "Connection: keep-alive" + System.lineSeparator() + - "Accept: */*" + System.lineSeparator(), + "Host: localhost:8080" + System.lineSeparator() + + "Connection: keep-alive" + System.lineSeparator() + + "Accept: */*" + System.lineSeparator(), User.builder() - .setUserId("javajigi") - .setPassword("password") - .setName("test") - .setEmail("javajigi@40slipp.net") - .build() + .setUserId("javajigi") + .setPassword("password") + .setName("test") + .setEmail("javajigi@40slipp.net") + .build() ) ); } @@ -232,9 +232,9 @@ static Stream runWithFailToCreateUser() { return Stream.of( Arguments.arguments( "POST /user/create HTTP/1.1" + System.lineSeparator() + - "Content-Length: 3" + System.lineSeparator() + - System.lineSeparator() + - "a=b" + "Content-Length: 3" + System.lineSeparator() + + System.lineSeparator() + + "a=b" )); } @@ -269,102 +269,102 @@ static Stream runWithLogin() throws IOException { Arguments.arguments( "로그인 성공", User.builder() - .setUserId("test") - .setPassword("test") - .setName("test") - .setEmail("test@test") - .build(), + .setUserId("test") + .setPassword("test") + .setName("test") + .setEmail("test@test") + .build(), "POST /user/login HTTP/1.1" + System.lineSeparator() + - "Host: localhost:8080" + System.lineSeparator() + - "Connection: keep-alive" + System.lineSeparator() + - "Content-Length: 53" + System.lineSeparator() + - "Cache-Control: max-age=0" + System.lineSeparator() + - "sec-ch-ua: \"Google Chrome\";v=\"89\", \"Chromium\";v=\"89\", \";Not A Brand\";v=\"99\"" + System.lineSeparator() + - "sec-ch-ua-mobile: ?0" + System.lineSeparator() + - "Upgrade-Insecure-Requests: 1" + System.lineSeparator() + - "Origin: http://localhost:8080" + System.lineSeparator() + - "Content-Type: application/x-www-form-urlencoded" + System.lineSeparator() + - "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36" + System.lineSeparator() + - "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" + System.lineSeparator() + - "Sec-Fetch-Site: same-origin" + System.lineSeparator() + - "Sec-Fetch-Mode: navigate" + System.lineSeparator() + - "Sec-Fetch-User: ?1" + System.lineSeparator() + - "Sec-Fetch-Dest: document" + System.lineSeparator() + - "Referer: http://localhost:8080/user/form.html" + System.lineSeparator() + - "Accept-Encoding: gzip, deflate, br" + System.lineSeparator() + - "Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7" + System.lineSeparator() + - "Cookie: _ga=GA1.1.773336800.1611186274; Idea-dc7ca9b6=ac856d6e-e872-46ac-b153-000bdad105ec" + System.lineSeparator() + - "" + System.lineSeparator() + - "userId=test&password=test&name=test&email=test%40test", + "Host: localhost:8080" + System.lineSeparator() + + "Connection: keep-alive" + System.lineSeparator() + + "Content-Length: 53" + System.lineSeparator() + + "Cache-Control: max-age=0" + System.lineSeparator() + + "sec-ch-ua: \"Google Chrome\";v=\"89\", \"Chromium\";v=\"89\", \";Not A Brand\";v=\"99\"" + System.lineSeparator() + + "sec-ch-ua-mobile: ?0" + System.lineSeparator() + + "Upgrade-Insecure-Requests: 1" + System.lineSeparator() + + "Origin: http://localhost:8080" + System.lineSeparator() + + "Content-Type: application/x-www-form-urlencoded" + System.lineSeparator() + + "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36" + System.lineSeparator() + + "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" + System.lineSeparator() + + "Sec-Fetch-Site: same-origin" + System.lineSeparator() + + "Sec-Fetch-Mode: navigate" + System.lineSeparator() + + "Sec-Fetch-User: ?1" + System.lineSeparator() + + "Sec-Fetch-Dest: document" + System.lineSeparator() + + "Referer: http://localhost:8080/user/form.html" + System.lineSeparator() + + "Accept-Encoding: gzip, deflate, br" + System.lineSeparator() + + "Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7" + System.lineSeparator() + + "Cookie: _ga=GA1.1.773336800.1611186274; Idea-dc7ca9b6=ac856d6e-e872-46ac-b153-000bdad105ec" + System.lineSeparator() + + "" + System.lineSeparator() + + "userId=test&password=test&name=test&email=test%40test", "HTTP/1.1 302 Found" + System.lineSeparator() + - "Location: /index.html" + System.lineSeparator() + - "Set-Cookie: logined=true; Path=/" + System.lineSeparator() + "Location: /index.html" + System.lineSeparator() + + "Set-Cookie: logined=true; Path=/" + System.lineSeparator() ), Arguments.arguments( "로그인 실패 - 잘못된 아이디", User.builder() - .setUserId("test") - .setPassword("test") - .setName("test") - .setEmail("test@test") - .build(), + .setUserId("test") + .setPassword("test") + .setName("test") + .setEmail("test@test") + .build(), "POST /user/login HTTP/1.1" + System.lineSeparator() + - "Host: localhost:8080" + System.lineSeparator() + - "Connection: keep-alive" + System.lineSeparator() + - "Content-Length: 53" + System.lineSeparator() + - "Cache-Control: max-age=0" + System.lineSeparator() + - "sec-ch-ua: \"Google Chrome\";v=\"89\", \"Chromium\";v=\"89\", \";Not A Brand\";v=\"99\"" + System.lineSeparator() + - "sec-ch-ua-mobile: ?0" + System.lineSeparator() + - "Upgrade-Insecure-Requests: 1" + System.lineSeparator() + - "Origin: http://localhost:8080" + System.lineSeparator() + - "Content-Type: application/x-www-form-urlencoded" + System.lineSeparator() + - "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36" + System.lineSeparator() + - "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" + System.lineSeparator() + - "Sec-Fetch-Site: same-origin" + System.lineSeparator() + - "Sec-Fetch-Mode: navigate" + System.lineSeparator() + - "Sec-Fetch-User: ?1" + System.lineSeparator() + - "Sec-Fetch-Dest: document" + System.lineSeparator() + - "Referer: http://localhost:8080/user/form.html" + System.lineSeparator() + - "Accept-Encoding: gzip, deflate, br" + System.lineSeparator() + - "Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7" + System.lineSeparator() + - "Cookie: _ga=GA1.1.773336800.1611186274; Idea-dc7ca9b6=ac856d6e-e872-46ac-b153-000bdad105ec" + System.lineSeparator() + - "" + System.lineSeparator() + - "userId=wrongId&password=test&name=test&email=test%40test", + "Host: localhost:8080" + System.lineSeparator() + + "Connection: keep-alive" + System.lineSeparator() + + "Content-Length: 53" + System.lineSeparator() + + "Cache-Control: max-age=0" + System.lineSeparator() + + "sec-ch-ua: \"Google Chrome\";v=\"89\", \"Chromium\";v=\"89\", \";Not A Brand\";v=\"99\"" + System.lineSeparator() + + "sec-ch-ua-mobile: ?0" + System.lineSeparator() + + "Upgrade-Insecure-Requests: 1" + System.lineSeparator() + + "Origin: http://localhost:8080" + System.lineSeparator() + + "Content-Type: application/x-www-form-urlencoded" + System.lineSeparator() + + "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36" + System.lineSeparator() + + "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" + System.lineSeparator() + + "Sec-Fetch-Site: same-origin" + System.lineSeparator() + + "Sec-Fetch-Mode: navigate" + System.lineSeparator() + + "Sec-Fetch-User: ?1" + System.lineSeparator() + + "Sec-Fetch-Dest: document" + System.lineSeparator() + + "Referer: http://localhost:8080/user/form.html" + System.lineSeparator() + + "Accept-Encoding: gzip, deflate, br" + System.lineSeparator() + + "Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7" + System.lineSeparator() + + "Cookie: _ga=GA1.1.773336800.1611186274; Idea-dc7ca9b6=ac856d6e-e872-46ac-b153-000bdad105ec" + System.lineSeparator() + + "" + System.lineSeparator() + + "userId=wrongId&password=test&name=test&email=test%40test", "HTTP/1.1 302 Found" + System.lineSeparator() + - "Location: /user/login_failed.html" + System.lineSeparator() + - "Set-Cookie: logined=false; Path=/" + System.lineSeparator() + "Location: /user/login_failed.html" + System.lineSeparator() + + "Set-Cookie: logined=false; Path=/" + System.lineSeparator() ), Arguments.arguments( "로그인 실패 - 잘못된 비밀번호", User.builder() - .setUserId("test") - .setPassword("test") - .setName("test") - .setEmail("test@test") - .build(), + .setUserId("test") + .setPassword("test") + .setName("test") + .setEmail("test@test") + .build(), "POST /user/login HTTP/1.1" + System.lineSeparator() + - "Host: localhost:8080" + System.lineSeparator() + - "Connection: keep-alive" + System.lineSeparator() + - "Content-Length: 53" + System.lineSeparator() + - "Cache-Control: max-age=0" + System.lineSeparator() + - "sec-ch-ua: \"Google Chrome\";v=\"89\", \"Chromium\";v=\"89\", \";Not A Brand\";v=\"99\"" + System.lineSeparator() + - "sec-ch-ua-mobile: ?0" + System.lineSeparator() + - "Upgrade-Insecure-Requests: 1" + System.lineSeparator() + - "Origin: http://localhost:8080" + System.lineSeparator() + - "Content-Type: application/x-www-form-urlencoded" + System.lineSeparator() + - "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36" + System.lineSeparator() + - "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" + System.lineSeparator() + - "Sec-Fetch-Site: same-origin" + System.lineSeparator() + - "Sec-Fetch-Mode: navigate" + System.lineSeparator() + - "Sec-Fetch-User: ?1" + System.lineSeparator() + - "Sec-Fetch-Dest: document" + System.lineSeparator() + - "Referer: http://localhost:8080/user/form.html" + System.lineSeparator() + - "Accept-Encoding: gzip, deflate, br" + System.lineSeparator() + - "Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7" + System.lineSeparator() + - "Cookie: _ga=GA1.1.773336800.1611186274; Idea-dc7ca9b6=ac856d6e-e872-46ac-b153-000bdad105ec" + System.lineSeparator() + - "" + System.lineSeparator() + - "userId=test&password=wrongPw&name=test&email=test%40test", + "Host: localhost:8080" + System.lineSeparator() + + "Connection: keep-alive" + System.lineSeparator() + + "Content-Length: 53" + System.lineSeparator() + + "Cache-Control: max-age=0" + System.lineSeparator() + + "sec-ch-ua: \"Google Chrome\";v=\"89\", \"Chromium\";v=\"89\", \";Not A Brand\";v=\"99\"" + System.lineSeparator() + + "sec-ch-ua-mobile: ?0" + System.lineSeparator() + + "Upgrade-Insecure-Requests: 1" + System.lineSeparator() + + "Origin: http://localhost:8080" + System.lineSeparator() + + "Content-Type: application/x-www-form-urlencoded" + System.lineSeparator() + + "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36" + System.lineSeparator() + + "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" + System.lineSeparator() + + "Sec-Fetch-Site: same-origin" + System.lineSeparator() + + "Sec-Fetch-Mode: navigate" + System.lineSeparator() + + "Sec-Fetch-User: ?1" + System.lineSeparator() + + "Sec-Fetch-Dest: document" + System.lineSeparator() + + "Referer: http://localhost:8080/user/form.html" + System.lineSeparator() + + "Accept-Encoding: gzip, deflate, br" + System.lineSeparator() + + "Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7" + System.lineSeparator() + + "Cookie: _ga=GA1.1.773336800.1611186274; Idea-dc7ca9b6=ac856d6e-e872-46ac-b153-000bdad105ec" + System.lineSeparator() + + "" + System.lineSeparator() + + "userId=test&password=wrongPw&name=test&email=test%40test", "HTTP/1.1 302 Found" + System.lineSeparator() + - "Location: /user/login_failed.html" + System.lineSeparator() + - "Set-Cookie: logined=false; Path=/" + System.lineSeparator() + "Location: /user/login_failed.html" + System.lineSeparator() + + "Set-Cookie: logined=false; Path=/" + System.lineSeparator() ) ); } @@ -387,11 +387,11 @@ static Stream loginHandler() { Arguments.arguments( "로그인 성공", User.builder() - .setUserId("test") - .setPassword("test") - .setName("test") - .setEmail("test@test") - .build(), + .setUserId("test") + .setPassword("test") + .setName("test") + .setEmail("test@test") + .build(), new HashMap() {{ put("userId", "test"); put("password", "test"); @@ -399,16 +399,16 @@ static Stream loginHandler() { put("email", "test@test"); }}, "HTTP/1.1 302 Found" + System.lineSeparator() + - "Location: /index.html" + System.lineSeparator() + - "Set-Cookie: logined=true; Path=/" + "Location: /index.html" + System.lineSeparator() + + "Set-Cookie: logined=true; Path=/" ), Arguments.arguments( "로그인 실패 - 잘못된 ID", User.builder() - .setUserId("test") - .setPassword("test") - .setName("test") - .setEmail("test@test") - .build(), + .setUserId("test") + .setPassword("test") + .setName("test") + .setEmail("test@test") + .build(), new HashMap() {{ put("userId", "wrongId"); put("password", "test"); @@ -416,16 +416,16 @@ static Stream loginHandler() { put("email", "test@test"); }}, "HTTP/1.1 302 Found" + System.lineSeparator() + - "Location: /user/login_failed.html" + System.lineSeparator() + - "Set-Cookie: logined=false; Path=/" + "Location: /user/login_failed.html" + System.lineSeparator() + + "Set-Cookie: logined=false; Path=/" ), Arguments.arguments( "로그인 실패 - 잘못된 비밀번호", User.builder() - .setUserId("test") - .setPassword("test") - .setName("test") - .setEmail("test@test") - .build(), + .setUserId("test") + .setPassword("test") + .setName("test") + .setEmail("test@test") + .build(), new HashMap() {{ put("userId", "test"); put("password", "wrongPassword"); @@ -433,9 +433,64 @@ static Stream loginHandler() { put("email", "test@test"); }}, "HTTP/1.1 302 Found" + System.lineSeparator() + - "Location: /user/login_failed.html" + System.lineSeparator() + - "Set-Cookie: logined=false; Path=/" + "Location: /user/login_failed.html" + System.lineSeparator() + + "Set-Cookie: logined=false; Path=/" ) ); } + + @ParameterizedTest + @MethodSource("리스트_페이지") + void 리스트_페이지(String desc, String message, String expectedResponseMessage) throws IOException { + + + RequestHandler requestHandler = new RequestHandler(server.accept()); + + BufferedOutputStream browserStream = new BufferedOutputStream(browser.getOutputStream()); + browserStream.write(message.getBytes(StandardCharsets.UTF_8)); + browserStream.write(System.lineSeparator().getBytes(StandardCharsets.UTF_8)); + browserStream.flush(); + + requestHandler.run(); + + BufferedReader br = new BufferedReader(new InputStreamReader(browser.getInputStream())); + String actualResponseMessage = br.lines().collect(Collectors.joining(System.lineSeparator())); + + + assertThat(actualResponseMessage) + .as("리스트_페이지 : %s", desc) + .isEqualTo(expectedResponseMessage); + } + + static Stream 리스트_페이지() throws IOException { + return Stream.of( + Arguments.arguments( + "Cookie: logined=true가 있을 경우 리스트 페이지 접속", + + "GET /user/list HTTP/1.1" + System.lineSeparator() + + "Host: localhost:8080" + System.lineSeparator() + + "Connection: keep-alive" + System.lineSeparator() + + "Accept: */*" + System.lineSeparator() + + "Cookie: logined=true" + System.lineSeparator() + + "" + System.lineSeparator(), + + "HTTP/1.1 302 Found" + System.lineSeparator() + + "Location: /user/list.html" + System.lineSeparator() + + ), Arguments.arguments( + "Cookie: logined=true가 없을 경우 로그인 페이지 이동", + + "GET /user/list HTTP/1.1" + System.lineSeparator() + + "Host: localhost:8080" + System.lineSeparator() + + "Connection: keep-alive" + System.lineSeparator() + + "Accept: */*" + System.lineSeparator() + + "" + System.lineSeparator(), + + "HTTP/1.1 302 Found" + System.lineSeparator() + + "Location: /user/login.html" + System.lineSeparator() + ) + ); + + } + } From 0e1b08d0671a07923402cee049c7676e6f6bee23 Mon Sep 17 00:00:00 2001 From: sanhee <68936@naver.com> Date: Fri, 20 Aug 2021 12:03:08 +0900 Subject: [PATCH 2/3] =?UTF-8?q?feat:=20html=EC=9D=84=20=EC=B0=BE=EB=8A=94?= =?UTF-8?q?=20=EB=A1=9C=EC=A7=81,=20viewResolver()=20=EC=A0=95=EC=9D=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit html을 찾는 로직이 중복되어, 메소드로 추출했습니다. --- src/main/java/webserver/RequestHandler.java | 52 ++- .../java/webserver/RequestHandlerTest.java | 442 ++++++++++-------- 2 files changed, 282 insertions(+), 212 deletions(-) diff --git a/src/main/java/webserver/RequestHandler.java b/src/main/java/webserver/RequestHandler.java index 51f98c5..6fc77e8 100644 --- a/src/main/java/webserver/RequestHandler.java +++ b/src/main/java/webserver/RequestHandler.java @@ -55,18 +55,23 @@ public void run() { String path = request.getPath(); String extension = request.getPathExtension(); - if (extension.equals("html")) { - - File htmlFile = new File("./webapp" + path); - if (htmlFile.exists()) { - byte[] body = Files.readAllBytes(htmlFile.toPath()); + if (extension.equals("html")) { - responseMessage = "HTTP/1.1 200 OK" + System.lineSeparator() + - "Content-Type: text/html;charset=utf-8" + System.lineSeparator() + - "Content-Length: " + body.length + System.lineSeparator() + - System.lineSeparator() + - new String(body); + Map parameters = request.getRequestMessage().getHeader().getAttributes(); + String Cookie = parameters.getOrDefault("Cookie","empty"); + + if(loginRequired(path)){ + switch (Cookie){ + case "logined=true": + responseMessage = viewResolver(path); + break; + default: + responseMessage = "HTTP/1.1 302 Found" + System.lineSeparator() + + "Location: /user/login.html"; + } + }else{ + responseMessage = viewResolver(path); } } @@ -95,10 +100,10 @@ public void run() { case "/user/list": { Map parameters = request.getRequestMessage().getHeader().getAttributes(); - if (parameters.containsKey("Cookie") && parameters.get("Cookie").equals("logined=true")) { - responseMessage = "HTTP/1.1 302 Found" + System.lineSeparator() + - "Location: /user/list.html"; + String Cookie = parameters.getOrDefault("Cookie","empty"); + if (Cookie.equals("logined=true")) { + responseMessage = viewResolver(path+".html"); } else { responseMessage = "HTTP/1.1 302 Found" + System.lineSeparator() + "Location: /user/login.html"; @@ -114,6 +119,27 @@ public void run() { } } + private String viewResolver(String path) throws IOException { + File htmlFile = new File("./webapp" + path); + String responseMessage = ""; + + if (htmlFile.exists()) { + byte[] body = Files.readAllBytes(htmlFile.toPath()); + + responseMessage = "HTTP/1.1 200 OK" + System.lineSeparator() + + "Content-Type: text/html;charset=utf-8" + System.lineSeparator() + + "Content-Length: " + body.length + System.lineSeparator() + + System.lineSeparator() + + new String(body); + } + + return responseMessage; + } + + private boolean loginRequired(String path) { + return path.equals("/user/list.html"); + } + public String loginHandler(Map parameters) { try { User findUser; diff --git a/src/test/java/webserver/RequestHandlerTest.java b/src/test/java/webserver/RequestHandlerTest.java index b220d6f..ed33da7 100644 --- a/src/test/java/webserver/RequestHandlerTest.java +++ b/src/test/java/webserver/RequestHandlerTest.java @@ -90,60 +90,60 @@ static Stream run() throws IOException { return Stream.of( Arguments.arguments( "GET /index.html HTTP/1.1" + System.lineSeparator() + - "Host: localhost:8080" + System.lineSeparator() + - "Connection: keep-alive" + System.lineSeparator() + - "Accept: */*" + System.lineSeparator() + - "" + System.lineSeparator(), + "Host: localhost:8080" + System.lineSeparator() + + "Connection: keep-alive" + System.lineSeparator() + + "Accept: */*" + System.lineSeparator() + + "" + System.lineSeparator(), "HTTP/1.1 200 OK" + System.lineSeparator() + - "Content-Type: text/html;charset=utf-8" + System.lineSeparator() + - "Content-Length: 6903" + System.lineSeparator() + - "" + System.lineSeparator() + - Files.lines(new File("./webapp/index.html").toPath()) - .collect(Collectors.joining(System.lineSeparator())) + "Content-Type: text/html;charset=utf-8" + System.lineSeparator() + + "Content-Length: 6903" + System.lineSeparator() + + "" + System.lineSeparator() + + Files.lines(new File("./webapp/index.html").toPath()) + .collect(Collectors.joining(System.lineSeparator())) ), Arguments.arguments( "GET /index2.html HTTP/1.1" + System.lineSeparator() + - "Host: localhost:8080" + System.lineSeparator() + - "Connection: keep-alive" + System.lineSeparator() + - "Accept: */*" + System.lineSeparator() + - "" + System.lineSeparator(), + "Host: localhost:8080" + System.lineSeparator() + + "Connection: keep-alive" + System.lineSeparator() + + "Accept: */*" + System.lineSeparator() + + "" + System.lineSeparator(), "HTTP/1.1 404 NotFound" + System.lineSeparator() ), Arguments.arguments( "GET /user/form.html HTTP/1.1" + System.lineSeparator() + - "Host: localhost:8080" + System.lineSeparator() + - "Connection: keep-alive" + System.lineSeparator() + - "Accept: */*" + System.lineSeparator() + - "" + System.lineSeparator(), + "Host: localhost:8080" + System.lineSeparator() + + "Connection: keep-alive" + System.lineSeparator() + + "Accept: */*" + System.lineSeparator() + + "" + System.lineSeparator(), "HTTP/1.1 200 OK" + System.lineSeparator() + - "Content-Type: text/html;charset=utf-8" + System.lineSeparator() + - "Content-Length: 5169" + System.lineSeparator() + - "" + System.lineSeparator() + - Files.lines(new File("./webapp/user/form.html").toPath()) - .collect(Collectors.joining(System.lineSeparator())) + "Content-Type: text/html;charset=utf-8" + System.lineSeparator() + + "Content-Length: 5169" + System.lineSeparator() + + "" + System.lineSeparator() + + Files.lines(new File("./webapp/user/form.html").toPath()) + .collect(Collectors.joining(System.lineSeparator())) ), Arguments.arguments( "POST /user/create HTTP/1.1" + System.lineSeparator() + - "Host: localhost:8080" + System.lineSeparator() + - "Connection: keep-alive" + System.lineSeparator() + - "Content-Length: 48" + System.lineSeparator() + - "Cache-Control: max-age=0" + System.lineSeparator() + - "sec-ch-ua: \"Google Chrome\";v=\"89\", \"Chromium\";v=\"89\", \";Not A Brand\";v=\"99\"" + System.lineSeparator() + - "sec-ch-ua-mobile: ?0" + System.lineSeparator() + - "Upgrade-Insecure-Requests: 1" + System.lineSeparator() + - "Origin: http://localhost:8080" + System.lineSeparator() + - "Content-Type: application/x-www-form-urlencoded" + System.lineSeparator() + - "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36" + System.lineSeparator() + - "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" + System.lineSeparator() + - "Sec-Fetch-Site: same-origin" + System.lineSeparator() + - "Sec-Fetch-Mode: navigate" + System.lineSeparator() + - "Sec-Fetch-User: ?1" + System.lineSeparator() + - "Sec-Fetch-Dest: document" + System.lineSeparator() + - "Referer: http://localhost:8080/user/form.html" + System.lineSeparator() + - "Accept-Encoding: gzip, deflate, br" + System.lineSeparator() + - "Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7" + System.lineSeparator() + - "Cookie: _ga=GA1.1.773336800.1611186274; Idea-dc7ca9b6=ac856d6e-e872-46ac-b153-000bdad105ec" + System.lineSeparator() + - "" + System.lineSeparator() + - "userId=dae&password=dae&name=dae&email=dae%40dae", + "Host: localhost:8080" + System.lineSeparator() + + "Connection: keep-alive" + System.lineSeparator() + + "Content-Length: 48" + System.lineSeparator() + + "Cache-Control: max-age=0" + System.lineSeparator() + + "sec-ch-ua: \"Google Chrome\";v=\"89\", \"Chromium\";v=\"89\", \";Not A Brand\";v=\"99\"" + System.lineSeparator() + + "sec-ch-ua-mobile: ?0" + System.lineSeparator() + + "Upgrade-Insecure-Requests: 1" + System.lineSeparator() + + "Origin: http://localhost:8080" + System.lineSeparator() + + "Content-Type: application/x-www-form-urlencoded" + System.lineSeparator() + + "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36" + System.lineSeparator() + + "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" + System.lineSeparator() + + "Sec-Fetch-Site: same-origin" + System.lineSeparator() + + "Sec-Fetch-Mode: navigate" + System.lineSeparator() + + "Sec-Fetch-User: ?1" + System.lineSeparator() + + "Sec-Fetch-Dest: document" + System.lineSeparator() + + "Referer: http://localhost:8080/user/form.html" + System.lineSeparator() + + "Accept-Encoding: gzip, deflate, br" + System.lineSeparator() + + "Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7" + System.lineSeparator() + + "Cookie: _ga=GA1.1.773336800.1611186274; Idea-dc7ca9b6=ac856d6e-e872-46ac-b153-000bdad105ec" + System.lineSeparator() + + "" + System.lineSeparator() + + "userId=dae&password=dae&name=dae&email=dae%40dae", "HTTP/1.1 302 Found" + System.lineSeparator() + - "Location: /index.html" + System.lineSeparator() + "Location: /index.html" + System.lineSeparator() ) ); } @@ -169,44 +169,44 @@ static Stream runWithCheckUserCreated() { return Stream.of( Arguments.arguments( "POST /user/create HTTP/1.1" + System.lineSeparator() + - "Host: localhost:8080" + System.lineSeparator() + - "Connection: keep-alive" + System.lineSeparator() + - "Content-Length: 53" + System.lineSeparator() + - "Cache-Control: max-age=0" + System.lineSeparator() + - "sec-ch-ua: \"Google Chrome\";v=\"89\", \"Chromium\";v=\"89\", \";Not A Brand\";v=\"99\"" + System.lineSeparator() + - "sec-ch-ua-mobile: ?0" + System.lineSeparator() + - "Upgrade-Insecure-Requests: 1" + System.lineSeparator() + - "Origin: http://localhost:8080" + System.lineSeparator() + - "Content-Type: application/x-www-form-urlencoded" + System.lineSeparator() + - "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36" + System.lineSeparator() + - "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" + System.lineSeparator() + - "Sec-Fetch-Site: same-origin" + System.lineSeparator() + - "Sec-Fetch-Mode: navigate" + System.lineSeparator() + - "Sec-Fetch-User: ?1" + System.lineSeparator() + - "Sec-Fetch-Dest: document" + System.lineSeparator() + - "Referer: http://localhost:8080/user/form.html" + System.lineSeparator() + - "Accept-Encoding: gzip, deflate, br" + System.lineSeparator() + - "Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7" + System.lineSeparator() + - "Cookie: _ga=GA1.1.773336800.1611186274; Idea-dc7ca9b6=ac856d6e-e872-46ac-b153-000bdad105ec" + System.lineSeparator() + - "" + System.lineSeparator() + - "userId=test&password=test&name=test&email=test%40test", + "Host: localhost:8080" + System.lineSeparator() + + "Connection: keep-alive" + System.lineSeparator() + + "Content-Length: 53" + System.lineSeparator() + + "Cache-Control: max-age=0" + System.lineSeparator() + + "sec-ch-ua: \"Google Chrome\";v=\"89\", \"Chromium\";v=\"89\", \";Not A Brand\";v=\"99\"" + System.lineSeparator() + + "sec-ch-ua-mobile: ?0" + System.lineSeparator() + + "Upgrade-Insecure-Requests: 1" + System.lineSeparator() + + "Origin: http://localhost:8080" + System.lineSeparator() + + "Content-Type: application/x-www-form-urlencoded" + System.lineSeparator() + + "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36" + System.lineSeparator() + + "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" + System.lineSeparator() + + "Sec-Fetch-Site: same-origin" + System.lineSeparator() + + "Sec-Fetch-Mode: navigate" + System.lineSeparator() + + "Sec-Fetch-User: ?1" + System.lineSeparator() + + "Sec-Fetch-Dest: document" + System.lineSeparator() + + "Referer: http://localhost:8080/user/form.html" + System.lineSeparator() + + "Accept-Encoding: gzip, deflate, br" + System.lineSeparator() + + "Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7" + System.lineSeparator() + + "Cookie: _ga=GA1.1.773336800.1611186274; Idea-dc7ca9b6=ac856d6e-e872-46ac-b153-000bdad105ec" + System.lineSeparator() + + "" + System.lineSeparator() + + "userId=test&password=test&name=test&email=test%40test", User.builder() - .setUserId("test") - .setPassword("test") - .setName("test") - .setEmail("test@test") - .build() + .setUserId("test") + .setPassword("test") + .setName("test") + .setEmail("test@test") + .build() ), Arguments.arguments( "GET /user/create?userId=javajigi&password=password&name=%EB%B0%95%EC%9E%AC%EC%84%B1&email=javajigi%40slipp.net HTTP/1.1" + System.lineSeparator() + - "Host: localhost:8080" + System.lineSeparator() + - "Connection: keep-alive" + System.lineSeparator() + - "Accept: */*" + System.lineSeparator(), + "Host: localhost:8080" + System.lineSeparator() + + "Connection: keep-alive" + System.lineSeparator() + + "Accept: */*" + System.lineSeparator(), User.builder() - .setUserId("javajigi") - .setPassword("password") - .setName("test") - .setEmail("javajigi@40slipp.net") - .build() + .setUserId("javajigi") + .setPassword("password") + .setName("test") + .setEmail("javajigi@40slipp.net") + .build() ) ); } @@ -232,9 +232,9 @@ static Stream runWithFailToCreateUser() { return Stream.of( Arguments.arguments( "POST /user/create HTTP/1.1" + System.lineSeparator() + - "Content-Length: 3" + System.lineSeparator() + - System.lineSeparator() + - "a=b" + "Content-Length: 3" + System.lineSeparator() + + System.lineSeparator() + + "a=b" )); } @@ -269,102 +269,102 @@ static Stream runWithLogin() throws IOException { Arguments.arguments( "로그인 성공", User.builder() - .setUserId("test") - .setPassword("test") - .setName("test") - .setEmail("test@test") - .build(), + .setUserId("test") + .setPassword("test") + .setName("test") + .setEmail("test@test") + .build(), "POST /user/login HTTP/1.1" + System.lineSeparator() + - "Host: localhost:8080" + System.lineSeparator() + - "Connection: keep-alive" + System.lineSeparator() + - "Content-Length: 53" + System.lineSeparator() + - "Cache-Control: max-age=0" + System.lineSeparator() + - "sec-ch-ua: \"Google Chrome\";v=\"89\", \"Chromium\";v=\"89\", \";Not A Brand\";v=\"99\"" + System.lineSeparator() + - "sec-ch-ua-mobile: ?0" + System.lineSeparator() + - "Upgrade-Insecure-Requests: 1" + System.lineSeparator() + - "Origin: http://localhost:8080" + System.lineSeparator() + - "Content-Type: application/x-www-form-urlencoded" + System.lineSeparator() + - "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36" + System.lineSeparator() + - "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" + System.lineSeparator() + - "Sec-Fetch-Site: same-origin" + System.lineSeparator() + - "Sec-Fetch-Mode: navigate" + System.lineSeparator() + - "Sec-Fetch-User: ?1" + System.lineSeparator() + - "Sec-Fetch-Dest: document" + System.lineSeparator() + - "Referer: http://localhost:8080/user/form.html" + System.lineSeparator() + - "Accept-Encoding: gzip, deflate, br" + System.lineSeparator() + - "Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7" + System.lineSeparator() + - "Cookie: _ga=GA1.1.773336800.1611186274; Idea-dc7ca9b6=ac856d6e-e872-46ac-b153-000bdad105ec" + System.lineSeparator() + - "" + System.lineSeparator() + - "userId=test&password=test&name=test&email=test%40test", + "Host: localhost:8080" + System.lineSeparator() + + "Connection: keep-alive" + System.lineSeparator() + + "Content-Length: 53" + System.lineSeparator() + + "Cache-Control: max-age=0" + System.lineSeparator() + + "sec-ch-ua: \"Google Chrome\";v=\"89\", \"Chromium\";v=\"89\", \";Not A Brand\";v=\"99\"" + System.lineSeparator() + + "sec-ch-ua-mobile: ?0" + System.lineSeparator() + + "Upgrade-Insecure-Requests: 1" + System.lineSeparator() + + "Origin: http://localhost:8080" + System.lineSeparator() + + "Content-Type: application/x-www-form-urlencoded" + System.lineSeparator() + + "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36" + System.lineSeparator() + + "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" + System.lineSeparator() + + "Sec-Fetch-Site: same-origin" + System.lineSeparator() + + "Sec-Fetch-Mode: navigate" + System.lineSeparator() + + "Sec-Fetch-User: ?1" + System.lineSeparator() + + "Sec-Fetch-Dest: document" + System.lineSeparator() + + "Referer: http://localhost:8080/user/form.html" + System.lineSeparator() + + "Accept-Encoding: gzip, deflate, br" + System.lineSeparator() + + "Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7" + System.lineSeparator() + + "Cookie: _ga=GA1.1.773336800.1611186274; Idea-dc7ca9b6=ac856d6e-e872-46ac-b153-000bdad105ec" + System.lineSeparator() + + "" + System.lineSeparator() + + "userId=test&password=test&name=test&email=test%40test", "HTTP/1.1 302 Found" + System.lineSeparator() + - "Location: /index.html" + System.lineSeparator() + - "Set-Cookie: logined=true; Path=/" + System.lineSeparator() + "Location: /index.html" + System.lineSeparator() + + "Set-Cookie: logined=true; Path=/" + System.lineSeparator() ), Arguments.arguments( "로그인 실패 - 잘못된 아이디", User.builder() - .setUserId("test") - .setPassword("test") - .setName("test") - .setEmail("test@test") - .build(), + .setUserId("test") + .setPassword("test") + .setName("test") + .setEmail("test@test") + .build(), "POST /user/login HTTP/1.1" + System.lineSeparator() + - "Host: localhost:8080" + System.lineSeparator() + - "Connection: keep-alive" + System.lineSeparator() + - "Content-Length: 53" + System.lineSeparator() + - "Cache-Control: max-age=0" + System.lineSeparator() + - "sec-ch-ua: \"Google Chrome\";v=\"89\", \"Chromium\";v=\"89\", \";Not A Brand\";v=\"99\"" + System.lineSeparator() + - "sec-ch-ua-mobile: ?0" + System.lineSeparator() + - "Upgrade-Insecure-Requests: 1" + System.lineSeparator() + - "Origin: http://localhost:8080" + System.lineSeparator() + - "Content-Type: application/x-www-form-urlencoded" + System.lineSeparator() + - "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36" + System.lineSeparator() + - "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" + System.lineSeparator() + - "Sec-Fetch-Site: same-origin" + System.lineSeparator() + - "Sec-Fetch-Mode: navigate" + System.lineSeparator() + - "Sec-Fetch-User: ?1" + System.lineSeparator() + - "Sec-Fetch-Dest: document" + System.lineSeparator() + - "Referer: http://localhost:8080/user/form.html" + System.lineSeparator() + - "Accept-Encoding: gzip, deflate, br" + System.lineSeparator() + - "Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7" + System.lineSeparator() + - "Cookie: _ga=GA1.1.773336800.1611186274; Idea-dc7ca9b6=ac856d6e-e872-46ac-b153-000bdad105ec" + System.lineSeparator() + - "" + System.lineSeparator() + - "userId=wrongId&password=test&name=test&email=test%40test", + "Host: localhost:8080" + System.lineSeparator() + + "Connection: keep-alive" + System.lineSeparator() + + "Content-Length: 53" + System.lineSeparator() + + "Cache-Control: max-age=0" + System.lineSeparator() + + "sec-ch-ua: \"Google Chrome\";v=\"89\", \"Chromium\";v=\"89\", \";Not A Brand\";v=\"99\"" + System.lineSeparator() + + "sec-ch-ua-mobile: ?0" + System.lineSeparator() + + "Upgrade-Insecure-Requests: 1" + System.lineSeparator() + + "Origin: http://localhost:8080" + System.lineSeparator() + + "Content-Type: application/x-www-form-urlencoded" + System.lineSeparator() + + "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36" + System.lineSeparator() + + "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" + System.lineSeparator() + + "Sec-Fetch-Site: same-origin" + System.lineSeparator() + + "Sec-Fetch-Mode: navigate" + System.lineSeparator() + + "Sec-Fetch-User: ?1" + System.lineSeparator() + + "Sec-Fetch-Dest: document" + System.lineSeparator() + + "Referer: http://localhost:8080/user/form.html" + System.lineSeparator() + + "Accept-Encoding: gzip, deflate, br" + System.lineSeparator() + + "Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7" + System.lineSeparator() + + "Cookie: _ga=GA1.1.773336800.1611186274; Idea-dc7ca9b6=ac856d6e-e872-46ac-b153-000bdad105ec" + System.lineSeparator() + + "" + System.lineSeparator() + + "userId=wrongId&password=test&name=test&email=test%40test", "HTTP/1.1 302 Found" + System.lineSeparator() + - "Location: /user/login_failed.html" + System.lineSeparator() + - "Set-Cookie: logined=false; Path=/" + System.lineSeparator() + "Location: /user/login_failed.html" + System.lineSeparator() + + "Set-Cookie: logined=false; Path=/" + System.lineSeparator() ), Arguments.arguments( "로그인 실패 - 잘못된 비밀번호", User.builder() - .setUserId("test") - .setPassword("test") - .setName("test") - .setEmail("test@test") - .build(), + .setUserId("test") + .setPassword("test") + .setName("test") + .setEmail("test@test") + .build(), "POST /user/login HTTP/1.1" + System.lineSeparator() + - "Host: localhost:8080" + System.lineSeparator() + - "Connection: keep-alive" + System.lineSeparator() + - "Content-Length: 53" + System.lineSeparator() + - "Cache-Control: max-age=0" + System.lineSeparator() + - "sec-ch-ua: \"Google Chrome\";v=\"89\", \"Chromium\";v=\"89\", \";Not A Brand\";v=\"99\"" + System.lineSeparator() + - "sec-ch-ua-mobile: ?0" + System.lineSeparator() + - "Upgrade-Insecure-Requests: 1" + System.lineSeparator() + - "Origin: http://localhost:8080" + System.lineSeparator() + - "Content-Type: application/x-www-form-urlencoded" + System.lineSeparator() + - "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36" + System.lineSeparator() + - "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" + System.lineSeparator() + - "Sec-Fetch-Site: same-origin" + System.lineSeparator() + - "Sec-Fetch-Mode: navigate" + System.lineSeparator() + - "Sec-Fetch-User: ?1" + System.lineSeparator() + - "Sec-Fetch-Dest: document" + System.lineSeparator() + - "Referer: http://localhost:8080/user/form.html" + System.lineSeparator() + - "Accept-Encoding: gzip, deflate, br" + System.lineSeparator() + - "Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7" + System.lineSeparator() + - "Cookie: _ga=GA1.1.773336800.1611186274; Idea-dc7ca9b6=ac856d6e-e872-46ac-b153-000bdad105ec" + System.lineSeparator() + - "" + System.lineSeparator() + - "userId=test&password=wrongPw&name=test&email=test%40test", + "Host: localhost:8080" + System.lineSeparator() + + "Connection: keep-alive" + System.lineSeparator() + + "Content-Length: 53" + System.lineSeparator() + + "Cache-Control: max-age=0" + System.lineSeparator() + + "sec-ch-ua: \"Google Chrome\";v=\"89\", \"Chromium\";v=\"89\", \";Not A Brand\";v=\"99\"" + System.lineSeparator() + + "sec-ch-ua-mobile: ?0" + System.lineSeparator() + + "Upgrade-Insecure-Requests: 1" + System.lineSeparator() + + "Origin: http://localhost:8080" + System.lineSeparator() + + "Content-Type: application/x-www-form-urlencoded" + System.lineSeparator() + + "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36" + System.lineSeparator() + + "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" + System.lineSeparator() + + "Sec-Fetch-Site: same-origin" + System.lineSeparator() + + "Sec-Fetch-Mode: navigate" + System.lineSeparator() + + "Sec-Fetch-User: ?1" + System.lineSeparator() + + "Sec-Fetch-Dest: document" + System.lineSeparator() + + "Referer: http://localhost:8080/user/form.html" + System.lineSeparator() + + "Accept-Encoding: gzip, deflate, br" + System.lineSeparator() + + "Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7" + System.lineSeparator() + + "Cookie: _ga=GA1.1.773336800.1611186274; Idea-dc7ca9b6=ac856d6e-e872-46ac-b153-000bdad105ec" + System.lineSeparator() + + "" + System.lineSeparator() + + "userId=test&password=wrongPw&name=test&email=test%40test", "HTTP/1.1 302 Found" + System.lineSeparator() + - "Location: /user/login_failed.html" + System.lineSeparator() + - "Set-Cookie: logined=false; Path=/" + System.lineSeparator() + "Location: /user/login_failed.html" + System.lineSeparator() + + "Set-Cookie: logined=false; Path=/" + System.lineSeparator() ) ); } @@ -387,11 +387,11 @@ static Stream loginHandler() { Arguments.arguments( "로그인 성공", User.builder() - .setUserId("test") - .setPassword("test") - .setName("test") - .setEmail("test@test") - .build(), + .setUserId("test") + .setPassword("test") + .setName("test") + .setEmail("test@test") + .build(), new HashMap() {{ put("userId", "test"); put("password", "test"); @@ -399,16 +399,16 @@ static Stream loginHandler() { put("email", "test@test"); }}, "HTTP/1.1 302 Found" + System.lineSeparator() + - "Location: /index.html" + System.lineSeparator() + - "Set-Cookie: logined=true; Path=/" + "Location: /index.html" + System.lineSeparator() + + "Set-Cookie: logined=true; Path=/" ), Arguments.arguments( "로그인 실패 - 잘못된 ID", User.builder() - .setUserId("test") - .setPassword("test") - .setName("test") - .setEmail("test@test") - .build(), + .setUserId("test") + .setPassword("test") + .setName("test") + .setEmail("test@test") + .build(), new HashMap() {{ put("userId", "wrongId"); put("password", "test"); @@ -416,16 +416,16 @@ static Stream loginHandler() { put("email", "test@test"); }}, "HTTP/1.1 302 Found" + System.lineSeparator() + - "Location: /user/login_failed.html" + System.lineSeparator() + - "Set-Cookie: logined=false; Path=/" + "Location: /user/login_failed.html" + System.lineSeparator() + + "Set-Cookie: logined=false; Path=/" ), Arguments.arguments( "로그인 실패 - 잘못된 비밀번호", User.builder() - .setUserId("test") - .setPassword("test") - .setName("test") - .setEmail("test@test") - .build(), + .setUserId("test") + .setPassword("test") + .setName("test") + .setEmail("test@test") + .build(), new HashMap() {{ put("userId", "test"); put("password", "wrongPassword"); @@ -433,8 +433,8 @@ static Stream loginHandler() { put("email", "test@test"); }}, "HTTP/1.1 302 Found" + System.lineSeparator() + - "Location: /user/login_failed.html" + System.lineSeparator() + - "Set-Cookie: logined=false; Path=/" + "Location: /user/login_failed.html" + System.lineSeparator() + + "Set-Cookie: logined=false; Path=/" ) ); } @@ -465,29 +465,73 @@ static Stream loginHandler() { static Stream 리스트_페이지() throws IOException { return Stream.of( Arguments.arguments( - "Cookie: logined=true가 있을 경우 리스트 페이지 접속", + "Cookie: logined=true가 있을 경우 /user/list 접속 접근", "GET /user/list HTTP/1.1" + System.lineSeparator() + - "Host: localhost:8080" + System.lineSeparator() + - "Connection: keep-alive" + System.lineSeparator() + - "Accept: */*" + System.lineSeparator() + - "Cookie: logined=true" + System.lineSeparator() + - "" + System.lineSeparator(), + "Host: localhost:8080" + System.lineSeparator() + + "Connection: keep-alive" + System.lineSeparator() + + "Accept: */*" + System.lineSeparator() + + "Cookie: logined=true" + System.lineSeparator() + + "" + System.lineSeparator(), + + "HTTP/1.1 200 OK" + System.lineSeparator() + + "Content-Type: text/html;charset=utf-8" + System.lineSeparator() + + "Content-Length: 4801" + System.lineSeparator() + + "" + System.lineSeparator() + + Files.lines(new File("./webapp/user/list.html").toPath()) + .collect(Collectors.joining(System.lineSeparator())) + + + ), Arguments.arguments( + "Cookie: logined=true가 없을 경우 /user/list 이동 접근", + + "GET /user/list HTTP/1.1" + System.lineSeparator() + + "Host: localhost:8080" + System.lineSeparator() + + "Connection: keep-alive" + System.lineSeparator() + + "Accept: */*" + System.lineSeparator() + + "" + System.lineSeparator(), "HTTP/1.1 302 Found" + System.lineSeparator() + - "Location: /user/list.html" + System.lineSeparator() + "Location: /user/login.html" + System.lineSeparator() + ), Arguments.arguments( + "Cookie: logined=true가 있을 경우 /user/list.html 접근", + "GET /user/list.html HTTP/1.1" + System.lineSeparator() + + "Host: localhost:8080" + System.lineSeparator() + + "Connection: keep-alive" + System.lineSeparator() + + "Accept: */*" + System.lineSeparator() + + "Cookie: logined=true" + System.lineSeparator() + + "" + System.lineSeparator(), + + "HTTP/1.1 200 OK" + System.lineSeparator() + + "Content-Type: text/html;charset=utf-8" + System.lineSeparator() + + "Content-Length: 4801" + System.lineSeparator() + + "" + System.lineSeparator() + + Files.lines(new File("./webapp/user/list.html").toPath()) + .collect(Collectors.joining(System.lineSeparator())) + + ), Arguments.arguments( + "Cookie: logined=true가 없을 경우 /user/list.html 접근", + + "GET /user/list.html HTTP/1.1" + System.lineSeparator() + + "Host: localhost:8080" + System.lineSeparator() + + "Connection: keep-alive" + System.lineSeparator() + + "Accept: */*" + System.lineSeparator() + + "" + System.lineSeparator(), + + "HTTP/1.1 302 Found" + System.lineSeparator() + + "Location: /user/login.html" + System.lineSeparator() ), Arguments.arguments( - "Cookie: logined=true가 없을 경우 로그인 페이지 이동", + "Cookie 없을 경우 /user/list 접근", "GET /user/list HTTP/1.1" + System.lineSeparator() + - "Host: localhost:8080" + System.lineSeparator() + - "Connection: keep-alive" + System.lineSeparator() + - "Accept: */*" + System.lineSeparator() + - "" + System.lineSeparator(), + "Host: localhost:8080" + System.lineSeparator() + + "Connection: keep-alive" + System.lineSeparator() + + "Accept: */*" + System.lineSeparator() + + "" + System.lineSeparator(), "HTTP/1.1 302 Found" + System.lineSeparator() + - "Location: /user/login.html" + System.lineSeparator() + "Location: /user/login.html" + System.lineSeparator() ) ); From 4be5efa8ae5567b77d0fd71d907047aa98669bc9 Mon Sep 17 00:00:00 2001 From: sanhee <68936@naver.com> Date: Thu, 26 Aug 2021 11:09:10 +0900 Subject: [PATCH 3/3] =?UTF-8?q?refactor:=20RequestHandler=20=EA=B5=AC?= =?UTF-8?q?=EC=A1=B0=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/webserver/RequestHandler.java | 158 +++++++++++--------- 1 file changed, 88 insertions(+), 70 deletions(-) diff --git a/src/main/java/webserver/RequestHandler.java b/src/main/java/webserver/RequestHandler.java index 6fc77e8..501849d 100644 --- a/src/main/java/webserver/RequestHandler.java +++ b/src/main/java/webserver/RequestHandler.java @@ -28,98 +28,114 @@ public RequestHandler(Socket connectionSocket) { public void run() { log.debug("New Client Connect! Connected IP : {}, Port : {}", connection.getInetAddress(), - connection.getPort()); + connection.getPort()); try (InputStream in = connection.getInputStream(); OutputStream out = connection.getOutputStream()) { - BufferedReader br = new BufferedReader(new InputStreamReader(in)); - StringJoiner requestMessages = new StringJoiner(System.lineSeparator()); + Request request = getRequest(in); // Request - String requestMessage = br.readLine(); + String responseMessage = requestController(request); - while (requestMessage != null && requestMessage.length() != 0) { - requestMessages.add(requestMessage); - requestMessage = br.readLine(); - } + Response response = Response.from(responseMessage); // Response + response.write(out); - RequestHeader requestHeader = RequestHeader.from(requestMessages.toString()); + } catch (IOException e) { + log.error(e.getMessage(), e); + } + } - int contentLength = Integer.parseInt(requestHeader.getAttributes().getOrDefault("Content-Length", "0")); - String requestBody = IOUtils.readData(br, contentLength); + private Request getRequest(InputStream in) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(in)); + StringJoiner requestMessages = new StringJoiner(System.lineSeparator()); - requestMessages.add(System.lineSeparator() + requestBody); + String requestMessage = br.readLine(); - Request request = Request.from(requestMessages.toString()); + while (requestMessage != null && requestMessage.length() != 0) { + requestMessages.add(requestMessage); + requestMessage = br.readLine(); + } - // TODO: Default Message를 설정할 수 있을 것 같다. - String responseMessage = "HTTP/1.1 404 NotFound" + System.lineSeparator() + System.lineSeparator(); + RequestHeader requestHeader = RequestHeader.from(requestMessages.toString()); - String path = request.getPath(); - String extension = request.getPathExtension(); + int contentLength = Integer.parseInt(requestHeader.getAttributes().getOrDefault("Content-Length", "0")); + String requestBody = IOUtils.readData(br, contentLength); - if (extension.equals("html")) { + requestMessages.add(System.lineSeparator() + requestBody); - Map parameters = request.getRequestMessage().getHeader().getAttributes(); - String Cookie = parameters.getOrDefault("Cookie","empty"); - - if(loginRequired(path)){ - switch (Cookie){ - case "logined=true": - responseMessage = viewResolver(path); - break; - default: - responseMessage = "HTTP/1.1 302 Found" + System.lineSeparator() + - "Location: /user/login.html"; - } - }else{ - responseMessage = viewResolver(path); - } - } + Request request = Request.from(requestMessages.toString()); + return request; + } + + private String requestController(Request request) throws IOException { + + String responseMessage = ""; + String path = request.getPath(); + String extension = request.getPathExtension(); + + switch (path) { + case "/user/create": { + Map parameters = request.getRequestMessage().getParameters(); + + User newUser = User.builder() + .setUserId(parameters.get("userId")) + .setPassword(parameters.get("password")) + .setName(parameters.get("name")) + .setEmail(parameters.get("email")) + .build(); - switch (path) { - case "/user/create": { - Map parameters = request.getRequestMessage().getParameters(); + DataBase.addUser(newUser); - User newUser = User.builder() - .setUserId(parameters.get("userId")) - .setPassword(parameters.get("password")) - .setName(parameters.get("name")) - .setEmail(parameters.get("email")) - .build(); + responseMessage = "HTTP/1.1 302 Found" + System.lineSeparator() + + "Location: /index.html"; + break; + } + case "/user/login": { + responseMessage = loginHandler(request.getRequestMessage().getParameters()); + + break; + } + case "/user/list": { + Map parameters = request.getRequestMessage().getHeader().getAttributes(); - DataBase.addUser(newUser); + String Cookie = parameters.getOrDefault("Cookie", "empty"); + if (Cookie.equals("logined=true")) { + responseMessage = findHtmlFrom(path + ".html"); + } else { responseMessage = "HTTP/1.1 302 Found" + System.lineSeparator() + - "Location: /index.html"; - break; + "Location: /user/login.html"; } - case "/user/login": { - responseMessage = loginHandler(request.getRequestMessage().getParameters()); + break; + } + default: { + responseMessage = htmlController(request, responseMessage, path, extension); + } + } + return responseMessage; + } - break; - } - case "/user/list": { - Map parameters = request.getRequestMessage().getHeader().getAttributes(); + private String htmlController(Request request, String responseMessage, String path, String extension) throws IOException { + if (extension.equals("html")) { - String Cookie = parameters.getOrDefault("Cookie","empty"); + Map parameters = request.getRequestMessage().getHeader().getAttributes(); + String Cookie = parameters.getOrDefault("Cookie", "empty"); - if (Cookie.equals("logined=true")) { - responseMessage = viewResolver(path+".html"); - } else { + if (loginRequired(path)) { + switch (Cookie) { + case "logined=true": + responseMessage = findHtmlFrom(path); + break; + default: responseMessage = "HTTP/1.1 302 Found" + System.lineSeparator() + - "Location: /user/login.html"; - } + "Location: /user/login.html"; } + } else { + responseMessage = findHtmlFrom(path); } - - Response response = Response.from(responseMessage); - response.write(out); - - } catch (IOException e) { - log.error(e.getMessage(), e); } + return responseMessage; } - private String viewResolver(String path) throws IOException { + private String findHtmlFrom(String path) throws IOException { File htmlFile = new File("./webapp" + path); String responseMessage = ""; @@ -131,6 +147,8 @@ private String viewResolver(String path) throws IOException { "Content-Length: " + body.length + System.lineSeparator() + System.lineSeparator() + new String(body); + } else { + responseMessage = "HTTP/1.1 404 NotFound" + System.lineSeparator() + System.lineSeparator(); } return responseMessage; @@ -146,7 +164,7 @@ public String loginHandler(Map parameters) { try { findUser = DataBase.findUserById(parameters.get("userId")) - .orElseThrow(UserNotFoundException::new); + .orElseThrow(UserNotFoundException::new); } catch (UserNotFoundException userNotFoundException) { throw new LoginFailedException(); } @@ -158,12 +176,12 @@ public String loginHandler(Map parameters) { } return "HTTP/1.1 302 Found" + System.lineSeparator() + - "Location: /index.html" + System.lineSeparator() + - "Set-Cookie: logined=true; Path=/"; + "Location: /index.html" + System.lineSeparator() + + "Set-Cookie: logined=true; Path=/"; } catch (LoginFailedException loginFailedException) { return "HTTP/1.1 302 Found" + System.lineSeparator() + - "Location: /user/login_failed.html" + System.lineSeparator() + - "Set-Cookie: logined=false; Path=/"; + "Location: /user/login_failed.html" + System.lineSeparator() + + "Set-Cookie: logined=false; Path=/"; } } }