You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jspwiki.apache.org by ju...@apache.org on 2021/03/09 21:28:36 UTC

[jspwiki] 02/03: JSPWIKI-1147: The button 'Clear user preferences' doesn't clear user preferences.

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 <ju...@gmail.com>
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%>" />