/*
* Copyright (C) 2005-2012 BetaCONCEPT Limited
*
* This file is part of Astroboa.
*
* Astroboa is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Astroboa is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Astroboa. If not, see <http://www.gnu.org/licenses/>.
*/
package org.betaconceptframework.astroboa.engine.service.security.management;
import java.security.Principal;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.apache.commons.lang.BooleanUtils;
import org.apache.commons.lang.StringUtils;
import org.betaconceptframework.astroboa.api.model.BooleanProperty;
import org.betaconceptframework.astroboa.api.model.CmsProperty;
import org.betaconceptframework.astroboa.api.model.ContentObject;
import org.betaconceptframework.astroboa.api.model.ObjectReferenceProperty;
import org.betaconceptframework.astroboa.api.model.StringProperty;
import org.betaconceptframework.astroboa.api.model.definition.StringPropertyDefinition;
import org.betaconceptframework.astroboa.api.model.exception.CmsException;
import org.betaconceptframework.astroboa.api.model.io.ResourceRepresentationType;
import org.betaconceptframework.astroboa.api.model.query.CmsOutcome;
import org.betaconceptframework.astroboa.api.model.query.criteria.ContentObjectCriteria;
import org.betaconceptframework.astroboa.api.security.AstroboaPrincipalName;
import org.betaconceptframework.astroboa.api.security.CmsRole;
import org.betaconceptframework.astroboa.api.security.IdentityPrincipal;
import org.betaconceptframework.astroboa.api.security.exception.CmsInvalidPasswordException;
import org.betaconceptframework.astroboa.api.security.exception.CmsLoginInvalidUsernameException;
import org.betaconceptframework.astroboa.api.security.exception.CmsNoSuchRoleException;
import org.betaconceptframework.astroboa.api.security.exception.CmsNoSuchUserException;
import org.betaconceptframework.astroboa.api.security.management.IdentityStore;
import org.betaconceptframework.astroboa.api.security.management.IdentityStoreContextHolder;
import org.betaconceptframework.astroboa.api.security.management.Person;
import org.betaconceptframework.astroboa.api.service.ContentService;
import org.betaconceptframework.astroboa.context.AstroboaClientContextHolder;
import org.betaconceptframework.astroboa.model.factory.CmsCriteriaFactory;
import org.betaconceptframework.astroboa.model.factory.CriterionFactory;
import org.betaconceptframework.astroboa.security.CmsGroup;
import org.betaconceptframework.astroboa.security.CmsPrincipal;
import org.betaconceptframework.astroboa.security.CmsRoleAffiliationFactory;
import org.betaconceptframework.astroboa.security.management.CmsPerson;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
/**
* @author Gregory Chomatas (gchomatas@betaconcept.com)
* @author Savvas Triantafyllou (striantafyllou@betaconcept.com)
*
*/
public class IdentityStoreImpl implements IdentityStore{
private final Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private ContentService contentService;
public boolean addRoleToGroup(String role, String group) throws CmsNoSuchRoleException{
throw new CmsException("Method not yet implemented. Use Astroboa web interface to administer Roles");
}
@Override
public boolean authenticate(String username, String password) {
if (StringUtils.isBlank(username)){
return false;
}
ContentObject personObject = null;
try{
personObject = retrieveUniquePersonObjectForUsername(username);
}
catch(CmsException e)
{
logger.warn("Error during authentication of user "+username+". Could not load ContentObject of type personType for this user", e);
return false;
}
if (personObject == null){
logger.warn("No content object of type personType found in repository {} for username {}",
retrieveActiveRepositoryId(), username);
throw new CmsLoginInvalidUsernameException(username);
}
CmsProperty<?, ?> passwordProperty = personObject.getCmsProperty("personAuthentication.password");
if (passwordProperty != null && passwordProperty instanceof StringProperty &&
((StringProperty)passwordProperty).hasValues()){
StringPropertyDefinition passwordPropertyDefinition = ((StringProperty)passwordProperty).getPropertyDefinition();
if (!passwordPropertyDefinition.isPasswordType()){
logger.warn("Open Social property 'personAuthentication.password' has not been marked as a password type");
}
if (passwordPropertyDefinition.getPasswordEncryptor() == null){
throw new CmsException("Found no password encryptor to use. Check that Open Social property 'personAuthentication.password' definition " +
"refers to a valid CmsPasswordEncryptor class name and if none is specified, check that default class AstroboaPasswordEncryptor" +
" is used and initialized properly");
}
return passwordPropertyDefinition.getPasswordEncryptor().checkPassword(password,
((StringProperty)passwordProperty).getSimpleTypeValue());
}
logger.warn("Content Object of type personType for username {} has no values in property personAuthentication.password and therefore user" +
"cannot be authenticated", username );
return false;
}
@Override
public boolean changePassword(String name, String oldPassword, String newPassword) throws CmsNoSuchUserException, CmsInvalidPasswordException{
if (StringUtils.isBlank(name)){
throw new CmsNoSuchUserException("Invalid person. No username provided");
}
ContentObject personObject = null;
try{
personObject = retrieveUniquePersonObjectForUsername(name);
}
catch(CmsException e)
{
return false;
}
if (personObject == null)
{
return false;
}
//Extra check about password
if (StringUtils.isBlank(newPassword) || newPassword.length()<8){
throw new CmsInvalidPasswordException("Invalid password. Should be at least 8 characters long");
}
CmsProperty<?,?> passwordProperty = (CmsProperty<?,?>) personObject.getCmsProperty("personAuthentication.password");
if (passwordProperty != null && passwordProperty instanceof StringProperty &&
((StringProperty)passwordProperty).hasValues()){
StringPropertyDefinition passwordPropertyDefinition = ((StringProperty)passwordProperty).getPropertyDefinition();
if (!passwordPropertyDefinition.isPasswordType()){
logger.warn("Open Social property 'personAuthentication.password' has not been marked as a password type");
}
if (passwordPropertyDefinition.getPasswordEncryptor() == null){
logger.warn("Found no password encryptor to use. Check that Open Social property 'personAuthentication.password' definition " +
"refers to a valid CmsPasswordEncryptor class name and if none is specified, check that default class AstroboaPasswordEncryptor" +
" is used and initialized properly");
return false;
}
if (passwordPropertyDefinition.getPasswordEncryptor().checkPassword(oldPassword, ((StringProperty)passwordProperty).getSimpleTypeValue())){
((StringProperty)passwordProperty).setSimpleTypeValue(passwordPropertyDefinition.getPasswordEncryptor().encrypt(newPassword));
contentService.save(personObject, false, true, null);
return true;
}
else{
throw new CmsInvalidPasswordException(name);
}
}
return false;
}
@Override
public boolean createRole(String role) {
throw new CmsException("Method not yet implemented. Use Astroboa web interface to administer Roles");
}
@Override
public boolean createUser(String username, String password) {
throw new CmsException("Method not yet implemented. Use Astroboa web interface to administer Person");
}
@Override
public boolean createUser(String username, String password,
String firstname, String lastname) {
throw new CmsException("Method not yet implemented. Use Astroboa web interface to administer Person");
}
@Override
public boolean deleteRole(String role) throws CmsNoSuchRoleException{
throw new CmsException("Method not yet implemented. Use Astroboa web interface to administer Roles");
}
@Override
public boolean deleteUser(String name) throws CmsNoSuchUserException {
throw new CmsException("Method not yet implemented. Use Astroboa web interface to administer Person");
}
@Override
public boolean disableUser(String name) throws CmsNoSuchUserException{
throw new CmsException("Method not yet implemented. Use Astroboa web interface to administer Person");
}
@Override
public boolean enableUser(String name) throws CmsNoSuchUserException {
throw new CmsException("Method not yet implemented. Use Astroboa web interface to administer Person");
}
@Override
public List<String> getGrantedRoles(String name) throws CmsNoSuchUserException{
if (StringUtils.equals(IdentityPrincipal.ANONYMOUS, name))
{
return loadRolesForAnonymousUser();
}
ContentObject personObject = null;
try{
personObject = retrieveUniquePersonObjectForUsername(name);
}
catch(CmsException e)
{
return new ArrayList<String>();
}
List<String> grantedRoles = new ArrayList<String>();
if (personObject != null){
ObjectReferenceProperty rolesProperty = (ObjectReferenceProperty) personObject.getCmsProperty("personAuthorization.role");
if (rolesProperty != null && rolesProperty.hasValues()){
for (ContentObject roleObject : rolesProperty.getSimpleTypeValues()){
grantedRoles.add( retrieveRoleNameAndThrowExceptionIfNotThere(roleObject));
}
}
}
return grantedRoles;
}
private List<String> loadRolesForAnonymousUser() {
//Assign only ROLE_CMS_EXTERNAL_VIEWER to ANONYMOUS
List<String> roles = new ArrayList<String>();
roles.add(CmsRoleAffiliationFactory.INSTANCE.getCmsRoleAffiliationForRepository(CmsRole.ROLE_CMS_EXTERNAL_VIEWER, retrieveActiveRepositoryId()));
return roles;
}
private String retrieveRoleNameAndThrowExceptionIfNotThere(
ContentObject roleObject) {
StringProperty roleNameProperty = (StringProperty)roleObject.getCmsProperty("name");
//Check if value exists for role although property name is mandatory
if (roleNameProperty == null || roleNameProperty.hasNoValues()){
throw new CmsException("Found no name for role object "+ roleObject.getId());
}
return roleNameProperty.getSimpleTypeValue();
}
@Override
public List<String> getImpliedRoles(String name)throws CmsNoSuchUserException {
if (StringUtils.equals(IdentityPrincipal.ANONYMOUS, name)){
return loadRolesForAnonymousUser();
}
ContentObject personObject = null;
try{
personObject = retrieveUniquePersonObjectForUsername(name);
}
catch(CmsException e){
return new ArrayList<String>();
}
Set<String> impliedRoles = new HashSet<String>();
if (personObject != null){
ObjectReferenceProperty rolesProperty = (ObjectReferenceProperty) personObject.getCmsProperty("personAuthorization.role");
if (rolesProperty != null && rolesProperty.hasValues()){
for (ContentObject roleObject : rolesProperty.getSimpleTypeValues()){
addRoleAndIsMemberOfToImpliedRoles(impliedRoles, roleObject);
}
}
}
return new ArrayList<String>(impliedRoles);
}
private void addRoleAndIsMemberOfToImpliedRoles(Set<String> impliedRoles,
ContentObject roleObject) {
String roleName = retrieveRoleNameAndThrowExceptionIfNotThere(roleObject);
if (impliedRoles.add(roleName)){
//Continue further only if role does not already exist in the list
ObjectReferenceProperty isMemberOfProperty = (ObjectReferenceProperty) roleObject.getCmsProperty("isMemberOf");
if (isMemberOfProperty.hasValues()){
for(ContentObject impliedRoleObject : isMemberOfProperty.getSimpleTypeValues()){
addRoleAndIsMemberOfToImpliedRoles(impliedRoles, impliedRoleObject);
}
}
}
}
@Override
public List<String> getRoleGroups(String name) throws CmsNoSuchRoleException{
ContentObject roleObject = retrieveRole(name, true);
List<String> roleGroups = new ArrayList<String>();
if (roleObject != null){
ObjectReferenceProperty roleGroupsProperty = (ObjectReferenceProperty) roleObject.getCmsProperty("isMemberOf");
if (roleGroupsProperty != null && roleGroupsProperty.hasValues()){
for (ContentObject roleGroupObject : roleGroupsProperty.getSimpleTypeValues()){
roleGroups.add(retrieveRoleNameAndThrowExceptionIfNotThere(roleGroupObject));
}
}
}
return roleGroups;
}
@Override
public boolean grantRole(String name, String role) throws CmsNoSuchUserException, CmsNoSuchRoleException{
throw new CmsException("Method not yet implemented. Use Astroboa web interface to administer Person");
}
@Override
public boolean isUserEnabled(String name) throws CmsNoSuchUserException{
ContentObject personObject = null;
try{
personObject = retrieveUniquePersonObjectForUsername(name);
}
catch(CmsException e)
{
return false;
}
BooleanProperty userEnabledProperty = (BooleanProperty) personObject.getCmsProperty("personAuthentication.authenticationDataEnabled");
return userEnabledProperty != null &&
userEnabledProperty.hasValues() &&
userEnabledProperty.getSimpleTypeValue();
}
@Override
public List<String> listGrantableRoles() {
List<String> grantableRoles = new ArrayList<String>();
ContentObjectCriteria roleObjectCriteria = CmsCriteriaFactory.newContentObjectCriteria("roleObject");
roleObjectCriteria.doNotCacheResults();
CmsOutcome<ContentObject> outcome = contentService.searchContentObjects(roleObjectCriteria, ResourceRepresentationType.CONTENT_OBJECT_LIST);
if (outcome != null && outcome.getCount() > 0){
for (ContentObject rankedOutcome : outcome.getResults()){
grantableRoles.add(retrieveRoleNameAndThrowExceptionIfNotThere(rankedOutcome));
}
}
return grantableRoles;
}
@Override
public List<Principal> listMembers(String role) throws CmsNoSuchRoleException{
List<Principal> roleMembers = new ArrayList<Principal>();
ContentObject roleObject = retrieveRole(role, true);
//Find all persons which are members of the role
ContentObjectCriteria personObjectCriteria = CmsCriteriaFactory.newContentObjectCriteria("personType");
personObjectCriteria.doNotCacheResults();
personObjectCriteria.addCriterion(CriterionFactory.equals("personAuthorization.role", roleObject.getId()));
CmsOutcome<ContentObject> outcome = contentService.searchContentObjects(personObjectCriteria, ResourceRepresentationType.CONTENT_OBJECT_LIST);
if (outcome != null && outcome.getCount() > 0){
for (ContentObject rankedOutcome : outcome.getResults()){
ContentObject personObject = rankedOutcome;
StringProperty personUsernameProperty = (StringProperty) personObject.getCmsProperty("personAuthentication.username");
if (personUsernameProperty == null || personUsernameProperty.hasNoValues()){
logger.warn("Person "+personObject.getId() + " does not have a username and thus will not be added as a member for role "+role);
}
else{
roleMembers.add(new CmsPrincipal(personUsernameProperty.getSimpleTypeValue()));
}
}
}
//Find all role which are member of the role
ContentObjectCriteria roleObjectCriteria = CmsCriteriaFactory.newContentObjectCriteria("roleObject");
roleObjectCriteria.doNotCacheResults();
roleObjectCriteria.addCriterion(CriterionFactory.equals("isMemberOf", roleObject.getId()));
outcome = contentService.searchContentObjects(roleObjectCriteria, ResourceRepresentationType.CONTENT_OBJECT_LIST);
if (outcome != null && outcome.getCount() > 0){
CmsGroup rolesPrincipal = new CmsGroup(AstroboaPrincipalName.Roles.toString());
for (ContentObject rankedOutcome : outcome.getResults()){
ContentObject memberRoleObject = rankedOutcome;
rolesPrincipal.addMember(new CmsPrincipal(retrieveRoleNameAndThrowExceptionIfNotThere(memberRoleObject)));
}
roleMembers.add(rolesPrincipal);
}
return roleMembers;
}
@Override
public List<String> listRoles() {
return listGrantableRoles();
}
@Override
public List<String> listUsers() {
return listUsers(null);
}
@Override
public List<String> listUsers(String filter) {
ContentObjectCriteria contentObjectCriteria = CmsCriteriaFactory.newContentObjectCriteria("personType");
if (filter != null){
contentObjectCriteria.addCriterion(CriterionFactory.contains("personAuthentication.username", "*"+filter+"*"));
}
contentObjectCriteria.doNotCacheResults();
contentObjectCriteria.addPropertyPathWhoseValueWillBePreLoaded("personAuthentication.username");
CmsOutcome<ContentObject> outcome = contentService.searchContentObjects(contentObjectCriteria, ResourceRepresentationType.CONTENT_OBJECT_LIST);
List<String> users = new ArrayList<String>();
if (outcome != null && outcome.getCount() > 0){
for (ContentObject personObjectRanked : outcome.getResults()){
CmsProperty<?, ?> usernameProperty = personObjectRanked.getCmsProperty("personAuthentication.username");
if (usernameProperty != null && usernameProperty instanceof StringProperty){
users.add(((StringProperty)usernameProperty).getSimpleTypeValue());
}
}
}
return users;
}
@Override
public boolean removeRoleFromGroup(String role, String group) throws CmsNoSuchRoleException{
throw new CmsException("Method not yet implemented. Use Astroboa web interface to administer Roles");
}
@Override
public boolean revokeRole(String name, String role) throws CmsNoSuchUserException, CmsNoSuchRoleException{
throw new CmsException("Method not yet implemented. Use Astroboa web interface to administer Roles");
}
@Override
public boolean roleExists(String name) {
try{
return retrieveRole(name, false) != null;
}
catch(CmsNoSuchRoleException e){
return false;
}
}
@Override
public boolean userExists(String name) {
try{
return retrieveUniquePersonObjectForUsername(name) != null;
}
catch(CmsNoSuchUserException e){
return false;
}
}
private ContentObjectCriteria createPersonObjectCriteriaWithUserName(String username){
ContentObjectCriteria contentObjectCriteria = CmsCriteriaFactory.newContentObjectCriteria("personType");
contentObjectCriteria.addCriterion(CriterionFactory.equalsCaseInsensitive("personAuthentication.username", username));
contentObjectCriteria.doNotCacheResults();
return contentObjectCriteria;
}
private ContentObject retrieveUniquePersonObjectForUsername(
String username) {
if (StringUtils.isBlank(username)){
throw new CmsNoSuchUserException(username);
}
ContentObjectCriteria personCriteria = createPersonObjectCriteriaWithUserName(username);
if (personCriteria == null){
throw new CmsException("No criteria provided for personType");
}
personCriteria.setOffsetAndLimit(0,1);
CmsOutcome<ContentObject> outcome = contentService.searchContentObjects(personCriteria, ResourceRepresentationType.CONTENT_OBJECT_LIST);
if (outcome == null || outcome.getCount() == 0){
throw new CmsNoSuchUserException(username);
}
if (outcome.getCount() >1){
throw new CmsNoSuchUserException("Found more than one personObjects with username "+ username);
}
return outcome.getResults().get(0);
}
private ContentObject retrieveRole(String name, boolean throwExcpetionIfMoreThanOneFound) {
if (StringUtils.isBlank(name)){
throw new CmsNoSuchRoleException("Empty role name");
}
ContentObjectCriteria roleObjectCriteria = CmsCriteriaFactory.newContentObjectCriteria("roleObject");
roleObjectCriteria.addCriterion(CriterionFactory.equals("name", name));
roleObjectCriteria.doNotCacheResults();
roleObjectCriteria.setOffsetAndLimit(0,1);
CmsOutcome<ContentObject> outcome = contentService.searchContentObjects(roleObjectCriteria, ResourceRepresentationType.CONTENT_OBJECT_LIST);
if (outcome == null || outcome.getCount() == 0){
throw new CmsNoSuchRoleException(name);
}
if (throwExcpetionIfMoreThanOneFound && outcome.getCount() >1){
throw new CmsNoSuchRoleException("Found more than one roles with name "+ name);
}
return outcome.getResults().get(0);
}
@Override
public Person retrieveUser(String username) throws CmsNoSuchUserException{
try{
ContentObject personObject = retrieveUniquePersonObjectForUsername(username);
if (personObject == null)
{
throw new CmsNoSuchUserException();
}
return createPersonFromContentObject(personObject);
}
catch(CmsNoSuchUserException e){
throw e;
}
catch(Exception e){
throw new CmsException("Problem when loading person for username "+username, e);
}
}
private CmsPerson createPersonFromContentObject(
ContentObject personObject) {
CmsPerson person = new CmsPerson();
BooleanProperty enabledProperty = (BooleanProperty) personObject.getCmsProperty("personAuthentication.authenticationDataEnabled");
person.setEnabled(enabledProperty != null && enabledProperty.hasValues() && BooleanUtils.isTrue(enabledProperty.getSimpleTypeValue()));
StringProperty userNameProperty = (StringProperty) personObject.getCmsProperty("personAuthentication.username");
if (userNameProperty != null && userNameProperty.hasValues()){
person.setUsername(userNameProperty.getSimpleTypeValue());
}
StringProperty familyNameProperty = (StringProperty) personObject.getCmsProperty("name.familyName");
if (familyNameProperty != null && familyNameProperty.hasValues()){
person.setFamilyName(familyNameProperty.getSimpleTypeValue());
}
StringProperty fatherNameProperty = (StringProperty) personObject.getCmsProperty("name.fatherName");
if (fatherNameProperty != null && fatherNameProperty.hasValues()){
person.setFatherName(fatherNameProperty.getSimpleTypeValue());
}
StringProperty givenNameProperty = (StringProperty) personObject.getCmsProperty("name.givenName");
if (givenNameProperty != null && givenNameProperty.hasValues()){
person.setFirstName(givenNameProperty.getSimpleTypeValue());
}
StringProperty displayNameProperty = (StringProperty) personObject.getCmsProperty("displayName");
if (displayNameProperty != null && displayNameProperty.hasValues()){
person.setDisplayName(displayNameProperty.getSimpleTypeValue());
}
person.setUserid(personObject.getId());
return person;
}
@Override
public void updateUser(Person user) throws CmsNoSuchUserException{
if (user == null || StringUtils.isBlank(user.getUsername())){
throw new CmsException("Invalid person. No username provided");
}
ContentObject personObject = retrieveUniquePersonObjectForUsername(user.getUsername());
if (personObject == null){
throw new CmsNoSuchUserException(user.getUsername());
}
((StringProperty) personObject.getCmsProperty("name.familyName")).setSimpleTypeValue(user.getFamilyName());
((StringProperty) personObject.getCmsProperty("name.fatherName")).setSimpleTypeValue(user.getFatherName());
((StringProperty) personObject.getCmsProperty("name.givenName")).setSimpleTypeValue(user.getFirstName());
contentService.save(personObject, false, true, null);
}
@Override
public List<Person> listUsersGrantedForRole(String role) throws CmsNoSuchRoleException{
if (StringUtils.isBlank(role)){
return new ArrayList<Person>();
}
try{
ContentObject roleObject = retrieveRole(role, true);
if (roleObject == null){
return new ArrayList<Person>();
}
ContentObjectCriteria contentObjectCriteria = CmsCriteriaFactory.newContentObjectCriteria("personType");
contentObjectCriteria.addCriterion(CriterionFactory.equals("personAuthorization.role", roleObject.getId()));
contentObjectCriteria.doNotCacheResults();
CmsOutcome<ContentObject> outcome = contentService.searchContentObjects(contentObjectCriteria, ResourceRepresentationType.CONTENT_OBJECT_LIST);
List<Person> users = new ArrayList<Person>();
if (outcome != null && outcome.getCount() > 0){
for (ContentObject personObject : outcome.getResults()){
users.add(createPersonFromContentObject(personObject));
}
}
return users;
}
catch(CmsNoSuchRoleException e){
throw e;
}
catch(Exception e){
logger.warn("",e);
return new ArrayList<Person>();
}
}
@Override
public List<Person> listUsersGrantedNoRoles() {
ContentObjectCriteria contentObjectCriteria = CmsCriteriaFactory.newContentObjectCriteria("personType");
contentObjectCriteria.addCriterion(CriterionFactory.isNull("personAuthorization.role"));
contentObjectCriteria.doNotCacheResults();
CmsOutcome<ContentObject> outcome = contentService.searchContentObjects(contentObjectCriteria, ResourceRepresentationType.CONTENT_OBJECT_LIST);
List<Person> users = new ArrayList<Person>();
if (outcome != null && outcome.getCount() > 0){
for (ContentObject personObject : outcome.getResults()){
users.add(createPersonFromContentObject(personObject));
}
}
return users;
}
@Override
public List<Person> findUsers(String filter) {
if (StringUtils.isBlank(filter)){
return new ArrayList<Person>();
}
ContentObjectCriteria contentObjectCriteria = CmsCriteriaFactory.newContentObjectCriteria("personType");
contentObjectCriteria.addFullTextSearchCriterion(filter+"*");
contentObjectCriteria.doNotCacheResults();
CmsOutcome<ContentObject> outcome = contentService.searchContentObjects(contentObjectCriteria, ResourceRepresentationType.CONTENT_OBJECT_LIST);
List<Person> users = new ArrayList<Person>();
if (outcome != null && outcome.getCount() > 0){
for (ContentObject personObject : outcome.getResults()){
users.add(createPersonFromContentObject(personObject));
}
}
return users;
}
@Override
public List<String> listRoles(String filter) {
if (StringUtils.isBlank(filter)){
return new ArrayList<String>();
}
ContentObjectCriteria contentObjectCriteria = CmsCriteriaFactory.newContentObjectCriteria("roleObject");
contentObjectCriteria.addFullTextSearchCriterion(filter+"*");
contentObjectCriteria.doNotCacheResults();
CmsOutcome<ContentObject> outcome = contentService.searchContentObjects(contentObjectCriteria, ResourceRepresentationType.CONTENT_OBJECT_LIST);
List<String> users = new ArrayList<String>();
if (outcome != null && outcome.getCount() > 0){
for (ContentObject roleObject : outcome.getResults()){
CmsProperty<?, ?> nameProperty = roleObject.getCmsProperty("name");
if (nameProperty != null && nameProperty instanceof StringProperty){
users.add(((StringProperty)nameProperty).getSimpleTypeValue());
}
}
}
return users;
}
public String retrieveRoleDisplayName(String role, String language) {
ContentObject roleObject = retrieveRole(role, false);
StringProperty titleProperty = (StringProperty)roleObject.getCmsProperty("profile.title");
if (titleProperty != null && titleProperty.hasValues()){
return titleProperty.getSimpleTypeValue();
}
return role;
}
private String retrieveActiveRepositoryId(){
String activeRepositoryId = IdentityStoreContextHolder.getActiveRepositoryId();
if (activeRepositoryId == null){
return AstroboaClientContextHolder.getActiveRepositoryId();
}
return activeRepositoryId;
}
}