1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.cms.security;
35
36 import info.magnolia.cms.security.auth.Entity;
37 import info.magnolia.cms.security.auth.GroupList;
38 import info.magnolia.cms.security.auth.RoleList;
39 import info.magnolia.context.MgnlContext;
40
41 import java.io.Serializable;
42 import java.util.Collection;
43 import java.util.Iterator;
44 import java.util.Map;
45 import java.util.Set;
46
47 import javax.security.auth.Subject;
48
49 import org.slf4j.Logger;
50 import org.slf4j.LoggerFactory;
51
52
53
54
55
56 public class ExternalUser extends AbstractUser implements Serializable {
57 private static final Logger log = LoggerFactory.getLogger(ExternalUser.class);
58
59
60
61
62 private Entity userDetails;
63
64
65
66
67 private Map<String, String> properties;
68
69
70
71
72 private RoleList roleList;
73
74
75
76
77 private GroupList groupList;
78
79
80
81
82
83
84 @Deprecated
85 protected ExternalUser(Subject subject) {
86 final Set<Entity> principalDetails = subject.getPrincipals(Entity.class);
87 final Iterator<Entity> entityIterator = principalDetails.iterator();
88 this.userDetails = entityIterator.next();
89
90 final Set<RoleList> principalRoles = subject.getPrincipals(RoleList.class);
91 final Iterator<RoleList> roleListIterator = principalRoles.iterator();
92 this.roleList = roleListIterator.next();
93
94 final Set<GroupList> principalGroups = subject.getPrincipals(GroupList.class);
95 final Iterator<GroupList> groupListIterator = principalGroups.iterator();
96 this.groupList = groupListIterator.next();
97 }
98
99 protected ExternalUser(Map<String, String> properties, GroupList groupList, RoleList roleList) {
100 this.properties = properties;
101 this.groupList = groupList;
102 this.roleList = roleList;
103 }
104
105 @Override
106 public boolean hasRole(String roleName) {
107 return this.roleList.has(roleName);
108 }
109
110 @Override
111 public void removeRole(String roleName) {
112 throw new UnsupportedOperationException("not implemented for this ExternalUser");
113 }
114
115 @Override
116 public void addRole(String roleName) {
117 throw new UnsupportedOperationException("not implemented for this ExternalUser");
118 }
119
120
121
122
123
124
125 @Override
126 public boolean inGroup(String groupName) {
127 return this.groupList.has(groupName);
128 }
129
130
131
132
133 @Override
134 public void removeGroup(String groupName) throws UnsupportedOperationException {
135 throw new UnsupportedOperationException("not implemented for this ExternalUser");
136 }
137
138
139
140
141 @Override
142 public void addGroup(String groupName) throws UnsupportedOperationException {
143 throw new UnsupportedOperationException("not implemented for this ExternalUser");
144 }
145
146 @Override
147 public boolean isEnabled() {
148 return true;
149 }
150
151 @Override
152 public void setEnabled(boolean enabled) {
153 }
154
155 @Override
156 public String getLanguage() {
157 String language = this.properties.get(Entity.LANGUAGE);
158 if (null == language) {
159 language = MgnlContext.getSystemContext().getLocale().getLanguage();
160 }
161 return language;
162 }
163
164 @Override
165 public String getName() {
166 return this.properties.get(Entity.NAME);
167 }
168
169 @Override
170 public String getPassword() {
171 return this.properties.get(Entity.PASSWORD);
172 }
173
174 public String getEmail() {
175 return this.properties.get(Entity.EMAIL);
176 }
177
178 @Override
179 public String getProperty(String propertyName) {
180 String property = this.properties.get(propertyName);
181 if (null == property) {
182 log.debug("Unable to retrieve property {} for user {}", propertyName, getName());
183 }
184 return property;
185 }
186
187 @Override
188 public void setProperty(String propertyName, String value) {
189 this.properties.put(propertyName, value);
190 }
191
192 @Override
193 public String getIdentifier() {
194 throw new UnsupportedOperationException("not implemented for this ExternalUser");
195 }
196
197 @Override
198 public Collection<String> getGroups() {
199 return this.groupList.getList();
200 }
201
202 @Override
203 public Collection<String> getAllGroups() {
204 return this.getGroups();
205 }
206
207 @Override
208 public Collection<String> getRoles() {
209 return this.roleList.getList();
210 }
211
212 @Override
213 public Collection<String> getAllRoles() {
214 return this.getRoles();
215 }
216 }