]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/jcr/OsJcrUserAdminService.java
Add dep folder
[lgpl/argeo-commons.git] / security / runtime / org.argeo.security.core / src / main / java / org / argeo / security / jcr / OsJcrUserAdminService.java
index 483cc408df823654067c055e61671c752b5217f0..c25bdb86577f70213aa6e9e95528bbc4ac15b27a 100644 (file)
@@ -1,6 +1,23 @@
+/*
+ * 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.security.jcr;
 
+import java.util.ArrayList;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
 
 import javax.jcr.Node;
@@ -10,8 +27,10 @@ import javax.jcr.Session;
 
 import org.argeo.ArgeoException;
 import org.argeo.jcr.JcrUtils;
+import org.argeo.jcr.UserJcrUtils;
 import org.argeo.security.UserAdminService;
 import org.springframework.dao.DataAccessException;
+import org.springframework.security.userdetails.User;
 import org.springframework.security.userdetails.UserDetails;
 import org.springframework.security.userdetails.UsernameNotFoundException;
 
@@ -20,21 +39,23 @@ import org.springframework.security.userdetails.UsernameNotFoundException;
  * desktop). TODO integrate with JCR user / groups
  */
 public class OsJcrUserAdminService implements UserAdminService {
-       private String securityWorkspace = "security";
        private Repository repository;
 
-       private Session securitySession;
+       /** In memory roles provided by applications. */
+       private List<String> roles = new ArrayList<String>();
+
+       // private Session adminSession;
 
        public void init() {
-               try {
-                       securitySession = repository.login(securityWorkspace);
-               } catch (RepositoryException e) {
-                       throw new ArgeoException("Cannot initialize", e);
-               }
+               // try {
+               // adminSession = repository.login();
+               // } catch (RepositoryException e) {
+               // throw new ArgeoException("Cannot initialize", e);
+               // }
        }
 
        public void destroy() {
-               JcrUtils.logoutQuietly(securitySession);
+               // JcrUtils.logoutQuietly(adminSession);
        }
 
        /** <b>Unsupported</b> */
@@ -67,15 +88,24 @@ public class OsJcrUserAdminService implements UserAdminService {
        public UserDetails loadUserByUsername(String username)
                        throws UsernameNotFoundException, DataAccessException {
                if (getSPropertyUsername().equals(username)) {
-                       Node userProfile = JcrUtils.getUserProfile(securitySession,
-                                       username);
-                       JcrUserDetails userDetails;
-                       try {
-                               userDetails = new JcrUserDetails(userProfile, "",
+                       UserDetails userDetails;
+                       if (repository != null) {
+                               Session adminSession = null;
+                               try {
+                                       adminSession = repository.login();
+                                       Node userProfile = UserJcrUtils.getUserProfile(
+                                                       adminSession, username);
+                                       userDetails = new JcrUserDetails(userProfile, "",
+                                                       OsJcrAuthenticationProvider.getBaseAuthorities());
+                               } catch (RepositoryException e) {
+                                       throw new ArgeoException(
+                                                       "Cannot retrieve user profile for " + username, e);
+                               } finally {
+                                       JcrUtils.logoutQuietly(adminSession);
+                               }
+                       } else {
+                               userDetails = new User(username, "", true, true, true, true,
                                                OsJcrAuthenticationProvider.getBaseAuthorities());
-                       } catch (RepositoryException e) {
-                               throw new ArgeoException("Cannot retrieve user profile for "
-                                               + username, e);
                        }
                        return userDetails;
                } else {
@@ -105,25 +135,19 @@ public class OsJcrUserAdminService implements UserAdminService {
 
        /** <b>Unsupported</b> */
        public void newRole(String role) {
-               throw new UnsupportedOperationException();
+               roles.add(role);
        }
 
        public Set<String> listEditableRoles() {
-               Set<String> set = new HashSet<String>();
-               return set;
+               return new HashSet<String>(roles);
        }
 
        /** <b>Unsupported</b> */
        public void deleteRole(String role) {
-               throw new UnsupportedOperationException();
+               roles.remove(role);
        }
 
        public void setRepository(Repository repository) {
                this.repository = repository;
        }
-
-       public void setSecurityWorkspace(String securityWorkspace) {
-               this.securityWorkspace = securityWorkspace;
-       }
-
 }