Photo application now working fully.
[photos] / src / main / java / org / wamblee / photos / wicket / BasePage.java
index d4bdc115b3c0a57264c773f0b94c6009ce7f7d16..c7f8e1f0013b1a702621b8406c5d3c6b22645bde 100644 (file)
  */
 package org.wamblee.photos.wicket;
 
+import java.security.Principal;
+import javax.inject.Inject;
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.wicket.RedirectToUrlException;
 import org.apache.wicket.markup.html.CSSPackageResource;
+import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.link.Link;
 import org.apache.wicket.markup.html.panel.FeedbackPanel;
 import org.apache.wicket.model.IModel;
+import org.wamblee.security.authentication.UserAdministration;
 import org.wamblee.wicket.behavior.TitleAttributeTooltipBehavior;
 import org.wamblee.wicket.css.ResetCssBehavior;
 import org.wamblee.wicket.page.ExpireBehavior;
@@ -28,6 +35,12 @@ import org.wamblee.wicket.page.WebApplicationBasePage;
 
 public class BasePage extends WebApplicationBasePage {
 
+    @Inject
+    private HttpServletRequest request;
+
+    @Inject
+    private transient UserAdministration userAdmin;
+
     private boolean isExpired = false;
 
     public BasePage() {
@@ -36,10 +49,20 @@ public class BasePage extends WebApplicationBasePage {
 
     public BasePage(IModel aModel) {
         super(aModel);
+
+        Principal userPrincipal = request.getUserPrincipal();
+        if (userPrincipal == null) {
+            throw redirectToLoginPage();
+        }
+        String username = userPrincipal.getName();
+        if (isAdminPage() && !isAdministrator(username)) {
+            error("Unauthorized URL accessed");
+            throw redirectToLoginPage();
+        }
+
         add(new ResetCssBehavior());
         add(new TitleAttributeTooltipBehavior());
-        add(CSSPackageResource.getHeaderContribution(BasePage.class,
-            "photos.css"));
+        add(CSSPackageResource.getHeaderContribution(BasePage.class, "photos.css"));
         disableCaching();
 
         add(new FeedbackPanel("feedback"));
@@ -56,8 +79,27 @@ public class BasePage extends WebApplicationBasePage {
             @Override
             public void onClick() {
                 getRequestCycle().getSession().invalidate();
+                throw redirectToLoginPage();
             }
         });
+
+        WebMarkupContainer adminAccess = new WebMarkupContainer("adminAccess");
+        if (!isAdministrator(username)) {
+            adminAccess.setVisible(false);
+        }
+        add(adminAccess);
+    }
+
+    protected boolean isAdminPage() {
+        return false;
+    }
+
+    protected boolean isAdministrator(String aUsername) {
+        return userAdmin.isInGroup(aUsername, "administrators");
+    }
+
+    private RedirectToUrlException redirectToLoginPage() {
+        return new RedirectToUrlException("login.jsp");
     }
 
     public void setExpired(boolean aExpired) {