Skip to content

Instantly share code, notes, and snippets.

@tmvolpato
Created October 12, 2015 13:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tmvolpato/cbc0033080964b2422cb to your computer and use it in GitHub Desktop.
Save tmvolpato/cbc0033080964b2422cb to your computer and use it in GitHub Desktop.
my class SecurityInitializer
@Singleton
@Startup
public class SecurityInitializer {
private IdentityManager identityManager;
@Inject
private Authorization authorization;
@Inject
private PartitionManager partitionManager;
private static final String DEFAULT_ADMIN_USER = "admin";
private static final String DEFAULT_ADMIN_PASSWORD = "adminadmin";
private static final String DEFAULT_ADMIN_GROUP = "Administrators";
@PostConstruct
protected void initialize() {
final Partition partition = this.checkPartition();
this.identityManager = this.partitionManager.createIdentityManager(partition);
for (String role : this.authorization.listAuthorizations()) {
if (!this.hasRole(role)) {
this.identityManager.add(new Role(role));
}
}
if (!this.hasGroup(DEFAULT_ADMIN_GROUP)) {
this.identityManager.add(new Group(DEFAULT_ADMIN_GROUP));
}
if (!this.hasUser(DEFAULT_ADMIN_USER)) {
final User user = new User(DEFAULT_ADMIN_USER);
user.setName("Administrador");
user.setCreatedDate(new Date());
user.setEnabled(true);
user.setExpirationDate(null);
user.setEmail("admin@webdental.com");
this.identityManager.add(user);
this.identityManager.updateCredential(user, new Password(DEFAULT_ADMIN_PASSWORD));
final Group group = this.getGroup(DEFAULT_ADMIN_GROUP);
final RelationshipManager relationshipManager = this.partitionManager.createRelationshipManager();
for (Role role : this.getRoles()) {
relationshipManager.add(new Grant(role, group));
}
relationshipManager.add(new GroupMembership(group, user));
}
}
private Partition checkPartition() {
Partition partition = this.partitionManager.getPartition(Partition.class, Partition.DEFAULT);
if (partition == null) {
partition = new Partition(Partition.DEFAULT);
this.partitionManager.add(partition);
}
return partition;
}
private boolean hasUser(String user) {
final IdentityQueryBuilder queryBuilder = this.identityManager.getQueryBuilder();
final IdentityQuery<User> query = queryBuilder.createIdentityQuery(User.class);
query.where(queryBuilder.equal(User.USER_NAME, user));
return !query.getResultList().isEmpty();
}
private boolean hasGroup(String group) {
final IdentityQueryBuilder queryBuilder = this.identityManager.getQueryBuilder();
final IdentityQuery<Group> query = queryBuilder.createIdentityQuery(Group.class);
query.where(queryBuilder.equal(Group.NAME, group));
return !query.getResultList().isEmpty();
}
private boolean hasRole(String role) {
final IdentityQueryBuilder queryBuilder = this.identityManager.getQueryBuilder();
final IdentityQuery<Role> query = queryBuilder.createIdentityQuery(Role.class);
query.where(queryBuilder.equal(Role.AUTHORIZATION, role));
return !query.getResultList().isEmpty();
}
private Group getGroup(String group) {
final IdentityQueryBuilder queryBuilder = this.identityManager.getQueryBuilder();
final IdentityQuery<Group> query = queryBuilder.createIdentityQuery(Group.class);
query.where(queryBuilder.equal(Group.NAME, group));
return query.getResultList().get(0);
}
private List<Role> getRoles() {
final IdentityQueryBuilder queryBuilder = this.identityManager.getQueryBuilder();
final IdentityQuery<Role> query = queryBuilder.createIdentityQuery(Role.class);
return query.getResultList();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment