@Override protected void doPopulateIdentityInstance(Object toIdentity, Agent fromUser, JPAIdentityStore store) { store.setModelProperty(toIdentity, PROPERTY_IDENTITY_ID, fromUser.getId(), true); }
private boolean contains(List<Agent> result, String userId) { for (Agent resultAgent : result) { if (resultAgent.getId().equals(userId)) { return true; } } return false; } }
@Override public <T extends CredentialStorage> List<T> retrieveCredentials(Agent agent, Class<T> storageClass) { ArrayList<T> storedCredentials = new ArrayList<T>(); Map<String, List<FileCredentialStorage>> agentCredentials = getConfig().getCredentials().get(agent.getId()); if (agentCredentials == null) { agentCredentials = new HashMap<String, List<FileCredentialStorage>>(); } List<FileCredentialStorage> credentials = agentCredentials.get(storageClass.getName()); if (credentials != null) { for (FileCredentialStorage fileCredentialStorage : credentials) { storedCredentials.add(convertToCredentialStorage(storageClass, fileCredentialStorage)); } } return storedCredentials; }
@Override public GroupRole getMembership(IdentityType member, Group group, Role role) { for (GroupRole membership : new ArrayList<GroupRole>(getConfig().getMemberships())) { Agent providedMember = (Agent) member; Agent membershipMember = (Agent) membership.getMember(); if (membershipMember == null || providedMember == null || !membershipMember.getId().equals(providedMember.getId())) { continue; } if (hasGroupRole(membership, group, role)) { return membership; } } return null; }
@Override public <T extends CredentialStorage> T retrieveCurrentCredential(Agent agent, Class<T> storageClass) { Map<String, List<FileCredentialStorage>> agentCredentials = getConfig().getCredentials().get(agent.getId()); if (agentCredentials == null) { agentCredentials = new HashMap<String, List<FileCredentialStorage>>(); } List<FileCredentialStorage> credentials = agentCredentials.get(storageClass.getName()); if (credentials != null) { for (FileCredentialStorage fileCredentialStorage : credentials) { if (isCurrentCredential(fileCredentialStorage)) { return convertToCredentialStorage(storageClass, fileCredentialStorage); } } } return null; }
@Override public void removeMembership(IdentityType member, Group group, Role role) { for (GroupRole membership : new ArrayList<GroupRole>(getConfig().getMemberships())) { Agent providedMember = (Agent) member; Agent membershipMember = (Agent) membership.getMember(); if (membershipMember == null || providedMember == null || !membershipMember.getId().equals(providedMember.getId())) { continue; } if (hasGroupRole(membership, group, role)) { getConfig().getMemberships().remove(membership); } } flushMemberships(); }
private Agent removeAgent(Agent user) { getConfig().getUsers().remove(user.getId()); for (GroupRole membership : new ArrayList<GroupRole>(getConfig().getMemberships())) { IdentityType member = membership.getMember(); if (IDMUtil.isAgentType(member.getClass())) { Agent userMember = (Agent) member; if (userMember.getId().equals(user.getId())) { getConfig().getMemberships().remove(membership); } } } flushUsers(); flushMemberships(); return user; }
private Agent updateAgent(Agent updatedAgent, Agent storedAgent) { if (storedAgent != updatedAgent) { updateCommonProperties(updatedAgent, storedAgent); } getConfig().getUsers().put(storedAgent.getId(), storedAgent); flushUsers(); return updatedAgent; }
/** * <p> * Resolves the value of the identifier for the given {@link IdentityType}. * </p> * * @param identityType * @return */ private String getIdentifierValue(IdentityType identityType) { String value = null; if (IDMUtil.isUserType(identityType.getClass())) { value = ((User) identityType).getId(); } else if (IDMUtil.isAgentType(identityType.getClass())) { value = ((Agent) identityType).getId(); } else if (IDMUtil.isRoleType(identityType.getClass())) { value = ((Role) identityType).getName(); } else if (IDMUtil.isGroupType(identityType.getClass())) { value = ((Group) identityType).getName(); } else if (IDMUtil.isRelationshipType(identityType.getClass())) { value = ((Relationship) identityType).getName(); } return value; }
@Override public void update(Agent agent, Object credential, IdentityStore<?> identityStore, Date effectiveDate, Date expiryDate) { checkIdentityStoreInstance(identityStore); if (!Password.class.isInstance(credential)) { throw new IllegalArgumentException("Credential class [" + credential.getClass().getName() + "] not supported by this handler."); } Password password = (Password) credential; LDAPIdentityStore ldapIdentityStore = (LDAPIdentityStore) identityStore; LDAPUser ldapuser = (LDAPUser) ldapIdentityStore.getUser(agent.getId()); if (ldapIdentityStore.getConfig().isActiveDirectory()) { updateADPassword(ldapuser, new String(password.getValue()), ldapIdentityStore); } else { ModificationItem[] mods = new ModificationItem[1]; try { Attribute mod0 = new BasicAttribute(USER_PASSWORD_ATTRIBUTE, new String(password.getValue())); mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, mod0); ldapIdentityStore.getLdapManager().modifyAttribute(ldapuser.getDN(), mod0); } catch (Exception e) { } } }
@Override public void validate(Credentials credentials, IdentityStore<?> identityStore) { checkIdentityStoreInstance(identityStore); if (!UsernamePasswordCredentials.class.isInstance(credentials)) { throw new IllegalArgumentException("Credentials class [" + credentials.getClass().getName() + "] not supported by this handler."); } UsernamePasswordCredentials usernamePassword = (UsernamePasswordCredentials) credentials; usernamePassword.setStatus(Status.INVALID); Agent agent = identityStore.getAgent(usernamePassword.getUsername()); // If the user for the provided username cannot be found we fail validation if (agent != null) { LDAPIdentityStore ldapIdentityStore = (LDAPIdentityStore) identityStore; LDAPUser ldapUser = (LDAPUser) ldapIdentityStore.getUser(agent.getId()); char[] password = usernamePassword.getPassword().getValue(); boolean isValid = ldapIdentityStore.getLdapManager().authenticate(ldapUser.getDN(), new String(password)); if (isValid) { usernamePassword.setStatus(Status.VALID); } } }
/** * <p> * Loads from the store an already stored agent. * </p> * * @throws Exception */ @Test public void testGet() throws Exception { Agent storedAgent = getIdentityType(true); IdentityManager identityManager = getIdentityManager(); storedAgent = identityManager.getAgent(storedAgent.getId()); assertNotNull(storedAgent); assertEquals("someAgent", storedAgent.getId()); }
@Override public GroupRole getMembership(IdentityType member, Group group, Role role) { GroupRole groupRole = null; List<?> resultList = Collections.emptyList(); DefaultIdentityQuery<IdentityType> defaultIdentityQuery = new DefaultIdentityQuery(member.getClass(), this); defaultIdentityQuery.setParameter(IdentityType.HAS_GROUP_ROLE, new SimpleGroupRole(member, role, group)); resultList = defaultIdentityQuery.getResultList(); if (!resultList.isEmpty()) { Agent storedAgent = getAgent(((Agent) member).getId()); Role storedRole = null; Group storedGroup = null; if (role != null) { storedRole = getRole(role.getName()); } if (group != null) { storedGroup = getGroup(group.getName()); } groupRole = new SimpleGroupRole(storedAgent, storedRole, storedGroup); } return groupRole; }
/** * <p> * Creates a new {@link Agent} instance using the API. This method also checks if the user was properly created by retrieving * his information from the store. * </p> * * @throws Exception */ @Test public void testCreate() throws Exception { Agent newAgent = loadOrCreateAgent("someAgent", true); IdentityManager identityManager = getIdentityManager(); identityManager.update(newAgent); // let's retrieve the user information and see if they are properly stored Agent storedAgent = identityManager.getAgent(newAgent.getId()); assertNotNull(storedAgent); assertEquals(newAgent.getId(), storedAgent.getId()); assertTrue(storedAgent.isEnabled()); assertTrue(new Date().compareTo(storedAgent.getCreatedDate()) > 0); }
/** * <p> * Find an {@link Agent} by id. * </p> * * @throws Exception */ @Test public void testFindById() throws Exception { loadOrCreateAgent("someAgent", true); IdentityManager identityManager = getIdentityManager(); IdentityQuery<Agent> query = identityManager.<Agent> createQuery(Agent.class); query.setParameter(Agent.ID, "someAgent"); List<Agent> result = query.getResultList(); assertFalse(result.isEmpty()); assertTrue(result.size() == 1); assertEquals("someAgent", result.get(0).getId()); }
/** * <p> * Find an {@link Agent} by his associated {@link Group}. * </p> * * @throws Exception */ @Test public void testFindBySingleGroup() throws Exception { Agent user = loadOrCreateAgent("admin", true); Group administratorGroup = loadOrCreateGroup("Administrators", null, true); IdentityManager identityManager = getIdentityManager(); IdentityQuery<Agent> query = identityManager.createQuery(Agent.class); query.setParameter(Agent.MEMBER_OF, new String[] { "Administrators" }); List<Agent> result = query.getResultList(); assertTrue(result.isEmpty()); identityManager.addToGroup(user, administratorGroup); query = identityManager.createQuery(Agent.class); query.setParameter(Agent.MEMBER_OF, new String[] { "Administrators" }); result = query.getResultList(); assertFalse(result.isEmpty()); assertEquals(user.getId(), result.get(0).getId()); }
/** * <p> * Find an {@link Agent} by his associated {@link Role}. * </p> * * @throws Exception */ @Test public void testFindBySingleRole() throws Exception { Agent user = loadOrCreateAgent("admin", true); Role administratorRole = loadOrCreateRole("Administrators", true); IdentityManager identityManager = getIdentityManager(); IdentityQuery<Agent> query = identityManager.createQuery(Agent.class); query.setParameter(Agent.HAS_ROLE, new String[] { "Administrators" }); List<Agent> result = query.getResultList(); assertTrue(result.isEmpty()); identityManager.grantRole(user, administratorRole); query = identityManager.createQuery(Agent.class); query.setParameter(Agent.HAS_ROLE, new String[] { "Administrators" }); result = query.getResultList(); assertFalse(result.isEmpty()); assertEquals(user.getId(), result.get(0).getId()); }
/** * <p> * Updates the stored agent information. * </p> * * @throws Exception */ @Test public void testUpdate() throws Exception { Agent storedAgent = getIdentityType(true); assertNotNull(storedAgent); assertEquals("someAgent", storedAgent.getId()); IdentityManager identityManager = getIdentityManager(); storedAgent.setAttribute(new Attribute<String>("someAttribute", "1")); identityManager.update(storedAgent); // let's load again the user from the store and check for the updated information Agent updatedUser = identityManager.getAgent(storedAgent.getId()); assertNotNull(updatedUser.getAttribute("someAttribute")); assertEquals("1", updatedUser.getAttribute("someAttribute").getValue()); }
/** * <p> * Remove from the store an already stored agent. * </p> * * @throws Exception */ @Test public void testRemove() throws Exception { IdentityManager identityManager = getIdentityManager(); Agent someAgent = getIdentityType(true); Agent anotherAgent = loadOrCreateAgent("someAnotherUser", true); assertNotNull(someAgent); assertNotNull(anotherAgent); identityManager.remove(someAgent); Agent removedUserInstance = getIdentityManager().getAgent(someAgent.getId()); assertNull(removedUserInstance); anotherAgent = identityManager.getAgent(anotherAgent.getId()); assertNotNull(anotherAgent); }