1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package org.opencastproject.security.api;
23
24 import org.opencastproject.util.EqualsUtil;
25
26 import org.apache.commons.lang3.StringUtils;
27
28 import java.util.Arrays;
29 import java.util.Collection;
30 import java.util.Collections;
31 import java.util.HashSet;
32 import java.util.Objects;
33 import java.util.Set;
34
35 import javax.xml.bind.annotation.XmlAccessType;
36 import javax.xml.bind.annotation.XmlAccessorType;
37 import javax.xml.bind.annotation.XmlElement;
38 import javax.xml.bind.annotation.XmlElementWrapper;
39 import javax.xml.bind.annotation.XmlRootElement;
40 import javax.xml.bind.annotation.XmlTransient;
41 import javax.xml.bind.annotation.XmlType;
42
43
44
45
46 @XmlAccessorType(XmlAccessType.FIELD)
47 @XmlType(name = "user", namespace = "http://org.opencastproject.security", propOrder = { "userName", "name", "email",
48 "provider", "isManageable", "roles", "organization" })
49 @XmlRootElement(name = "user", namespace = "http://org.opencastproject.security")
50 public final class JaxbUser implements User {
51
52
53 @XmlElement(name = "username")
54 protected String userName;
55
56
57 @XmlElement(name = "name")
58 protected String name;
59
60
61 @XmlElement(name = "email")
62 protected String email;
63
64
65 @XmlElement(name = "provider")
66 protected String provider;
67
68 @XmlElement(name = "manageable")
69 protected boolean isManageable = false;
70
71
72 @XmlElement(name = "role")
73 @XmlElementWrapper(name = "roles")
74 protected Set<JaxbRole> roles;
75
76
77 @XmlTransient
78 protected String password;
79
80
81 @XmlElement(name = "organization")
82 protected JaxbOrganization organization;
83
84
85
86
87 public JaxbUser() {
88 }
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104 public JaxbUser(String userName, String provider, JaxbOrganization organization, JaxbRole... roles)
105 throws IllegalArgumentException {
106 this(userName, provider, organization, new HashSet<JaxbRole>(Arrays.asList(roles)));
107 }
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125 public JaxbUser(String userName, String password, String provider, JaxbOrganization organization, JaxbRole... roles)
126 throws IllegalArgumentException {
127 this(userName, password, provider, organization, new HashSet<JaxbRole>(Arrays.asList(roles)));
128 }
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146 public JaxbUser(String userName, String password, String provider, JaxbOrganization organization, Set<JaxbRole> roles)
147 throws IllegalArgumentException {
148 this(userName, password, null, null, provider, organization, roles);
149 }
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165 public JaxbUser(String userName, String provider, JaxbOrganization organization, Set<JaxbRole> roles)
166 throws IllegalArgumentException {
167 this(userName, null, provider, organization, roles);
168 }
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190 public JaxbUser(String userName, String password, String name, String email, String provider,
191 JaxbOrganization organization, Set<JaxbRole> roles) throws IllegalArgumentException {
192 if (StringUtils.isBlank(userName))
193 throw new IllegalArgumentException("Username must be set");
194 if (organization == null)
195 throw new IllegalArgumentException("Organization must be set");
196 this.userName = userName;
197 this.password = password;
198 this.name = name;
199 this.email = email;
200 this.provider = provider;
201 this.organization = organization;
202 if (roles == null) {
203 this.roles = new HashSet<>();
204 } else {
205 for (Role role : roles) {
206 if (!Objects.equals(organization.getId(), role.getOrganizationId())) {
207 throw new IllegalArgumentException("Role " + role + " is not from the same organization!");
208 }
209 }
210 this.roles = roles;
211 }
212 }
213
214
215
216
217
218
219
220
221 public static JaxbUser fromUser(User user) {
222 if (user instanceof JaxbUser)
223 return (JaxbUser) user;
224 return fromUser(user, Collections.<JaxbRole> emptySet());
225 }
226
227
228
229
230
231
232
233
234 public static JaxbUser fromUser(User user, Collection<? extends Role> extraRoles) {
235 Set<JaxbRole> roles = new HashSet<JaxbRole>();
236 for (Role role : user.getRoles()) {
237 roles.add(JaxbRole.fromRole(role));
238 }
239 for (Role role : extraRoles) {
240 roles.add(JaxbRole.fromRole(role));
241 }
242
243 JaxbUser jaxbUser = new JaxbUser(user.getUsername(), user.getPassword(), user.getName(), user.getEmail(),
244 user.getProvider(), JaxbOrganization.fromOrganization(user.getOrganization()), roles);
245 jaxbUser.setManageable(user.isManageable());
246 return jaxbUser;
247 }
248
249
250
251
252 @Override
253 public String getUsername() {
254 return userName;
255 }
256
257
258
259
260 @Override
261 public String getPassword() {
262 return password;
263 }
264
265
266
267
268 @Override
269 public Organization getOrganization() {
270 return organization;
271 }
272
273
274
275
276 @Override
277 public Set<Role> getRoles() {
278 return new HashSet<>(roles);
279 }
280
281
282
283
284 @Override
285 public boolean hasRole(String roleName) {
286 for (Role role : roles) {
287 if (role.getName().equals(roleName))
288 return true;
289 }
290 return false;
291 }
292
293
294
295
296
297
298 @Override
299 public boolean equals(Object obj) {
300 if (!(obj instanceof User))
301 return false;
302 User other = (User) obj;
303 return userName.equals(other.getUsername()) && organization.equals(other.getOrganization());
304 }
305
306
307
308
309
310
311 @Override
312 public int hashCode() {
313 return EqualsUtil.hash(userName, organization, provider);
314 }
315
316
317
318
319
320
321 @Override
322 public String toString() {
323 return String.format("%s:%s:%s", userName, organization, provider);
324 }
325
326 @Override
327 public String getName() {
328 return name;
329 }
330
331 @Override
332 public String getEmail() {
333 return email;
334 }
335
336 @Override
337 public String getProvider() {
338 return provider;
339 }
340
341 public void setProvider(String provider) {
342 this.provider = provider;
343 }
344
345 @Override
346 public boolean isManageable() {
347 return isManageable;
348 }
349
350 public void setManageable(boolean isManageable) {
351 this.isManageable = isManageable;
352 }
353
354 }