]> WPIA git - gigi.git/blob - src/org/cacert/gigi/pages/Page.java
Merge remote-tracking branch 'origin/libs/scrypt/local'
[gigi.git] / src / org / cacert / gigi / pages / Page.java
1 package org.cacert.gigi.pages;
2
3 import java.io.IOException;
4 import java.net.URL;
5 import java.util.Enumeration;
6 import java.util.Locale;
7
8 import javax.servlet.ServletRequest;
9 import javax.servlet.http.HttpServletRequest;
10 import javax.servlet.http.HttpServletResponse;
11 import javax.servlet.http.HttpSession;
12
13 import org.cacert.gigi.PermissionCheckable;
14 import org.cacert.gigi.dbObjects.User;
15 import org.cacert.gigi.localisation.Language;
16 import org.cacert.gigi.output.template.Template;
17
18 /**
19  * This class encapsulates a sub page of Gigi. A template residing nearby this
20  * class with name <className>.templ will be loaded automatically.
21  */
22 public abstract class Page implements PermissionCheckable {
23
24     private String title;
25
26     private Template defaultTemplate;
27
28     public Page(String title) {
29         this.title = title;
30         URL resource = getClass().getResource(getClass().getSimpleName() + ".templ");
31         if (resource != null) {
32             defaultTemplate = new Template(resource);
33         }
34     }
35
36     /**
37      * Retrieves the default template (<className>.templ) which has
38      * already been loaded.
39      * 
40      * @return the default template.
41      */
42     public Template getDefaultTemplate() {
43         return defaultTemplate;
44     }
45
46     /**
47      * This method can be overridden to execute code and do stuff before the
48      * default template is applied.
49      * 
50      * @param req
51      *            the request to handle.
52      * @param resp
53      *            the response to write to
54      * @return true, if the request is consumed and the default template should
55      *         not be applied.
56      * @throws IOException
57      *             if output goes wrong.
58      */
59     public boolean beforeTemplate(HttpServletRequest req, HttpServletResponse resp) throws IOException {
60         return false;
61     }
62
63     /**
64      * This method is called to generate the content inside the default
65      * template.
66      * 
67      * @param req
68      *            the request to handle.
69      * @param resp
70      *            the response to write to
71      * @throws IOException
72      *             if output goes wrong.
73      */
74     public abstract void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException;
75
76     /**
77      * Same as {@link #doGet(HttpServletRequest, HttpServletResponse)} but for
78      * POST requests. By default they are redirected to
79      * {@link #doGet(HttpServletRequest, HttpServletResponse)};
80      * 
81      * @param req
82      *            the request to handle.
83      * @param resp
84      *            the response to write to
85      * @throws IOException
86      *             if output goes wrong.
87      */
88     public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
89         doGet(req, resp);
90     }
91
92     /**
93      * Returns true, if this page requires login. Default is <code>true</code>
94      * 
95      * @return if the page needs login.
96      */
97     public boolean needsLogin() {
98         return true;
99     }
100
101     public String getTitle() {
102         return title;
103     }
104
105     public static Language getLanguage(ServletRequest req) {
106         HttpSession session = ((HttpServletRequest) req).getSession();
107         synchronized (session) {
108
109             Locale sessval = (Locale) session.getAttribute(Language.SESSION_ATTRIB_NAME);
110             if (sessval != null) {
111                 Language l = Language.getInstance(sessval);
112                 if (l != null) {
113                     return l;
114                 }
115             }
116             Enumeration<Locale> langs = req.getLocales();
117             while (langs.hasMoreElements()) {
118                 Locale c = langs.nextElement();
119                 Language l = Language.getInstance(c);
120                 if (l != null) {
121                     session.setAttribute(Language.SESSION_ATTRIB_NAME, l.getLocale());
122                     return l;
123                 }
124             }
125             session.setAttribute(Language.SESSION_ATTRIB_NAME, Locale.ENGLISH);
126             return Language.getInstance(Locale.ENGLISH);
127         }
128     }
129
130     public static String translate(ServletRequest req, String string) {
131         Language l = getLanguage(req);
132         return l.getTranslation(string);
133     }
134
135     public static User getUser(HttpServletRequest req) {
136         return LoginPage.getUser(req);
137     }
138
139     @Override
140     public boolean isPermitted(User u) {
141         return !needsLogin() || u != null;
142     }
143
144 }