package org.argeo.security.jcr; import java.util.HashSet; import java.util.Set; import javax.jcr.Node; import javax.jcr.Repository; import javax.jcr.RepositoryException; 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.UserDetails; import org.springframework.security.userdetails.UsernameNotFoundException; /** * Dummy user service to be used when running as a single OS user (typically * desktop). TODO integrate with JCR user / groups */ public class OsJcrUserAdminService implements UserAdminService { private String securityWorkspace = "security"; private Repository repository; private Session securitySession; public void init() { try { securitySession = repository.login(securityWorkspace); } catch (RepositoryException e) { throw new ArgeoException("Cannot initialize", e); } } public void destroy() { JcrUtils.logoutQuietly(securitySession); } /** Unsupported */ public void createUser(UserDetails user) { throw new UnsupportedOperationException(); } /** Does nothing */ public void updateUser(UserDetails user) { } /** Unsupported */ public void deleteUser(String username) { throw new UnsupportedOperationException(); } /** Unsupported */ public void changePassword(String oldPassword, String newPassword) { throw new UnsupportedOperationException(); } public boolean userExists(String username) { if (getSPropertyUsername().equals(username)) return true; else return false; } public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException, DataAccessException { if (getSPropertyUsername().equals(username)) { Node userProfile = UserJcrUtils.getUserProfile(securitySession, username); JcrUserDetails userDetails; try { userDetails = new JcrUserDetails(userProfile, "", OsJcrAuthenticationProvider.getBaseAuthorities()); } catch (RepositoryException e) { throw new ArgeoException("Cannot retrieve user profile for " + username, e); } return userDetails; } else { throw new UnsupportedOperationException(); } } protected final String getSPropertyUsername() { return System.getProperty("user.name"); } public Set listUsers() { Set set = new HashSet(); set.add(getSPropertyUsername()); return set; } public Set listUsersInRole(String role) { Set set = new HashSet(); set.add(getSPropertyUsername()); return set; } /** Does nothing */ public void synchronize() { } /** Unsupported */ public void newRole(String role) { throw new UnsupportedOperationException(); } public Set listEditableRoles() { Set set = new HashSet(); return set; } /** Unsupported */ public void deleteRole(String role) { throw new UnsupportedOperationException(); } public void setRepository(Repository repository) { this.repository = repository; } public void setSecurityWorkspace(String securityWorkspace) { this.securityWorkspace = securityWorkspace; } }