]> git.argeo.org Git - lgpl/argeo-commons.git/blob - security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/jcr/OsJcrUserAdminService.java
483cc408df823654067c055e61671c752b5217f0
[lgpl/argeo-commons.git] / security / runtime / org.argeo.security.core / src / main / java / org / argeo / security / jcr / OsJcrUserAdminService.java
1 package org.argeo.security.jcr;
2
3 import java.util.HashSet;
4 import java.util.Set;
5
6 import javax.jcr.Node;
7 import javax.jcr.Repository;
8 import javax.jcr.RepositoryException;
9 import javax.jcr.Session;
10
11 import org.argeo.ArgeoException;
12 import org.argeo.jcr.JcrUtils;
13 import org.argeo.security.UserAdminService;
14 import org.springframework.dao.DataAccessException;
15 import org.springframework.security.userdetails.UserDetails;
16 import org.springframework.security.userdetails.UsernameNotFoundException;
17
18 /**
19 * Dummy user service to be used when running as a single OS user (typically
20 * desktop). TODO integrate with JCR user / groups
21 */
22 public class OsJcrUserAdminService implements UserAdminService {
23 private String securityWorkspace = "security";
24 private Repository repository;
25
26 private Session securitySession;
27
28 public void init() {
29 try {
30 securitySession = repository.login(securityWorkspace);
31 } catch (RepositoryException e) {
32 throw new ArgeoException("Cannot initialize", e);
33 }
34 }
35
36 public void destroy() {
37 JcrUtils.logoutQuietly(securitySession);
38 }
39
40 /** <b>Unsupported</b> */
41 public void createUser(UserDetails user) {
42 throw new UnsupportedOperationException();
43 }
44
45 /** Does nothing */
46 public void updateUser(UserDetails user) {
47
48 }
49
50 /** <b>Unsupported</b> */
51 public void deleteUser(String username) {
52 throw new UnsupportedOperationException();
53 }
54
55 /** <b>Unsupported</b> */
56 public void changePassword(String oldPassword, String newPassword) {
57 throw new UnsupportedOperationException();
58 }
59
60 public boolean userExists(String username) {
61 if (getSPropertyUsername().equals(username))
62 return true;
63 else
64 return false;
65 }
66
67 public UserDetails loadUserByUsername(String username)
68 throws UsernameNotFoundException, DataAccessException {
69 if (getSPropertyUsername().equals(username)) {
70 Node userProfile = JcrUtils.getUserProfile(securitySession,
71 username);
72 JcrUserDetails userDetails;
73 try {
74 userDetails = new JcrUserDetails(userProfile, "",
75 OsJcrAuthenticationProvider.getBaseAuthorities());
76 } catch (RepositoryException e) {
77 throw new ArgeoException("Cannot retrieve user profile for "
78 + username, e);
79 }
80 return userDetails;
81 } else {
82 throw new UnsupportedOperationException();
83 }
84 }
85
86 protected final String getSPropertyUsername() {
87 return System.getProperty("user.name");
88 }
89
90 public Set<String> listUsers() {
91 Set<String> set = new HashSet<String>();
92 set.add(getSPropertyUsername());
93 return set;
94 }
95
96 public Set<String> listUsersInRole(String role) {
97 Set<String> set = new HashSet<String>();
98 set.add(getSPropertyUsername());
99 return set;
100 }
101
102 /** Does nothing */
103 public void synchronize() {
104 }
105
106 /** <b>Unsupported</b> */
107 public void newRole(String role) {
108 throw new UnsupportedOperationException();
109 }
110
111 public Set<String> listEditableRoles() {
112 Set<String> set = new HashSet<String>();
113 return set;
114 }
115
116 /** <b>Unsupported</b> */
117 public void deleteRole(String role) {
118 throw new UnsupportedOperationException();
119 }
120
121 public void setRepository(Repository repository) {
122 this.repository = repository;
123 }
124
125 public void setSecurityWorkspace(String securityWorkspace) {
126 this.securityWorkspace = securityWorkspace;
127 }
128
129 }