Maybe this code could be put in some releaseLocks() method(s) for now?

Thanks
-Vincent

On May 29, 2008, at 1:24 AM, sdumitriu (SVN) wrote:

> Author: sdumitriu
> Date: 2008-05-29 01:24:11 +0200 (Thu, 29 May 2008)
> New Revision: 9964
>
> Modified:
>   xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/ 
> user/impl/xwiki/XWikiAuthServiceImpl.java
> Log:
> XWIKI-2191: When user logout, his pages locks should be removed
> Fixed.
> - When a local user logs out, his locks are removed.
> - When a global user logs out, his locks in the current and main  
> wiki are removed.
>
> Patch submitted by Asiri Rathnayake, applied with a few changes
>
>
> Modified: xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/ 
> xwiki/user/impl/xwiki/XWikiAuthServiceImpl.java
> ===================================================================
> --- xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/ 
> user/impl/xwiki/XWikiAuthServiceImpl.java     2008-05-28 20:18:19 UTC  
> (rev 9963)
> +++ xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/ 
> user/impl/xwiki/XWikiAuthServiceImpl.java     2008-05-28 23:24:11 UTC  
> (rev 9964)
> @@ -31,6 +31,8 @@
> import org.apache.commons.lang.StringUtils;
> import org.apache.commons.logging.Log;
> import org.apache.commons.logging.LogFactory;
> +import org.hibernate.Query;
> +import org.hibernate.Session;
> import org.securityfilter.config.SecurityConfig;
> import org.securityfilter.filter.SecurityRequestWrapper;
> import org.securityfilter.realm.SimplePrincipal;
> @@ -200,8 +202,66 @@
>         wrappedRequest.setUserPrincipal(null);
>
>         try {
> +            if (auth.processLogin(wrappedRequest, response,  
> context)) {
> +                return null;
> +            }
>
> -            // Process login out (this only works with FORMS
> +            // TODO : This code need to be moved elsewhere  
> (appropriately).
> +            Principal user = wrappedRequest.getUserPrincipal();
> +            if (context.getAction().equals("logout") && user !=  
> null) {
> +                // Release all active locks on current wiki.
> +                try {
> +                     
> xwiki.getHibernateStore().beginTransaction(context);
> +                    Session session =  
> xwiki.getHibernateStore().getSession(context);
> +                    String sql = "delete from XWikiLock as lock  
> where lock.userName=:userName";
> +                    Query query = session.createQuery(sql);
> +                    query.setString("userName", user.getName());
> +                    query.executeUpdate();
> +                } catch (Exception e) {
> +                    throw new  
> XWikiException(XWikiException.MODULE_XWIKI_STORE,
> +                         
> XWikiException.ERROR_XWIKI_STORE_HIBERNATE_DELETING_LOCK,
> +                        "Error while deleting active locks held by  
> logging out user.");
> +                } finally {
> +                    try {
> +                         
> xwiki.getHibernateStore().endTransaction(context, true);
> +                    } catch (Exception e) {
> +
> +                    }
> +                }
> +                // If we're in a non-main wiki & the user is global,
> +                // switch to the global wiki and delete locks held  
> there.
> +                if (xwiki.isVirtualMode()
> +                    && ! 
> context.getMainXWiki().equals(context.getDatabase())
> +                    &&  
> user.getName().startsWith(context.getMainXWiki() + ":")) {
> +                    String cdb = context.getDatabase();
> +                    // switch to main wiki.
> +                    context.setDatabase(context.getMainXWiki());
> +                    try {
> +                         
> xwiki.getHibernateStore().beginTransaction(context);
> +                        Session session =  
> xwiki.getHibernateStore().getSession(context);
> +                        String sql =
> +                            "delete from XWikiLock as lock where  
> lock.userName=:userName";
> +                        Query query = session.createQuery(sql);
> +                        String localName =  
> user.getName().substring(user.getName().indexOf(":") + 1);
> +                        query.setString("userName", localName);
> +                        query.executeUpdate();
> +                    } catch (Exception e) {
> +                        throw new  
> XWikiException(XWikiException.MODULE_XWIKI_STORE,
> +                             
> XWikiException.ERROR_XWIKI_STORE_HIBERNATE_DELETING_LOCK,
> +                            "Error while deleting active locks held  
> by logging out user.");
> +                    } finally {
> +                        try {
> +                             
> xwiki.getHibernateStore().endTransaction(context, true);
> +                        } catch (Exception e) {
> +
> +                        }
> +                        // switch back to original wiki.
> +                        context.setDatabase(cdb);
> +                    }
> +                }
> +            }
> +
> +            // Process logout (this only works with Forms)
>             if (auth.processLogout(wrappedRequest, response,  
> xwiki.getUrlPatternMatcher())) {
>                 if (log.isInfoEnabled()) {
>                     log.info("User " + context.getUser() + " has  
> been logged-out");
> @@ -210,11 +270,6 @@
>                 return null;
>             }
>
> -            if (auth.processLogin(wrappedRequest, response,  
> context)) {
> -                return null;
> -            }
> -
> -            Principal user = wrappedRequest.getUserPrincipal();
>             if (log.isInfoEnabled()) {
>                 if (user != null) {
>                     log.info("User " + user.getName() + " is  
> authentified");
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to