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=97c5b44699e82757f57ad19b74f9d9d362aee2d0;hp=cc402887423326a1c0f8dc155ed1c34801a71d04;hpb=ad3f61eafc04c60a725c761b3908c15027986c8c;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 cc4028874..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); } } @@ -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); + 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; }