Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.petukhovsky.wat.webserver;
- import com.petukhovsky.wat.Tools;
- import com.petukhovsky.wat.server.Account;
- import com.petukhovsky.wat.server.Auth;
- import org.eclipse.jetty.server.Request;
- import org.eclipse.jetty.server.handler.AbstractHandler;
- import javax.servlet.ServletException;
- import javax.servlet.http.Cookie;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import java.io.IOException;
- import java.util.*;
- /**
- * Created by Arthur on 3/30/2015.
- */
- public class WebHandler extends AbstractHandler {
- @Override
- public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
- response.setContentType("text/html;charset=utf-8");
- response.setStatus(HttpServletResponse.SC_OK);
- baseRequest.setHandled(true);
- switch (target) {
- case "/login":
- CookieAuth session = CookieAuth.getCookieAuth(baseRequest);
- if (session != null) {
- response.sendRedirect("/main");
- break;
- }
- String username = baseRequest.getParameter("user");
- String password = baseRequest.getParameter("pass");
- if (username == null || password == null) {
- response.getWriter().println(Tools.readFile("www/loginpage.html"));
- break;
- }
- Account account = Auth.auth(username, password);
- if (account == null) {
- response.getWriter().println("Wrong password or username");
- break;
- }
- new CookieAuth(account, response);
- response.sendRedirect("/main");
- break;
- case "/logout":
- CookieAuth.clearAuth(baseRequest);
- response.sendRedirect("/login");
- break;
- default:
- session = CookieAuth.getCookieAuth(baseRequest);
- if (session == null) {
- response.sendRedirect("/login");
- break;
- }
- account = session.getAccount();
- response.getWriter().println("<h1>Hello World!</h1><br>You are " + account.getFormattedUsername());
- }
- }
- }
- class CookieAuth{
- private static char[] symbols = new char[36];
- static{
- int k = 0;
- for (char c = 'a'; c <= 'z'; c++) symbols[k++] = c;
- for (char c = '0'; c <= '9'; c++) symbols[k++] = c;
- }
- private static Random random = new Random();
- private static HashMap<String, CookieAuth> users = new HashMap<>();
- private static String getRandomString() {
- StringBuilder sb = new StringBuilder();
- for (int i = 0; i < 16; i++) sb.append(symbols[random.nextInt(symbols.length)]);
- return sb.toString();
- }
- private String q;
- private String w;
- private String e;
- private String r;
- private Account account;
- CookieAuth(Account account, HttpServletResponse response) {
- q = getRandomString();
- w = getRandomString();
- e = getRandomString();
- r = getRandomString();
- this.account = account;
- users.put(q, this);
- response.addCookie(createCookie("q", q));
- response.addCookie(createCookie("w", w));
- response.addCookie(createCookie("e", e));
- response.addCookie(createCookie("r", r));
- }
- private static Cookie createCookie (String key, String value) {
- Cookie c = new Cookie(key, value);
- c.setMaxAge(2678400);
- return c;
- }
- public static CookieAuth getCookieAuth(Request baseRequest) {
- String q, w, e, r;
- q = w = e = r = null;
- if (baseRequest.getCookies() != null)
- for (Cookie c : baseRequest.getCookies()) {
- switch (c.getName()) {
- case "q":
- q = c.getValue();
- break;
- case "w":
- w = c.getValue();
- break;
- case "e":
- e = c.getValue();
- break;
- case "r":
- r = c.getValue();
- break;
- }
- }
- if (q == null || w == null || e == null || r == null) return null;
- CookieAuth cookieAuth = users.get(q);
- if (cookieAuth != null && cookieAuth.check(q, w, e, r)) return cookieAuth;
- else return null;
- }
- private boolean check(String q, String w, String e, String r) {
- return this.q.equals(q) && this.w.equals(w) && this.e.equals(e) && this.r.equals(r);
- }
- public Account getAccount() {
- return account;
- }
- public static void clearAuth(Request baseRequest) {
- String q, w, e, r;
- q = w = e = r = null;
- if (baseRequest.getCookies() != null)
- for (Cookie c : baseRequest.getCookies()) {
- switch (c.getName()) {
- case "q":
- q = c.getValue();
- break;
- case "w":
- w = c.getValue();
- break;
- case "e":
- e = c.getValue();
- break;
- case "r":
- r = c.getValue();
- break;
- }
- }
- if (q == null || w == null || e == null || r == null) return;
- CookieAuth cookieAuth = users.get(q);
- if (cookieAuth != null && cookieAuth.check(q, w, e, r)) users.remove(q);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement