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
.argeo
.api
.cms
.CmsLog
;
11 import org
.argeo
.osgi
.transaction
.WorkTransaction
;
12 import org
.argeo
.slc
.SlcException
;
13 import org
.osgi
.service
.useradmin
.Role
;
14 import org
.osgi
.service
.useradmin
.UserAdmin
;
17 * Register one or many roles via a user admin service. Does nothing if the role
18 * is already registered.
20 public class SimpleRoleRegistration
implements Runnable
{
21 private final static CmsLog log
= CmsLog
.getLog(SimpleRoleRegistration
.class);
24 private List
<String
> roles
= new ArrayList
<String
>();
25 private UserAdmin userAdmin
;
26 private WorkTransaction userTransaction
;
31 userTransaction
.begin();
32 if (role
!= null && !roleExists(role
))
35 for (String r
: roles
)
38 userTransaction
.commit();
39 } catch (Exception e
) {
41 userTransaction
.rollback();
42 } catch (Exception e1
) {
43 log
.error("Cannot rollback", e1
);
45 throw new SlcException("Cannot add roles", e
);
49 private boolean roleExists(String role
) {
50 return userAdmin
.getRole(toDn(role
).toString()) != null;
53 protected void newRole(LdapName r
) {
54 userAdmin
.createRole(r
.toString(), Role
.GROUP
);
55 log
.info("Added role " + r
+ " required by application.");
58 public void register(UserAdmin userAdminService
, Map
<?
, ?
> properties
) {
59 this.userAdmin
= userAdminService
;
63 protected LdapName
toDn(String name
) {
65 return new LdapName("cn=" + name
+ ",ou=roles,ou=node");
66 } catch (InvalidNameException e
) {
67 throw new SlcException("Badly formatted role name " + name
, e
);
71 public void setRole(String role
) {
75 public void setRoles(List
<String
> roles
) {
79 public void setUserAdmin(UserAdmin userAdminService
) {
80 this.userAdmin
= userAdminService
;
83 public void setUserTransaction(WorkTransaction userTransaction
) {
84 this.userTransaction
= userTransaction
;