X-Git-Url: https://code.wpia.club/?a=blobdiff_plain;f=src%2Forg%2Fcacert%2Fgigi%2FGigi.java;h=c5ee8cd3e6f9b46a2acf9f14e10f9528af156d85;hb=4d9b0e8bdf122324cec9f3dd387c02d14c30877e;hp=6af640ead48ddf2b83a8a2905f8415ff46c6d85d;hpb=ec24cf6925bb3729a644580ad4a9375d05883c62;p=gigi.git diff --git a/src/org/cacert/gigi/Gigi.java b/src/org/cacert/gigi/Gigi.java index 6af640ea..c5ee8cd3 100644 --- a/src/org/cacert/gigi/Gigi.java +++ b/src/org/cacert/gigi/Gigi.java @@ -21,7 +21,11 @@ import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.cacert.gigi.database.DatabaseConnection; +import org.cacert.gigi.dbObjects.CACertificate; +import org.cacert.gigi.dbObjects.CertificateOwner; +import org.cacert.gigi.dbObjects.CertificateProfile; import org.cacert.gigi.dbObjects.DomainPingConfiguration; +import org.cacert.gigi.dbObjects.Organisation; import org.cacert.gigi.dbObjects.User; import org.cacert.gigi.localisation.Language; import org.cacert.gigi.output.Menu; @@ -30,6 +34,7 @@ import org.cacert.gigi.output.SimpleMenuItem; import org.cacert.gigi.output.template.Form.CSRFException; import org.cacert.gigi.output.template.Outputable; import org.cacert.gigi.output.template.Template; +import org.cacert.gigi.pages.HandlesMixedRequest; import org.cacert.gigi.pages.LoginPage; import org.cacert.gigi.pages.LogoutPage; import org.cacert.gigi.pages.MainPage; @@ -58,6 +63,7 @@ import org.cacert.gigi.pages.wot.AssurePage; import org.cacert.gigi.pages.wot.MyPoints; import org.cacert.gigi.pages.wot.RequestTTPPage; import org.cacert.gigi.ping.PingerDaemon; +import org.cacert.gigi.util.AuthorizationContext; import org.cacert.gigi.util.ServerConstants; public class Gigi extends HttpServlet { @@ -104,8 +110,8 @@ public class Gigi extends HttpServlet { getMenu("CAcert.org").addItem(new SimpleMenuItem("https://" + ServerConstants.getSecureHostNamePort() + "/login", "Certificate Login") { @Override - public boolean isPermitted(User u) { - return u == null; + public boolean isPermitted(AuthorizationContext ac) { + return ac == null; } }); putPage("/", new MainPage("CAcert - Home"), null); @@ -126,8 +132,8 @@ public class Gigi extends HttpServlet { putPage(TTPAdminPage.PATH + "/*", new TTPAdminPage(), "Admin"); putPage(CreateOrgPage.DEFAULT_PATH, new CreateOrgPage(), "Organisation Admin"); putPage(ViewOrgPage.DEFAULT_PATH + "/*", new ViewOrgPage(), "Organisation Admin"); - putPage(FindDomainPage.PATH, new FindDomainPage("Find Domain"), "System Admin"); putPage(FindUserPage.PATH, new FindUserPage("Find User"), "System Admin"); + putPage(FindDomainPage.PATH, new FindDomainPage("Find Domain"), "System Admin"); putPage(SupportUserDetailsPage.PATH + "*", new SupportUserDetailsPage("Support: User Details"), null); if (testing) { try { @@ -184,7 +190,7 @@ public class Gigi extends HttpServlet { public static final String CERT_ISSUER = "org.cacert.gigi.issuer"; - public static final String USER = "user"; + public static final String AUTH_CONTEXT = "auth"; public static final String LOGIN_METHOD = "org.cacert.gigi.loginMethod"; @@ -226,6 +232,10 @@ public class Gigi extends HttpServlet { super.init(); return; } + // ensure those static initializers are finished + CACertificate.getById(1); + CertificateProfile.getById(1); + MenuBuilder mb = new MenuBuilder(); rootMenu = mb.generateMenu(); pages = mb.getPages(); @@ -247,13 +257,18 @@ public class Gigi extends HttpServlet { return page; } int idx = pathInfo.lastIndexOf('/'); - pathInfo = pathInfo.substring(0, idx); - page = pages.get(pathInfo + "/*"); + page = pages.get(pathInfo.substring(0, idx) + "/*"); if (page != null) { return page; } - return null; + + int lIdx = pathInfo.lastIndexOf('/', idx); + if (lIdx == -1) { + return null; + } + page = pages.get(pathInfo.substring(0, lIdx) + "/" + pathInfo.substring(idx)); + return page; } @@ -310,8 +325,8 @@ public class Gigi extends HttpServlet { resp.sendRedirect("https://" + ServerConstants.getWwwHostNamePortSecure() + req.getPathInfo()); return; } - User currentPageUser = LoginPage.getUser(req); - if ( !p.isPermitted(currentPageUser)) { + AuthorizationContext currentAuthContext = LoginPage.getAuthorizationContext(req); + if ( !p.isPermitted(currentAuthContext)) { if (hs.getAttribute("loggedin") == null) { String request = req.getPathInfo(); request = request.split("\\?")[0]; @@ -332,7 +347,7 @@ public class Gigi extends HttpServlet { public void output(PrintWriter out, Language l, Map vars) { try { if (req.getMethod().equals("POST")) { - if (req.getQueryString() != null) { + if (req.getQueryString() != null && !(p instanceof HandlesMixedRequest)) { return; } p.doPost(req, resp); @@ -353,14 +368,20 @@ public class Gigi extends HttpServlet { }; Language lang = Page.getLanguage(req); - vars.put(Menu.USER_VALUE, currentPageUser); + vars.put(Menu.AUTH_VALUE, currentAuthContext); vars.put("menu", rootMenu); vars.put("title", lang.getTranslation(p.getTitle())); vars.put("static", getStaticTemplateVar(isSecure)); vars.put("year", Calendar.getInstance().get(Calendar.YEAR)); vars.put("content", content); - if (currentPageUser != null) { - vars.put("loggedInAs", currentPageUser.getName().toString()); + if (currentAuthContext != null) { + CertificateOwner target = currentAuthContext.getTarget(); + User currentPageUser = LoginPage.getUser(req); + if (target != currentPageUser) { + vars.put("loggedInAs", ((Organisation) target).getName() + " (" + currentPageUser.getName().toString() + ")"); + } else { + vars.put("loggedInAs", currentPageUser.getName().toString()); + } vars.put("loginMethod", lang.getTranslation((String) req.getSession().getAttribute(LOGIN_METHOD))); } resp.setContentType("text/html; charset=utf-8");