X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Finternal%2Fuseradmin%2FJcrUserAdmin.java;h=f36a0714f0cfdf52b7df5f72959c36016a62075c;hb=c110010dddf647925707a8dcd19c86e1f5254878;hp=4ee4312ab11e68e53bb4bd131771e916b50632c7;hpb=202de2cb4c3eb2ea051a577c9105205ff3c28388;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/internal/useradmin/JcrUserAdmin.java b/org.argeo.cms/src/org/argeo/cms/internal/useradmin/JcrUserAdmin.java index 4ee4312ab..f36a0714f 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/useradmin/JcrUserAdmin.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/useradmin/JcrUserAdmin.java @@ -1,23 +1,20 @@ package org.argeo.cms.internal.useradmin; -import static org.argeo.jcr.ArgeoJcrConstants.ALIAS_NODE; -import static org.argeo.jcr.ArgeoJcrConstants.JCR_REPOSITORY_ALIAS; - import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; -import javax.jcr.Node; import javax.jcr.Repository; -import javax.jcr.RepositoryException; import javax.jcr.Session; import org.argeo.ArgeoException; +import org.argeo.cms.CmsException; +import org.argeo.cms.internal.useradmin.jackrabbit.JackrabbitUserAdminService; +import org.argeo.jcr.JcrUtils; import org.argeo.security.UserAdminService; -import org.argeo.security.jcr.JcrSecurityModel; import org.argeo.security.jcr.JcrUserDetails; -import org.argeo.security.jcr.SimpleJcrSecurityModel; +import org.argeo.security.jcr.NewUserDetails; import org.osgi.framework.BundleContext; import org.osgi.framework.InvalidSyntaxException; import org.osgi.framework.ServiceReference; @@ -27,55 +24,43 @@ import org.osgi.service.useradmin.User; import org.osgi.service.useradmin.UserAdmin; import org.osgi.service.useradmin.UserAdminEvent; import org.osgi.service.useradmin.UserAdminListener; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UsernameNotFoundException; +/** + * Incomplete implementation of {@link UserAdmin} wrapping the supported + * {@link UserAdminService} for the time being. + */ public class JcrUserAdmin implements UserAdmin { private final BundleContext bundleContext; - private UserAdminService userAdminService; + private JackrabbitUserAdminService userAdminService; - private final JcrSecurityModel jcrSecurityModel = new SimpleJcrSecurityModel(); private final Session session; - public JcrUserAdmin(BundleContext bundleContext) { + public JcrUserAdmin(BundleContext bundleContext, Repository node) { try { this.bundleContext = bundleContext; - - ServiceReference nodeRepo = bundleContext - .getServiceReferences(Repository.class, - "(" + JCR_REPOSITORY_ALIAS + "=" + ALIAS_NODE + ")") - .iterator().next(); - this.session = bundleContext.getService(nodeRepo).login(); + this.session = node.login(); } catch (Exception e) { throw new ArgeoException("Cannot initialize user admin", e); } } + public void destroy() { + JcrUtils.logoutQuietly(session); + } + @Override public Role createRole(String name, int type) { - try { - if (Role.USER == type) { - Node userProfile = jcrSecurityModel.sync(session, name, null); - session.getWorkspace().getVersionManager() - .checkout(userProfile.getPath()); - String password = ""; - // TODO add roles - JcrUserDetails userDetails = new JcrUserDetails(userProfile, - password, new ArrayList()); - session.save(); - session.getWorkspace().getVersionManager() - .checkin(userProfile.getPath()); - userAdminService().createUser(userDetails); - return new JcrEnduser(userDetails); - } else if (Role.GROUP == type) { - userAdminService().newRole(name); - return new JcrGroup(name); - } else { - throw new ArgeoException("Unsupported role type " + type); - } - } catch (RepositoryException e) { - throw new ArgeoException("Cannot create role " + name); + if (Role.USER == type) { + NewUserDetails userDetails = new NewUserDetails(name, null); + userAdminService().createUser(userDetails); + return new JcrEndUser((JcrUserDetails) userAdminService() + .loadUserByUsername(name)); + } else if (Role.GROUP == type) { + userAdminService().newRole(name); + return new JcrGroup(name); + } else { + throw new ArgeoException("Unsupported role type " + type); } } @@ -84,7 +69,7 @@ public class JcrUserAdmin implements UserAdmin { Role role = getRole(name); if (role == null) return false; - if (role instanceof JcrEnduser) + if (role instanceof JcrEndUser) userAdminService().deleteUser(role.getName()); else if (role instanceof JcrGroup) userAdminService().deleteRole(role.getName()); @@ -95,14 +80,15 @@ public class JcrUserAdmin implements UserAdmin { @Override public Role getRole(String name) { - if (userAdminService().listEditableRoles().contains(name)) - return new JcrGroup(name); try { - UserDetails userDetails = userAdminService().loadUserByUsername( - name); - return new JcrEnduser(userDetails); + JcrUserDetails userDetails = (JcrUserDetails) userAdminService() + .loadUserByUsername(name); + return new JcrEndUser(userDetails); } catch (UsernameNotFoundException e) { - return null; + if (userAdminService().listEditableRoles().contains(name)) + return new JcrGroup(name); + else + return null; } } @@ -118,26 +104,27 @@ public class JcrUserAdmin implements UserAdmin { for (int i = 0; i < roles.size(); i++) res[i] = new JcrGroup(roles.get(i)); for (int i = 0; i < users.size(); i++) - res[roles.size() + i] = new JcrEnduser(userAdminService() - .loadUserByUsername(users.get(i))); + res[roles.size() + i] = new JcrEndUser( + (JcrUserDetails) userAdminService().loadUserByUsername( + users.get(i))); return res; } @Override public User getUser(String key, String value) { - throw new ArgeoException("Property based search not yet implemented"); + throw new CmsException("Property based search not yet implemented"); } @Override public Authorization getAuthorization(User user) { - return null; + return new JcrAuthorization(((JcrEndUser) user).getUserDetails()); } private synchronized UserAdminService userAdminService() { return userAdminService; } - public void setUserAdminService(UserAdminService userAdminService) { + public void setUserAdminService(JackrabbitUserAdminService userAdminService) { this.userAdminService = userAdminService; }