X-Git-Url: https://code.wpia.club/?a=blobdiff_plain;f=src%2Forg%2Fcacert%2Fgigi%2Fpages%2FPage.java;h=0bd02f789f115022277cd02391f41e676970b1c3;hb=6100ce303e0cf82bdbd699ec7c3672dcbe8fae7c;hp=9a5c178a8d0a576422305094b7fe4383b5361e09;hpb=872e9a7ac8a8a143fe63e178e349663fb524d9d7;p=gigi.git
diff --git a/src/org/cacert/gigi/pages/Page.java b/src/org/cacert/gigi/pages/Page.java
index 9a5c178a..0bd02f78 100644
--- a/src/org/cacert/gigi/pages/Page.java
+++ b/src/org/cacert/gigi/pages/Page.java
@@ -2,110 +2,144 @@ package org.cacert.gigi.pages;
import java.io.IOException;
import java.net.URL;
+import java.util.Enumeration;
+import java.util.Locale;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
-import org.cacert.gigi.Language;
+import org.cacert.gigi.PermissionCheckable;
+import org.cacert.gigi.dbObjects.User;
+import org.cacert.gigi.localisation.Language;
import org.cacert.gigi.output.template.Template;
/**
* This class encapsulates a sub page of Gigi. A template residing nearby this
* class with name <className>.templ will be loaded automatically.
*/
-public abstract class Page {
- private String title;
- private Template defaultTemplate;
-
- public Page(String title) {
- this.title = title;
- URL resource = getClass().getResource(getClass().getSimpleName() + ".templ");
- if (resource != null) {
- defaultTemplate = new Template(resource);
- }
- }
-
- /**
- * Retrieves the default template (<className>.templ) which has
- * already been loaded.
- *
- * @return the default template.
- */
- public Template getDefaultTemplate() {
- return defaultTemplate;
- }
-
- /**
- * This method can be overridden to execute code and do stuff before the
- * default template is applied.
- *
- * @param req
- * the request to handle.
- * @param resp
- * the response to write to
- * @return true, if the request is consumed and the default template should
- * not be applied.
- * @throws IOException
- * if output goes wrong.
- */
- public boolean beforeTemplate(HttpServletRequest req, HttpServletResponse resp) throws IOException {
- return false;
- }
-
- /**
- * This method is called to generate the content inside the default
- * template.
- *
- * @param req
- * the request to handle.
- * @param resp
- * the response to write to
- * @throws IOException
- * if output goes wrong.
- */
- public abstract void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException;
-
- /**
- * Same as {@link #doGet(HttpServletRequest, HttpServletResponse)} but for
- * POST requests. By default they are redirected to
- * {@link #doGet(HttpServletRequest, HttpServletResponse)};
- *
- * @param req
- * the request to handle.
- * @param resp
- * the response to write to
- * @throws IOException
- * if output goes wrong.
- */
- public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
- doGet(req, resp);
- }
-
- /**
- * Returns true, if this page requires login. Default is true
- *
- * @return if the page needs login.
- */
- public boolean needsLogin() {
- return true;
- }
-
- public String getTitle() {
- return title;
- }
-
- public void setTitle(String title) {
- this.title = title;
- }
-
- public static Language getLanguage(ServletRequest req) {
- return Language.getInstance("de");
- }
-
- public static String translate(ServletRequest req, String string) {
- Language l = getLanguage(req);
- return l.getTranslation(string);
- }
+public abstract class Page implements PermissionCheckable {
+
+ private String title;
+
+ private Template defaultTemplate;
+
+ public Page(String title) {
+ this.title = title;
+ URL resource = getClass().getResource(getClass().getSimpleName() + ".templ");
+ if (resource != null) {
+ defaultTemplate = new Template(resource);
+ }
+ }
+
+ /**
+ * Retrieves the default template (<className>.templ) which has
+ * already been loaded.
+ *
+ * @return the default template.
+ */
+ public Template getDefaultTemplate() {
+ return defaultTemplate;
+ }
+
+ /**
+ * This method can be overridden to execute code and do stuff before the
+ * default template is applied.
+ *
+ * @param req
+ * the request to handle.
+ * @param resp
+ * the response to write to
+ * @return true, if the request is consumed and the default template should
+ * not be applied.
+ * @throws IOException
+ * if output goes wrong.
+ */
+ public boolean beforeTemplate(HttpServletRequest req, HttpServletResponse resp) throws IOException {
+ return false;
+ }
+
+ /**
+ * This method is called to generate the content inside the default
+ * template.
+ *
+ * @param req
+ * the request to handle.
+ * @param resp
+ * the response to write to
+ * @throws IOException
+ * if output goes wrong.
+ */
+ public abstract void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException;
+
+ /**
+ * Same as {@link #doGet(HttpServletRequest, HttpServletResponse)} but for
+ * POST requests. By default they are redirected to
+ * {@link #doGet(HttpServletRequest, HttpServletResponse)};
+ *
+ * @param req
+ * the request to handle.
+ * @param resp
+ * the response to write to
+ * @throws IOException
+ * if output goes wrong.
+ */
+ public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
+ doGet(req, resp);
+ }
+
+ /**
+ * Returns true, if this page requires login. Default is true
+ *
+ * @return if the page needs login.
+ */
+ public boolean needsLogin() {
+ return true;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public static Language getLanguage(ServletRequest req) {
+ HttpSession session = ((HttpServletRequest) req).getSession();
+ Locale sessval = (Locale) session.getAttribute(Language.SESSION_ATTRIB_NAME);
+ if (sessval != null) {
+ Language l = Language.getInstance(sessval);
+ if (l != null) {
+ return l;
+ }
+ }
+ Enumeration langs = req.getLocales();
+ while (langs.hasMoreElements()) {
+ Locale c = langs.nextElement();
+ Language l = Language.getInstance(c);
+ if (l != null) {
+ session.setAttribute(Language.SESSION_ATTRIB_NAME, l.getLocale());
+ return l;
+ }
+ }
+ session.setAttribute(Language.SESSION_ATTRIB_NAME, Locale.ENGLISH);
+ return Language.getInstance(Locale.ENGLISH);
+ }
+
+ public static String translate(ServletRequest req, String string) {
+ Language l = getLanguage(req);
+ return l.getTranslation(string);
+ }
+
+ public static User getUser(HttpServletRequest req) {
+ return LoginPage.getUser(req);
+ }
+
+ @Override
+ public boolean isPermitted(User u) {
+ return !needsLogin() || u != null;
+ }
}