1 package org
.argeo
.slc
.spring
.auth
;
3 import java
.util
.ArrayList
;
7 import javax
.naming
.InvalidNameException
;
8 import javax
.naming
.ldap
.LdapName
;
10 import org
.apache
.commons
.logging
.Log
;
11 import org
.apache
.commons
.logging
.LogFactory
;
12 import org
.argeo
.osgi
.transaction
.WorkTransaction
;
13 import org
.argeo
.slc
.SlcException
;
14 import org
.osgi
.service
.useradmin
.Role
;
15 import org
.osgi
.service
.useradmin
.UserAdmin
;
18 * Register one or many roles via a user admin service. Does nothing if the role
19 * is already registered.
21 public class SimpleRoleRegistration
implements Runnable
{
22 private final static Log log
= LogFactory
.getLog(SimpleRoleRegistration
.class);
25 private List
<String
> roles
= new ArrayList
<String
>();
26 private UserAdmin userAdmin
;
27 private WorkTransaction userTransaction
;
32 userTransaction
.begin();
33 if (role
!= null && !roleExists(role
))
36 for (String r
: roles
)
39 userTransaction
.commit();
40 } catch (Exception e
) {
42 userTransaction
.rollback();
43 } catch (Exception e1
) {
44 log
.error("Cannot rollback", e1
);
46 throw new SlcException("Cannot add roles", e
);
50 private boolean roleExists(String role
) {
51 return userAdmin
.getRole(toDn(role
).toString()) != null;
54 protected void newRole(LdapName r
) {
55 userAdmin
.createRole(r
.toString(), Role
.GROUP
);
56 log
.info("Added role " + r
+ " required by application.");
59 public void register(UserAdmin userAdminService
, Map
<?
, ?
> properties
) {
60 this.userAdmin
= userAdminService
;
64 protected LdapName
toDn(String name
) {
66 return new LdapName("cn=" + name
+ ",ou=roles,ou=node");
67 } catch (InvalidNameException e
) {
68 throw new SlcException("Badly formatted role name " + name
, e
);
72 public void setRole(String role
) {
76 public void setRoles(List
<String
> roles
) {
80 public void setUserAdmin(UserAdmin userAdminService
) {
81 this.userAdmin
= userAdminService
;
84 public void setUserTransaction(WorkTransaction userTransaction
) {
85 this.userTransaction
= userTransaction
;