]> git.argeo.org Git - lgpl/argeo-commons.git/blob - AggregatingAuthorization.java
c5cb904fa2191594dae3465fb4ab17aca27b9d74
[lgpl/argeo-commons.git] / AggregatingAuthorization.java
1 package org.argeo.cms.osgi.useradmin;
2
3 import java.util.ArrayList;
4 import java.util.Collections;
5 import java.util.HashSet;
6 import java.util.List;
7 import java.util.Set;
8
9 import javax.security.auth.x500.X500Principal;
10
11 import org.argeo.api.cms.directory.CmsAuthorization;
12 import org.osgi.service.useradmin.Authorization;
13
14 /** An {@link Authorization} which combines roles form various auth sources. */
15 class AggregatingAuthorization implements CmsAuthorization, Authorization {
16 private final String name;
17 private final String displayName;
18 private final Set<String> systemRoles;
19 private final Set<String> roles;
20
21 public AggregatingAuthorization(String name, String displayName, Set<String> systemRoles, String[] roles) {
22 this.name = new X500Principal(name).getName();
23 this.displayName = displayName;
24 this.systemRoles = Collections.unmodifiableSet(new HashSet<>(systemRoles));
25 Set<String> temp = new HashSet<>();
26 for (String role : roles) {
27 if (!temp.contains(role))
28 temp.add(role);
29 }
30 this.roles = Collections.unmodifiableSet(temp);
31 }
32
33 @Override
34 public String getName() {
35 return name;
36 }
37
38 @Override
39 public boolean hasRole(String name) {
40 if (systemRoles.contains(name))
41 return true;
42 if (roles.contains(name))
43 return true;
44 return false;
45 }
46
47 @Override
48 public String[] getRoles() {
49 int size = systemRoles.size() + roles.size();
50 List<String> res = new ArrayList<String>(size);
51 res.addAll(systemRoles);
52 res.addAll(roles);
53 return res.toArray(new String[size]);
54 }
55
56 @Override
57 public int hashCode() {
58 if (name == null)
59 return super.hashCode();
60 return name.hashCode();
61 }
62
63 @Override
64 public boolean equals(Object obj) {
65 if (!(obj instanceof Authorization))
66 return false;
67 Authorization that = (Authorization) obj;
68 if (name == null)
69 return that.getName() == null;
70 return name.equals(that.getName());
71 }
72
73 @Override
74 public String toString() {
75 return displayName;
76 }
77
78 }