This is an automated email from the ASF dual-hosted git repository. juanpablo pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/jspwiki.git
commit 8fc23a50938aa8afa667a0ef5781e737f9b87fcb Author: Juan Pablo Santos RodrÃguez <[email protected]> AuthorDate: Tue Mar 9 22:27:05 2021 +0100 JSPWIKI-1147: The button 'Clear user preferences' doesn't clear user preferences. --- .../auth/login/CookieAssertionLoginModule.java | 10 +++------ .../org/apache/wiki/preferences/Preferences.java | 4 +++- .../main/java/org/apache/wiki/util/HttpUtil.java | 7 +++++++ jspwiki-war/src/main/webapp/UserPreferences.jsp | 24 ++++++++++++++++------ 4 files changed, 31 insertions(+), 14 deletions(-) diff --git a/jspwiki-main/src/main/java/org/apache/wiki/auth/login/CookieAssertionLoginModule.java b/jspwiki-main/src/main/java/org/apache/wiki/auth/login/CookieAssertionLoginModule.java index 3b9ffe0..e3a391d 100644 --- a/jspwiki-main/src/main/java/org/apache/wiki/auth/login/CookieAssertionLoginModule.java +++ b/jspwiki-main/src/main/java/org/apache/wiki/auth/login/CookieAssertionLoginModule.java @@ -143,15 +143,11 @@ public class CookieAssertionLoginModule extends AbstractLoginModule { } /** - * Removes the user cookie from the response. This makes the user appear - * again as an anonymous coward. + * Removes the user cookie from the response. This makes the user appear again as an anonymous coward. * * @param response The servlet response. */ - public static void clearUserCookie(final HttpServletResponse response ) - { - final Cookie userId = new Cookie( PREFS_COOKIE_NAME, "" ); - userId.setMaxAge( 0 ); - response.addCookie( userId ); + public static void clearUserCookie( final HttpServletResponse response ) { + HttpUtil.clearCookie( response, PREFS_COOKIE_NAME ); } } diff --git a/jspwiki-main/src/main/java/org/apache/wiki/preferences/Preferences.java b/jspwiki-main/src/main/java/org/apache/wiki/preferences/Preferences.java index 114bf12..428278e 100644 --- a/jspwiki-main/src/main/java/org/apache/wiki/preferences/Preferences.java +++ b/jspwiki-main/src/main/java/org/apache/wiki/preferences/Preferences.java @@ -55,6 +55,8 @@ public class Preferences extends HashMap< String,String > { */ public static final String SESSIONPREFS = "prefs"; + public static final String COOKIE_USER_PREFS_NAME = "JSPWikiUserPrefs"; + private static final Logger log = Logger.getLogger( Preferences.class ); /** @@ -126,7 +128,7 @@ public class Preferences extends HashMap< String,String > { * @param prefs The default hashmap of preferences */ private static void parseJSONPreferences( final HttpServletRequest request, final Preferences prefs ) { - final String prefVal = TextUtil.urlDecodeUTF8( HttpUtil.retrieveCookieValue( request, "JSPWikiUserPrefs" ) ); + final String prefVal = TextUtil.urlDecodeUTF8( HttpUtil.retrieveCookieValue( request, COOKIE_USER_PREFS_NAME ) ); if( prefVal != null ) { // Convert prefVal JSON to a generic hashmap @SuppressWarnings( "unchecked" ) final Map< String, String > map = new Gson().fromJson( prefVal, Map.class ); diff --git a/jspwiki-util/src/main/java/org/apache/wiki/util/HttpUtil.java b/jspwiki-util/src/main/java/org/apache/wiki/util/HttpUtil.java index ec2a3dc..e57bfc3 100644 --- a/jspwiki-util/src/main/java/org/apache/wiki/util/HttpUtil.java +++ b/jspwiki-util/src/main/java/org/apache/wiki/util/HttpUtil.java @@ -23,6 +23,7 @@ import org.apache.log4j.Logger; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.text.DateFormat; @@ -253,4 +254,10 @@ public final class HttpUtil { return currentOctet == 3; } + public static void clearCookie( final HttpServletResponse response, final String cookieName ) { + final Cookie cookie = new Cookie( cookieName, "" ); + cookie.setMaxAge( 0 ); + response.addCookie( cookie ); + } + } diff --git a/jspwiki-war/src/main/webapp/UserPreferences.jsp b/jspwiki-war/src/main/webapp/UserPreferences.jsp index 615c233..3540a28 100644 --- a/jspwiki-war/src/main/webapp/UserPreferences.jsp +++ b/jspwiki-war/src/main/webapp/UserPreferences.jsp @@ -34,6 +34,7 @@ <%@ page import="org.apache.wiki.preferences.Preferences" %> <%@ page import="org.apache.wiki.ui.EditorManager" %> <%@ page import="org.apache.wiki.ui.TemplateManager" %> +<%@ page import="org.apache.wiki.util.HttpUtil" %> <%@ page import="org.apache.wiki.variables.VariableManager" %> <%@ page import="org.apache.wiki.workflow.DecisionRequiredException" %> <%@ page errorPage="/Error.jsp" %> @@ -112,11 +113,11 @@ return; } } - if( "setAssertedName".equals(request.getParameter("action")) ) + if( "setAssertedName".equals( request.getParameter( "action" ) ) ) { - Preferences.reloadPreferences(pageContext); + Preferences.reloadPreferences( pageContext ); - String assertedName = request.getParameter("assertedName"); + String assertedName = request.getParameter( "assertedName" ); CookieAssertionLoginModule.setUserCookie( response, assertedName ); String redirectPage = request.getParameter( "redirect" ); @@ -130,13 +131,24 @@ response.sendRedirect( viewUrl ); return; } - if( "clearAssertedName".equals(request.getParameter("action")) ) + if( "clearAssertedName".equals( request.getParameter( "action" ) ) ) { + HttpUtil.clearCookie( response, Preferences.COOKIE_USER_PREFS_NAME ); CookieAssertionLoginModule.clearUserCookie( response ); - response.sendRedirect( wikiContext.getURL(ContextEnum.PAGE_NONE.getRequestContext(),"Logout.jsp") ); + Preferences.reloadPreferences( pageContext ); + + String redirectPage = request.getParameter( "redirect" ); + if( !wiki.getManager( PageManager.class ).wikiPageExists( redirectPage ) ) + { + redirectPage = wiki.getFrontPage(); + } + String viewUrl = ( "UserPreferences".equals( redirectPage ) ) ? "Wiki.jsp" : wikiContext.getViewURL( redirectPage ); + + log.info( "Redirecting user to " + viewUrl ); + response.sendRedirect( viewUrl ); return; } - response.setContentType("text/html; charset="+wiki.getContentEncoding() ); + response.setContentType( "text/html; charset=" + wiki.getContentEncoding() ); String contentPage = wiki.getManager( TemplateManager.class ).findJSP( pageContext, wikiContext.getTemplate(), "ViewTemplate.jsp" ); %><wiki:Include page="<%=contentPage%>" />
