Author: channa Date: Tue Jul 8 22:54:55 2008 New Revision: 19006 URL: http://wso2.org/svn/browse/wso2?view=rev&revision=19006
Log: Adding 'remember me' option for OpenId users. MASHUP-837. Modified: trunk/mashup/java/modules/core/src/org/wso2/mashup/MashupConstants.java trunk/mashup/java/modules/core/src/org/wso2/mashup/utils/MashupUtils.java trunk/mashup/java/modules/core/src/org/wso2/mashup/webapp/identity/IdentityHandler.java trunk/mashup/java/modules/core/src/org/wso2/mashup/webapp/utils/RegistryUtils.java trunk/mashup/java/modules/www/identityaccept.jsp trunk/mashup/java/modules/www/index.jsp trunk/mashup/java/modules/www/openidsubmit.jsp trunk/mashup/java/modules/www/signin.jsp trunk/mashup/java/modules/www/signout.jsp trunk/mashup/java/modules/www/validate_login.jsp Modified: trunk/mashup/java/modules/core/src/org/wso2/mashup/MashupConstants.java URL: http://wso2.org/svn/browse/wso2/trunk/mashup/java/modules/core/src/org/wso2/mashup/MashupConstants.java?rev=19006&r1=19005&r2=19006&view=diff ============================================================================== --- trunk/mashup/java/modules/core/src/org/wso2/mashup/MashupConstants.java (original) +++ trunk/mashup/java/modules/core/src/org/wso2/mashup/MashupConstants.java Tue Jul 8 22:54:55 2008 @@ -290,4 +290,10 @@ // Default number of entries shows when displaying a paginated list of items. public static final int DEFAULT_PAGE_SIZE = 10; + + // Used to persist the remember me option. + public static final String REMEMBER_OPENID = "rememberopenid"; + + // Used to persist the period of time OpenId is remembered. + public static final String REMEMBER_OPENID_FOREVER = "rememberopenidforever"; } Modified: trunk/mashup/java/modules/core/src/org/wso2/mashup/utils/MashupUtils.java URL: http://wso2.org/svn/browse/wso2/trunk/mashup/java/modules/core/src/org/wso2/mashup/utils/MashupUtils.java?rev=19006&r1=19005&r2=19006&view=diff ============================================================================== --- trunk/mashup/java/modules/core/src/org/wso2/mashup/utils/MashupUtils.java (original) +++ trunk/mashup/java/modules/core/src/org/wso2/mashup/utils/MashupUtils.java Tue Jul 8 22:54:55 2008 @@ -1388,4 +1388,29 @@ StAXOMBuilder builder = new StAXOMBuilder(new ByteArrayInputStream(cleanedHTML.getBytes())); return builder.getDocumentElement(); } + + /** + * Calculates the period for which the 'remember me' cookie has to be retained. + * @param rememberForever Whether to remember for an extended period or the default time span. + * @return time to remember, in seconds. + */ + public static int rememberPeriod(boolean rememberForever) { + int expireIn = 0; + ServerConfiguration serverConfig = ServerConfiguration.getInstance(); + String rememberPeriod = serverConfig.getFirstProperty(MashupConstants.SESSION_MANAGEMENT + + "." + MashupConstants.REMEMBER_ME_PERIOD); + if (rememberPeriod != null) { + int numDays = 0; + try { + numDays = Integer.parseInt(rememberPeriod); + } catch (NumberFormatException e) { + } + expireIn = 60 * 60 * 24 * numDays; + int longerExpDays = 60 * 60 * 24 * 365 * 2; //2 years + if (rememberForever && (numDays <= longerExpDays)) { + expireIn = longerExpDays; + } + } + return expireIn; + } } Modified: trunk/mashup/java/modules/core/src/org/wso2/mashup/webapp/identity/IdentityHandler.java URL: http://wso2.org/svn/browse/wso2/trunk/mashup/java/modules/core/src/org/wso2/mashup/webapp/identity/IdentityHandler.java?rev=19006&r1=19005&r2=19006&view=diff ============================================================================== --- trunk/mashup/java/modules/core/src/org/wso2/mashup/webapp/identity/IdentityHandler.java (original) +++ trunk/mashup/java/modules/core/src/org/wso2/mashup/webapp/identity/IdentityHandler.java Tue Jul 8 22:54:55 2008 @@ -249,14 +249,20 @@ * @param request HttpServletRequest instance. * @param response HttpServletResponse instance. */ - public static void openIDSubmit(HttpServletRequest request, HttpServletResponse response) { + public static void openIDSubmit(HttpServletRequest request, HttpServletResponse response, String redirectTo, String identifier) { String calledFrom = request.getParameter("calledfrom"); + String bounceBack = redirectTo != null ? redirectTo : request.getParameter("bounceback"); + String openIdUrl; + String rememberOpenId = request.getParameter(MashupConstants.REMEMBER_OPENID); + String rememberFroever = request.getParameter(MashupConstants.REMEMBER_OPENID_FOREVER); + String returnPage; try { OpenIDAuthenticationRequest openIDAuthReq; openIDAuthReq = new OpenIDAuthenticationRequest(request, response); - openIDAuthReq.setOpenIDUrl(request.getParameter("openid_identifier")); + openIdUrl = identifier != null ? identifier : request.getParameter("openid_identifier"); + openIDAuthReq.setOpenIDUrl(openIdUrl); // you need to set an absolute url as the return url. // once the user authenticated successfully or failed at the OpenID @@ -264,10 +270,36 @@ StringBuffer returnUrl = new StringBuffer(); returnUrl.append(request.getSession().getServletContext().getAttribute( MashupConstants.WEBAPP_URL)); - returnUrl.append("registration".equals(calledFrom) ? "register_self_identity.jsp" : - "identityaccept.jsp"); - returnUrl.append("?calledfrom=" + calledFrom + "&" + MashupConstants. - AUTHENTICATION_METHOD + "=openid&FromIdentityProvider=true"); + + // Determine target page based on calling page. + if ("registration".equals(calledFrom)) { + returnPage = "register_self_identity.jsp"; + } else { + returnPage = "identityaccept.jsp"; + } + returnUrl.append(returnPage); + + // If a bounceback URL is not known, set to return to the home page. + if (bounceBack == null) { + bounceBack = "index.jsp"; + } + + // URL will confirm that this is an openid call from the provider. + returnUrl.append("?" + MashupConstants. + AUTHENTICATION_METHOD + "=openid&FromIdentityProvider=true&" + + "bounceback=" + bounceBack); + + // Add the caller information if available. + if (calledFrom != null) { + returnUrl.append("&calledfrom=" + calledFrom); + } + + // Add remember-me values to the return URL, if available, to be set in cookie. + if (rememberOpenId != null) { + returnUrl.append("&" + MashupConstants.REMEMBER_OPENID + "=" + rememberOpenId + "&" + + MashupConstants.REMEMBER_OPENID_FOREVER + "=" + rememberFroever); + } + openIDAuthReq.setReturnUrl(returnUrl.toString()); // Use Simple Attribute Registration 1.1 Modified: trunk/mashup/java/modules/core/src/org/wso2/mashup/webapp/utils/RegistryUtils.java URL: http://wso2.org/svn/browse/wso2/trunk/mashup/java/modules/core/src/org/wso2/mashup/webapp/utils/RegistryUtils.java?rev=19006&r1=19005&r2=19006&view=diff ============================================================================== --- trunk/mashup/java/modules/core/src/org/wso2/mashup/webapp/utils/RegistryUtils.java (original) +++ trunk/mashup/java/modules/core/src/org/wso2/mashup/webapp/utils/RegistryUtils.java Tue Jul 8 22:54:55 2008 @@ -134,7 +134,7 @@ String userID = userRegistry.getUserName(); - if (!userID.equals(RegistryConstants.ANONYMOUS_USER)) { + if (userID != null && !userID.equals(RegistryConstants.ANONYMOUS_USER)) { return true; } Modified: trunk/mashup/java/modules/www/identityaccept.jsp URL: http://wso2.org/svn/browse/wso2/trunk/mashup/java/modules/www/identityaccept.jsp?rev=19006&r1=19005&r2=19006&view=diff ============================================================================== --- trunk/mashup/java/modules/www/identityaccept.jsp (original) +++ trunk/mashup/java/modules/www/identityaccept.jsp Tue Jul 8 22:54:55 2008 @@ -22,12 +22,11 @@ <%@ page import="org.wso2.mashup.webapp.identity.RegistrationBean" %> <%@ page import="org.wso2.solutions.identity.IdentityConstants" %> <%@ page import="org.wso2.mashup.MashupConstants" %> +<%@ page import="org.wso2.mashup.utils.MashupUtils" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> -<!--Required to keep a user logged in if 'Remember Me' option is selected--> -<%@ include file="validate_login.jsp" %> - <% + UserRegistry userRegistry = RegistryUtils.getRegistry(request); ResourceBundle bundle = ResourceBundle.getBundle("UI"); boolean isLoggedIn = RegistryUtils.isLoggedIn(userRegistry); @@ -62,10 +61,31 @@ message = "Could not add Identifier to user profile."; } } else { - // Unauthenticated users are trying to sign in. + // Unauthenticated users are trying to sign in. title = "Sign-in to " + bundle.getString("main.title"); if (IdentityHandler.signIn(request)) { - response.sendRedirect(bounceback); + //Saving the openid option to be remembered. + if (MashupConstants.TRUE + .equals(request.getParameter(MashupConstants.REMEMBER_OPENID))) { + int openIdExpire; + + // Setting the openId Cookie. + String openId = + (String) request.getAttribute(IdentityConstants.OpenId.OPENID_IDENTIFIER); + boolean rememberForever = Boolean.parseBoolean( + request.getParameter(MashupConstants.REMEMBER_OPENID_FOREVER)); + openIdExpire = MashupUtils.rememberPeriod(rememberForever); + Cookie openIdCookie = new Cookie(MashupConstants.REMEMBER_OPENID, openId); + openIdCookie.setMaxAge(openIdExpire); + openIdCookie.setSecure(true); + response.addCookie(openIdCookie); + + //Saving the remember me option. + Cookie rememberMeCookie = new Cookie("rememberMe", "true"); + rememberMeCookie.setMaxAge(openIdExpire); + response.addCookie(rememberMeCookie); + } + response.sendRedirect(bounceback); return; } else { message = "Identifier based login failed." + Modified: trunk/mashup/java/modules/www/index.jsp URL: http://wso2.org/svn/browse/wso2/trunk/mashup/java/modules/www/index.jsp?rev=19006&r1=19005&r2=19006&view=diff ============================================================================== --- trunk/mashup/java/modules/www/index.jsp (original) +++ trunk/mashup/java/modules/www/index.jsp Tue Jul 8 22:54:55 2008 @@ -47,6 +47,9 @@ } else if (curCookie.getName().equalsIgnoreCase("password")) { curCookie.setMaxAge(0); response.addCookie(curCookie); + } else if (curCookie.getName().equalsIgnoreCase(MashupConstants.REMEMBER_OPENID)) { + curCookie.setMaxAge(0); + response.addCookie(curCookie); } } } Modified: trunk/mashup/java/modules/www/openidsubmit.jsp URL: http://wso2.org/svn/browse/wso2/trunk/mashup/java/modules/www/openidsubmit.jsp?rev=19006&r1=19005&r2=19006&view=diff ============================================================================== --- trunk/mashup/java/modules/www/openidsubmit.jsp (original) +++ trunk/mashup/java/modules/www/openidsubmit.jsp Tue Jul 8 22:54:55 2008 @@ -15,5 +15,5 @@ --%> <%@ page import="org.wso2.mashup.webapp.identity.IdentityHandler" %> <% - IdentityHandler.openIDSubmit(request, response); + IdentityHandler.openIDSubmit(request, response, null, null); %> \ No newline at end of file Modified: trunk/mashup/java/modules/www/signin.jsp URL: http://wso2.org/svn/browse/wso2/trunk/mashup/java/modules/www/signin.jsp?rev=19006&r1=19005&r2=19006&view=diff ============================================================================== --- trunk/mashup/java/modules/www/signin.jsp (original) +++ trunk/mashup/java/modules/www/signin.jsp Tue Jul 8 22:54:55 2008 @@ -48,7 +48,6 @@ String passwordProvided = request.getParameter("password"); String rememberMe = request.getParameter("rememberme"); String rememberMeForever = request.getParameter("remembermeforever"); - if (firsttime != null) { // Prevent login using default profiles. if (nameProvided.equals(MashupConstants.SAMPLES_USER) || @@ -143,9 +142,11 @@ function setRememberMe() { var val = document.getElementById("chkRemember").checked; var remMe = document.getElementById("rememberme"); + var remOpenId = document.getElementById("<%= MashupConstants.REMEMBER_OPENID %>"); if (val) { remMe.value = "true"; + remOpenId.value = "true"; } else { remMe.value = "false"; document.getElementById("chkRememberForever").checked = false; @@ -159,11 +160,14 @@ var val = document.getElementById("chkRememberForever").checked; var remMeForever = document.getElementById("remembermeforever"); + var remOpenIdForever = document.getElementById("<%= MashupConstants.REMEMBER_OPENID_FOREVER %>"); if (val) { remMeForever.value = "true"; + remOpenIdForever.value = "true"; } else { remMeForever.value = "false"; + remOpenIdForever.value = "false"; } } @@ -184,8 +188,8 @@ <tr> <th width="50%">Sign-in to <%= bundle.getString("main.title")%> </th> - <th width="25%" nowrap="nowrap">Use InfoCard to Sign-in</th> <th width="25%">Use OpenID to Sign-in</th> + <th width="25%" nowrap="nowrap">Use InfoCard to Sign-in</th> </tr> <tr> <td height="175"> @@ -195,7 +199,7 @@ <input type="hidden" id="rememberme" name="rememberme" value="false"/> <input type="hidden" id="remembermeforever" name="remembermeforever" value="false"/> - <br/> + <br/> <% if (!success) { %> <div class="error">Invalid user or password. Please try again. </div> @@ -212,7 +216,37 @@ <label style="margin-right:10px; "><strong>Password:</strong></label><input type="password" name="password" id="password"/> <br/><br/> - + <div><input + type="submit" + id="signin" + value="Sign In"/> + </div> + </form> + </td> + <td height="175" valign="top"> + <form name="openidsignin" id="openidsignin" method="post" action="openidsubmit.jsp"> + <img src="images/openid-logo.jpg" border="0"><br/> + Enter Your OpenID Url:<input type="text" name="openid_identifier" value="<%= MashupConstants.OPENID_URL_PREFIX %>"/> + <input type="hidden" id="<%= MashupConstants.REMEMBER_OPENID %>" name="<%= MashupConstants.REMEMBER_OPENID %>" value="false"/> + <input type="hidden" id="<%= MashupConstants.REMEMBER_OPENID_FOREVER %>" name="<%= MashupConstants.REMEMBER_OPENID_FOREVER %>" value="false"/> + <input type="hidden" name="calledfrom" value="signin"/> + <input type="hidden" name="bounceback" value="<%= bounceback %>"/> + <input type="submit" name="submit" value="Login" /> + </form> + <br/> + <br/> + </td> + <td height="175" valign="top"> + <a href="infocard.jsp?bounceback=<%=URLEncoder.encode(bounceback,"UTF-8")%>"><img + src="images/infocard_92x64.png" border="0"></a> + <br/><br/> + Sign In using your personal or managed InfoCard. + <br/> + <br/> + </td> + </tr> + <tr> + <td colspan="2"> <div style="width:100%;"><input type="checkbox" id="chkRemember" onclick="setRememberMe();"><label @@ -244,31 +278,8 @@ <% } %> - <div><input - type="submit" - id="signin" - value="Sign In"/> - </div> - </form> - </td> - <td height="175" valign="top"> - <a href="infocard.jsp?bounceback=<%=URLEncoder.encode(bounceback,"UTF-8")%>"><img - src="images/infocard_92x64.png" border="0"></a> - <br/><br/> - Sign In using your personal or managed InfoCard. - <br/> - <br/> - </td> - <td height="175" valign="top"> - <form name="openidsignin" id="openidsignin" method="post" action="openidsubmit.jsp"> - <img src="images/openid-logo.jpg" border="0"><br/> - Enter Your OpenID Url:<input type="text" name="openid_identifier" value="<%= MashupConstants.OPENID_URL_PREFIX %>"/> - <input type="hidden" name="calledfrom" value="signin"/> - <input type="submit" name="submit" value="Login" /> - </form> - <br/> - <br/> </td> + <td> </td> </tr> <tr> <td> Modified: trunk/mashup/java/modules/www/signout.jsp URL: http://wso2.org/svn/browse/wso2/trunk/mashup/java/modules/www/signout.jsp?rev=19006&r1=19005&r2=19006&view=diff ============================================================================== --- trunk/mashup/java/modules/www/signout.jsp (original) +++ trunk/mashup/java/modules/www/signout.jsp Tue Jul 8 22:54:55 2008 @@ -90,6 +90,9 @@ } else if (curCookie.getName().equalsIgnoreCase("password")) { curCookie.setMaxAge(0); response.addCookie(curCookie); + } else if (curCookie.getName().equalsIgnoreCase(MashupConstants.REMEMBER_OPENID)) { + curCookie.setMaxAge(0); + response.addCookie(curCookie); } } } Modified: trunk/mashup/java/modules/www/validate_login.jsp URL: http://wso2.org/svn/browse/wso2/trunk/mashup/java/modules/www/validate_login.jsp?rev=19006&r1=19005&r2=19006&view=diff ============================================================================== --- trunk/mashup/java/modules/www/validate_login.jsp (original) +++ trunk/mashup/java/modules/www/validate_login.jsp Tue Jul 8 22:54:55 2008 @@ -24,9 +24,11 @@ <%@ page import="java.util.ResourceBundle" %> <%@ page import="org.wso2.wsas.ServerManager" %> <%@ page import="org.apache.axiom.om.util.Base64" %> +<%@ page import="org.wso2.mashup.webapp.identity.IdentityHandler" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <% + String redirectTo = request.getParameter("bounceback"); ConfigurationContext axis2ConfigContext = ServerManager.getInstance().configContext; String contextRoot = AdminUIServletContextListener.contextPath; if (!contextRoot.endsWith(MashupConstants.FORWARD_SLASH)) { @@ -46,6 +48,7 @@ boolean rememberMe = false; String userNameStored = null; String passwordStored = null; + String openIdStored = null; Cookie curCookie = null; for (int x = 0; x < cookies.length; x++) { @@ -58,10 +61,12 @@ passwordStored = new String(Base64.decode(curCookie.getValue()), "UTF-8"); + } else if (curCookie.getName().equalsIgnoreCase(MashupConstants.REMEMBER_OPENID)) { + openIdStored = curCookie.getValue(); } } - if (rememberMe && (userNameStored != null) && (passwordStored != null)) { + if (rememberMe) { ServletContext context = request.getSession().getServletContext(); @@ -69,9 +74,12 @@ RegistryConstants.REGISTRY); try { - MashupUtils.login(userNameStored, passwordStored, session.getId(), - request.getContextPath()); - + if ((userNameStored != null) && (passwordStored != null)) { + MashupUtils.login(userNameStored, passwordStored, session.getId(), + request.getContextPath()); + } else if (openIdStored != null) { + IdentityHandler.openIDSubmit(request, response, redirectTo, openIdStored); + } } catch (Exception e) { //Deleting the cookie in case of an exception. for (int x = 0; x < cookies.length; x++) { @@ -85,6 +93,10 @@ } else if (curCookie.getName().equalsIgnoreCase("password")) { curCookie.setMaxAge(0); response.addCookie(curCookie); + } else if (curCookie.getName().equalsIgnoreCase( + MashupConstants.REMEMBER_OPENID)) { + curCookie.setMaxAge(0); + response.addCookie(curCookie); } } //Re-directing to the sign in page _______________________________________________ Mashup-dev mailing list [email protected] http://wso2.org/cgi-bin/mailman/listinfo/mashup-dev
