]> WPIA git - gigi.git/blob - src/org/cacert/gigi/Gigi.java
ADD: Basic page abstraction
[gigi.git] / src / org / cacert / gigi / Gigi.java
1 package org.cacert.gigi;
2
3 import java.io.IOException;
4 import java.security.cert.X509Certificate;
5 import java.util.HashMap;
6
7 import javax.servlet.ServletException;
8 import javax.servlet.http.HttpServlet;
9 import javax.servlet.http.HttpServletRequest;
10 import javax.servlet.http.HttpServletResponse;
11 import javax.servlet.http.HttpSession;
12
13 public class Gigi extends HttpServlet {
14         private HashMap<String, Page> pages = new HashMap<String, Page>();
15         @Override
16         public void init() throws ServletException {
17                 pages.put("login", new LoginPage());
18                 super.init();
19         }
20
21         @Override
22         protected void service(HttpServletRequest req, HttpServletResponse resp)
23                         throws ServletException, IOException {
24                 X509Certificate[] cert = (X509Certificate[]) req
25                                 .getAttribute("javax.servlet.request.X509Certificate");
26                 HttpSession hs = req.getSession(false);
27                 if (hs == null || !((Boolean) hs.getAttribute("loggedin"))) {
28                         if (cert != null) {
29                                 tryAuthWithCertificate(req, cert[0]);
30                                 hs = req.getSession(false);
31                         }
32                 }
33                 if (req.getMethod().equals("POST") && req.getPathInfo() != null
34                                 && req.getPathInfo().equals("/login")) {
35                         authWithUnpw(req);
36                         resp.sendRedirect("/");
37                         return;
38                 }
39                 if (req.getPathInfo() != null && req.getPathInfo().equals("/logout")) {
40                         if (hs != null) {
41                                 hs.setAttribute("loggedin", false);
42                                 hs.invalidate();
43                         }
44                         resp.sendRedirect("/");
45                         return;
46                 }
47
48                 if (hs == null || !((Boolean) hs.getAttribute("loggedin"))) {
49                         resp.getWriter().println("Access denied. Sending login form.");
50                         pages.get("login").doGet(req, resp);
51                         return;
52                 }
53                 resp.getWriter().println("Access granted.");
54
55         }
56         private void authWithUnpw(HttpServletRequest req) {
57                 String un = req.getParameter("username");
58                 String pw = req.getParameter("password");
59                 // TODO dummy password check if (un.equals(pw)) {
60                 HttpSession hs = req.getSession();
61                 hs.setAttribute("loggedin", true);
62         }
63         private void tryAuthWithCertificate(HttpServletRequest req,
64                         X509Certificate x509Certificate) {
65                 // TODO ckeck if certificate is valid
66                 HttpSession hs = req.getSession();
67                 hs.setAttribute("loggedin", true);
68         }
69 }