Make logout more robust.
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / auth / CurrentUser.java
index 43bddaf8d002a727a9000e93cd056010b8994349..eaaf41ab72a458ee7acacb0778315922c9c52ba5 100644 (file)
@@ -1,18 +1,3 @@
-/*
- * Copyright (C) 2007-2012 Argeo GmbH
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *         http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
 package org.argeo.cms.auth;
 
 import java.security.AccessController;
@@ -28,11 +13,10 @@ import java.util.UUID;
 import javax.security.auth.Subject;
 import javax.security.auth.x500.X500Principal;
 
-import org.argeo.cms.CmsException;
+import org.argeo.api.NodeConstants;
 import org.argeo.cms.internal.auth.CmsSessionImpl;
 import org.argeo.cms.internal.auth.ImpliedByPrincipal;
 import org.argeo.cms.internal.kernel.Activator;
-import org.argeo.node.NodeConstants;
 import org.osgi.service.useradmin.Authorization;
 
 /**
@@ -40,9 +24,6 @@ import org.osgi.service.useradmin.Authorization;
  * context.
  */
 public final class CurrentUser {
-       // private final static Log log = LogFactory.getLog(CurrentUser.class);
-       // private final static BundleContext bc =
-       // FrameworkUtil.getBundle(CurrentUser.class).getBundleContext();
        /*
         * CURRENT USER API
         */
@@ -101,7 +82,7 @@ public final class CurrentUser {
 
        public final static String getUsername(Subject subject) {
                if (subject == null)
-                       throw new CmsException("Subject cannot be null");
+                       throw new IllegalArgumentException("Subject cannot be null");
                if (subject.getPrincipals(X500Principal.class).size() != 1)
                        return NodeConstants.ROLE_ANONYMOUS;
                Principal principal = subject.getPrincipals(X500Principal.class).iterator().next();
@@ -148,32 +129,16 @@ public final class CurrentUser {
         * HELPERS
         */
        private static Subject currentSubject() {
-               // CmsAuthenticated cmsView = getNodeAuthenticated();
-               // if (cmsView != null)
-               // return cmsView.getSubject();
                Subject subject = getAccessControllerSubject();
                if (subject != null)
                        return subject;
-               throw new CmsException("Cannot find related subject");
+               throw new IllegalStateException("Cannot find related subject");
        }
 
        private static Subject getAccessControllerSubject() {
                return Subject.getSubject(AccessController.getContext());
        }
 
-       // public static boolean isAuthenticated() {
-       // return getAccessControllerSubject() != null;
-       // }
-
-       /**
-        * The node authenticated component (typically a CMS view) related to this
-        * display, or null if none is available from this call. <b>Not API: Only for
-        * low-level access.</b>
-        */
-       // private static CmsAuthenticated getNodeAuthenticated() {
-       // return UiContext.getData(CmsAuthenticated.KEY);
-       // }
-
        private static Authorization getAuthorization(Subject subject) {
                return subject.getPrivateCredentials(Authorization.class).iterator().next();
        }
@@ -185,7 +150,11 @@ public final class CurrentUser {
                else
                        return false;
                CmsSessionImpl cmsSession = CmsSessionImpl.getByUuid(nodeSessionId.toString());
-               cmsSession.close();
+               
+               // FIXME logout all views
+               // TODO check why it is sometimes null
+               if (cmsSession != null)
+                       cmsSession.close();
                // if (log.isDebugEnabled())
                // log.debug("Logged out CMS session " + cmsSession.getUuid());
                return true;