1 package org
.argeo
.slc
.spring
.auth
;
3 import java
.util
.ArrayList
;
7 import javax
.naming
.InvalidNameException
;
8 import javax
.naming
.ldap
.LdapName
;
9 import javax
.transaction
.UserTransaction
;
11 import org
.apache
.commons
.logging
.Log
;
12 import org
.apache
.commons
.logging
.LogFactory
;
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
23 .getLog(SimpleRoleRegistration
.class);
26 private List
<String
> roles
= new ArrayList
<String
>();
27 private UserAdmin userAdmin
;
28 private UserTransaction userTransaction
;
33 userTransaction
.begin();
34 if (role
!= null && !roleExists(role
))
37 for (String r
: roles
)
40 userTransaction
.commit();
41 } catch (Exception e
) {
43 userTransaction
.rollback();
44 } catch (Exception e1
) {
45 log
.error("Cannot rollback", e1
);
47 throw new SlcException("Cannot add roles", e
);
51 private boolean roleExists(String role
) {
52 return userAdmin
.getRole(toDn(role
).toString()) != null;
55 protected void newRole(LdapName r
) {
56 userAdmin
.createRole(r
.toString(), Role
.GROUP
);
57 log
.info("Added role " + r
+ " required by application.");
60 public void register(UserAdmin userAdminService
, Map
<?
, ?
> properties
) {
61 this.userAdmin
= userAdminService
;
65 protected LdapName
toDn(String name
) {
67 return new LdapName("cn=" + name
+ ",ou=roles,ou=node");
68 } catch (InvalidNameException e
) {
69 throw new SlcException("Badly formatted role name " + name
, e
);
73 public void setRole(String role
) {
77 public void setRoles(List
<String
> roles
) {
81 public void setUserAdmin(UserAdmin userAdminService
) {
82 this.userAdmin
= userAdminService
;
85 public void setUserTransaction(UserTransaction userTransaction
) {
86 this.userTransaction
= userTransaction
;