From 252edbe863d32fb1d9acf43a2924cd73bb3fb847 Mon Sep 17 00:00:00 2001 From: rjy7 Date: Tue, 16 Nov 2010 14:44:01 +0000 Subject: [PATCH] Use login widget on login page. --- webapp/config/web.xml | 11 +++ .../vitro/webapp/controller/Controllers.java | 2 +- .../authenticate/LoginRedirector.java | 5 +- .../webapp/controller/edit/Authenticate.java | 10 --- .../freemarker/EmptyController.java | 36 +++++++++ .../freemarker/FreemarkerHttpServlet.java | 5 +- .../freemarker/SiteAdminController.java | 73 +++++-------------- .../freemarker/TemplateProcessingHelper.java | 3 +- .../controller/freemarker/UrlBuilder.java | 2 +- .../vitro/webapp/web/widgets/LoginWidget.java | 2 +- .../controller/edit/AuthenticateTest.java | 6 +- .../siteAdmin-login.ftl => login.ftl} | 0 12 files changed, 79 insertions(+), 76 deletions(-) create mode 100644 webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/EmptyController.java rename webapp/web/templates/freemarker/body/{siteAdmin/siteAdmin-login.ftl => login.ftl} (100%) diff --git a/webapp/config/web.xml b/webapp/config/web.xml index ebe5912c4..53295b74c 100644 --- a/webapp/config/web.xml +++ b/webapp/config/web.xml @@ -386,6 +386,15 @@ /siteAdmin.jsp + + EmptyController + edu.cornell.mannlib.vitro.webapp.controller.freemarker.EmptyController + + + EmptyController + /login + + RevisionInfoController edu.cornell.mannlib.vitro.webapp.controller.freemarker.RevisionInfoController @@ -1239,10 +1248,12 @@ authenticate /authenticate + loginShibboleth /loginShibboleth diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/Controllers.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/Controllers.java index 77215f7fa..2f855bde3 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/Controllers.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/Controllers.java @@ -33,7 +33,7 @@ public class Controllers { public static final String TAB_ENTITIES = "/TabEntitiesController"; public static final String SITE_ADMIN = "/siteAdmin"; - public static final String LOGIN = "/siteAdmin"; + public static final String LOGIN = "/login"; public static final String AUTHENTICATE = "/authenticate"; public static final String EXPORT_RDF = "/export"; diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/authenticate/LoginRedirector.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/authenticate/LoginRedirector.java index 5b10f9597..e96138c36 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/authenticate/LoginRedirector.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/authenticate/LoginRedirector.java @@ -3,7 +3,6 @@ package edu.cornell.mannlib.vitro.webapp.controller.authenticate; import java.io.IOException; -import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.List; @@ -107,9 +106,9 @@ public class LoginRedirector { /** What's the URL for the site admin screen? */ private String getSiteAdminUrl(HttpServletRequest request) { + // return Route.SITE_ADMIN.url(); String contextPath = request.getContextPath(); - String urlParams = "?login=block"; - return contextPath + Controllers.SITE_ADMIN + urlParams; + return contextPath + Controllers.SITE_ADMIN; } /** Get a reference to the Authenticator. */ diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/Authenticate.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/Authenticate.java index 387010d72..c1f95f192 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/Authenticate.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/Authenticate.java @@ -55,16 +55,6 @@ public class Authenticate extends VitroHttpServlet { /** If this parameter is "true" (ignoring case), cancel the login. */ private static final String PARAMETER_CANCEL = "cancel"; - /** If they are logging in, show them this form. */ - public static final String TEMPLATE_LOGIN = "login-form.ftl"; - - /** If they are changing their password on first login, show them this form. */ - public static final String TEMPLATE_FORCE_PASSWORD_CHANGE = "login-forcedPasswordChange.ftl"; - - public static final String BODY_LOGIN_NAME = "loginName"; - public static final String BODY_FORM_ACTION = "formAction"; - public static final String BODY_ERROR_MESSAGE = "errorMessage"; - /** Where do we find the User/Session map in the servlet context? */ public static final String USER_SESSION_MAP_ATTR = "userURISessionMap"; diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/EmptyController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/EmptyController.java new file mode 100644 index 000000000..f02f4b6a5 --- /dev/null +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/EmptyController.java @@ -0,0 +1,36 @@ +/* $This file is distributed under the terms of the license in /doc/license.txt$ */ + +package edu.cornell.mannlib.vitro.webapp.controller.freemarker; + +import java.util.HashMap; +import java.util.Map; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import edu.cornell.mannlib.vitro.webapp.beans.Portal; +import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; +import edu.cornell.mannlib.vitro.webapp.controller.freemarker.FreemarkerHttpServlet.ResponseValues; +import edu.cornell.mannlib.vitro.webapp.controller.freemarker.FreemarkerHttpServlet.TemplateResponseValues; + +/* + * Servlet that only specifies a template, without putting any data + * into the template model. + */ +public class EmptyController extends FreemarkerHttpServlet { + + private static final long serialVersionUID = 1L; + private static final Log log = LogFactory.getLog(EmptyController.class); + + private static final Map urlsToTemplates = new HashMap(){ + { + put("/login", "login.ftl"); + } + }; + + protected ResponseValues processRequest(VitroRequest vreq) { + String requestedUrl = vreq.getServletPath(); + String templateName = urlsToTemplates.get(requestedUrl); + return new TemplateResponseValues(templateName); + } +} diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/FreemarkerHttpServlet.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/FreemarkerHttpServlet.java index f6c7be151..23a289714 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/FreemarkerHttpServlet.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/FreemarkerHttpServlet.java @@ -82,8 +82,9 @@ public class FreemarkerHttpServlet extends VitroHttpServlet { ResponseValues responseValues; + // checkLoginStatus() does a redirect if the user is not logged in. if (requiresLogin() && !checkLoginStatus(request, response)) { - responseValues = new RedirectResponseValues(UrlBuilder.Route.LOGIN.path()); + return; } else { responseValues = processRequest(vreq); } @@ -299,7 +300,7 @@ public class FreemarkerHttpServlet extends VitroHttpServlet { urls.put("termsOfUse", urlBuilder.getPortalUrl(Route.TERMS_OF_USE)); urls.put("login", urlBuilder.getPortalUrl(Route.LOGIN)); urls.put("logout", urlBuilder.getLogoutUrl()); - urls.put("siteAdmin", urlBuilder.getPortalUrl(Route.LOGIN)); + urls.put("siteAdmin", urlBuilder.getPortalUrl(Route.SITE_ADMIN)); urls.put("siteIcons", urlBuilder.getPortalUrl(themeDir + "/site_icons")); urls.put("themeImages", urlBuilder.getPortalUrl(themeDir + "/images")); urls.put("images", urlBuilder.getUrl("/images")); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/SiteAdminController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/SiteAdminController.java index 8e87149b6..0e37399c6 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/SiteAdminController.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/SiteAdminController.java @@ -34,13 +34,11 @@ public class SiteAdminController extends FreemarkerHttpServlet { return siteName + " Site Administration"; } - // Uncomment this once the login page has been separated from the site admin page. - // You also need to change UrlBuilder.Route.LOGIN path to "/login". -// @Override -// protected boolean requiresLogin() { -// // User must be logged in to view this page. -// return true; -// } + @Override + protected boolean requiresLogin() { + // User must be logged in to view this page. + return true; + } @Override protected ResponseValues processRequest(VitroRequest vreq) { @@ -49,61 +47,26 @@ public class SiteAdminController extends FreemarkerHttpServlet { Map body = new HashMap(); - // NOT LOGGED IN: just show login form - if (!loginBean.isLoggedIn()) { - // Unlike the other panels on this page, we put the data directly in the body, because the templates are also used - // by the JSP version, where the data is placed directly in the body map. - body.putAll(getLoginPanelData(vreq)); - - // LOGGED IN: show editing options based on user role - } else { - - if (loginBean.isLoggedInAtLeast(LoginStatusBean.EDITOR)) { + if (loginBean.isLoggedInAtLeast(LoginStatusBean.EDITOR)) { - UrlBuilder urlBuilder = new UrlBuilder(vreq.getPortal()); + UrlBuilder urlBuilder = new UrlBuilder(vreq.getPortal()); + + body.put("dataInput", getDataInputData(vreq)); + + if (loginBean.isLoggedInAtLeast(LoginStatusBean.CURATOR)) { + body.put("siteConfig", getSiteConfigurationData(vreq, urlBuilder)); + body.put("ontologyEditor", getOntologyEditorData(vreq, urlBuilder)); - body.put("dataInput", getDataInputData(vreq)); - - if (loginBean.isLoggedInAtLeast(LoginStatusBean.CURATOR)) { - body.put("siteConfig", getSiteConfigurationData(vreq, urlBuilder)); - body.put("ontologyEditor", getOntologyEditorData(vreq, urlBuilder)); + if (loginBean.isLoggedInAtLeast(LoginStatusBean.DBA)) { + body.put("dataTools", getDataToolsData(vreq, urlBuilder)); - if (loginBean.isLoggedInAtLeast(LoginStatusBean.DBA)) { - body.put("dataTools", getDataToolsData(vreq, urlBuilder)); - - // Only for DataStar. Should handle without needing a DataStar-specific version of this controller. - //body.put("customReports", getCustomReportsData(vreq)); - } + // Only for DataStar. Should handle without needing a DataStar-specific version of this controller. + //body.put("customReports", getCustomReportsData(vreq)); } } } - -// Not used -// int languageProfile = wadf.getLanguageProfile(); -// String languageMode = null; -// if ( 200 <= languageProfile && languageProfile < 300 ) { -// languageMode = "OWL Mode"; -// } else if ( 100 == languageProfile ) { -// languageMode = "RDF Schema Mode"; -// } -// body.put("languageModeStr", languageMode); - return new TemplateResponseValues(TEMPLATE_DEFAULT, body); - - } - - private Map getLoginPanelData(VitroRequest vreq) { - Map map = null; - // This is somewhat awkward, because we are trying to use the login code with as few modifications as possible - // as it was set up for the JSP version as well. We have to unpack the TemplateResponseValues - // object and put everything in a map. - TemplateResponseValues trv = new LoginTemplateHelper(vreq).showLoginPanel(vreq); - if (trv != null) { - map = new HashMap(); - map.putAll(trv.getMap()); - map.put("loginTemplate", trv.getTemplateName()); - } - return map; + } private Map getDataInputData(VitroRequest vreq) { diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/TemplateProcessingHelper.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/TemplateProcessingHelper.java index 876968d66..9d5b2590b 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/TemplateProcessingHelper.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/TemplateProcessingHelper.java @@ -77,7 +77,8 @@ public class TemplateProcessingHelper { try { template = config.getTemplate(templateName); } catch (IOException e) { - log.error("Cannot get template " + templateName); + // RY Should probably throw this error instead. + log.error("Cannot get template " + templateName, e); } return template; } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/UrlBuilder.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/UrlBuilder.java index 7af55c6d4..48bce63c5 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/UrlBuilder.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/UrlBuilder.java @@ -31,7 +31,7 @@ public class UrlBuilder { INDIVIDUAL("/individual"), INDIVIDUAL_EDIT("/entityEdit"), INDIVIDUAL_LIST("/individuallist"), - LOGIN("/siteAdmin"), // when login page is separated from site admin page, change to "/login" + LOGIN("/login"), LOGOUT("/login_process.jsp"), SEARCH("/search"), SITE_ADMIN("/siteAdmin"), diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/widgets/LoginWidget.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/widgets/LoginWidget.java index 9dadba5f4..15099c3e5 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/widgets/LoginWidget.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/widgets/LoginWidget.java @@ -80,7 +80,7 @@ public class LoginWidget extends Widget { } } catch (Exception e) { log.error(e); - values = showError(e); + values = showError(e); } values.put("urls", urls); return values; diff --git a/webapp/test/edu/cornell/mannlib/vitro/webapp/controller/edit/AuthenticateTest.java b/webapp/test/edu/cornell/mannlib/vitro/webapp/controller/edit/AuthenticateTest.java index e8e583a7a..eb5c2065f 100644 --- a/webapp/test/edu/cornell/mannlib/vitro/webapp/controller/edit/AuthenticateTest.java +++ b/webapp/test/edu/cornell/mannlib/vitro/webapp/controller/edit/AuthenticateTest.java @@ -28,6 +28,7 @@ import edu.cornell.mannlib.vitro.testing.AbstractTestClass; import edu.cornell.mannlib.vitro.webapp.beans.User; import edu.cornell.mannlib.vitro.webapp.controller.Controllers; import edu.cornell.mannlib.vitro.webapp.controller.authenticate.AuthenticatorStub; +import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder; import edu.cornell.mannlib.vitro.webapp.controller.login.LoginProcessBean; import edu.cornell.mannlib.vitro.webapp.controller.login.LoginProcessBean.State; @@ -46,8 +47,8 @@ public class AuthenticateTest extends AbstractTestClass { private static final String URL_LOGIN_PAGE = "http://my.local.site/vivo/" + Controllers.LOGIN; - private static final String URL_SITE_ADMIN_PAGE = Controllers.SITE_ADMIN - + "?login=block"; + private static final String URL_SITE_ADMIN_PAGE = Controllers.SITE_ADMIN; + private static final String URL_HOME_PAGE = ""; private static final String URL_SESSION_REDIRECT = "/sessionRedirect"; private static final String URL_CONTEXT_REDIRECT_LOCAL = "/servletContextRedirect"; @@ -90,6 +91,7 @@ public class AuthenticateTest extends AbstractTestClass { auth = new Authenticate(); auth.init(servletConfig); + } private User createNewDbaUser() { diff --git a/webapp/web/templates/freemarker/body/siteAdmin/siteAdmin-login.ftl b/webapp/web/templates/freemarker/body/login.ftl similarity index 100% rename from webapp/web/templates/freemarker/body/siteAdmin/siteAdmin-login.ftl rename to webapp/web/templates/freemarker/body/login.ftl