|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object com.atlassian.crowd.directory.DelegatedAuthenticationDirectory
public class DelegatedAuthenticationDirectory
This implementation of a RemoteDirectory
provides delegated
authentication to an underlying remote LDAP implementation.
In essence this means that a User's groups and roles are managed
internally to Crowd and only authentication is delegated to the
LDAP directory.
Users, group and memberships exist in an internal directory and all
query and mutation operations execute on the internal directory.
For a user to successfully authenticate, they must exist in LDAP
and must authenticate against LDAP. Passwords are not stored
internally.
It is possible to optionally allow the delegated authentication
directory to automatically create the user in the internal portion
of this directory, once they successfully authenticate against LDAP.
The initial user details, in this case, will be obtained from LDAP.
These details will never be updated automatically from LDAP again,
unless of course the user is deleted internally and then
re-authenticates. This is Crowd 2.0's default behaviour.
If this option is not enabled, then users must always be manually
created in this directory, before they can authenticate against LDAP.
In this scenario, the user details will never be retrieved from LDAP.
This is OSUsers default LDAP behaviour.
Field Summary | |
---|---|
static java.lang.String |
ATTRIBUTE_CREATE_USER_ON_AUTH
|
static java.lang.String |
ATTRIBUTE_LDAP_DIRECTORY_CLASS
|
Constructor Summary | |
---|---|
DelegatedAuthenticationDirectory(RemoteDirectory ldapDirectory,
RemoteDirectory internalDirectory,
com.atlassian.event.api.EventPublisher eventPublisher,
DirectoryDao directoryDao)
|
Method Summary | ||
---|---|---|
Group |
addGroup(GroupTemplate group)
Adds a group to the directory store. |
|
void |
addGroupToGroup(java.lang.String childGroup,
java.lang.String parentGroup)
Adds a group as a member of a parent group. |
|
User |
addUser(UserTemplate user,
PasswordCredential credential)
Adds a user to the directory store. |
|
void |
addUserToGroup(java.lang.String username,
java.lang.String groupName)
Adds a user as a member of a group. |
|
User |
authenticate(java.lang.String name,
PasswordCredential credential)
Authenticates a user with the directory store. |
|
Group |
findGroupByName(java.lang.String name)
Finds the group that matches the supplied name . |
|
GroupWithAttributes |
findGroupWithAttributesByName(java.lang.String name)
Finds the group that matches the supplied name . |
|
User |
findUserByName(java.lang.String name)
Finds the user that matches the supplied name . |
|
UserWithAttributes |
findUserWithAttributesByName(java.lang.String name)
Finds the user that matches the supplied name . |
|
java.lang.String |
getDescriptiveName()
Returns a descriptive name for the type of directory. |
|
long |
getDirectoryId()
Gets the internal unique directoryId of the directory store. |
|
java.util.Set<java.lang.String> |
getKeys()
Gets all the keys of the attributes. |
|
java.lang.String |
getValue(java.lang.String key)
Returns the value associated with the given key, returns null if there is no value,
or throws an exception if there is more than one value. |
|
java.util.Set<java.lang.String> |
getValues(java.lang.String key)
Get all the values associated with a given key. |
|
boolean |
isEmpty()
|
|
boolean |
isGroupDirectGroupMember(java.lang.String childGroup,
java.lang.String parentGroup)
Determines if a group is a direct member of another group. |
|
boolean |
isRolesDisabled()
Expose whether the directory has roles disabled. |
|
boolean |
isUserDirectGroupMember(java.lang.String username,
java.lang.String groupName)
Determines if a user is a direct member of a group. |
|
void |
removeGroup(java.lang.String name)
Removes the group that matches the supplied name . |
|
void |
removeGroupAttributes(java.lang.String groupName,
java.lang.String attributeName)
Removes all the values for a single attribute key for a group. |
|
void |
removeGroupFromGroup(java.lang.String childGroup,
java.lang.String parentGroup)
Removes a group as a member of a parent group. |
|
void |
removeUser(java.lang.String name)
Removes the user that matches the supplied name . |
|
void |
removeUserAttributes(java.lang.String username,
java.lang.String attributeName)
Removes all the values for a single attribute key for a user. |
|
void |
removeUserFromGroup(java.lang.String username,
java.lang.String groupName)
Removes a user as a member of a group. |
|
Group |
renameGroup(java.lang.String oldName,
java.lang.String newName)
Renames a group . |
|
User |
renameUser(java.lang.String oldName,
java.lang.String newName)
Renames a user . |
|
|
searchGroupRelationships(MembershipQuery<T> query)
Searches for membership information. |
|
|
searchGroups(EntityQuery<T> query)
Searches for groups that match the supplied query criteria. |
|
|
searchUsers(EntityQuery<T> query)
Searches for users that match the supplied query criteria. |
|
void |
setAttributes(java.util.Map<java.lang.String,java.lang.String> attributes)
When a directory store is loaded, the attributes map will be set by the Crowd framework. |
|
void |
setDirectoryId(long directoryId)
When a directory store is loaded, the directoryId will be set by the
crowd framework. |
|
void |
storeGroupAttributes(java.lang.String groupName,
java.util.Map<java.lang.String,java.util.Set<java.lang.String>> attributes)
Adds or updates a group's attributes with the new Map of attribute values in the directory specified by the passed in directoryId . |
|
void |
storeUserAttributes(java.lang.String username,
java.util.Map<java.lang.String,java.util.Set<java.lang.String>> attributes)
Adds or updates a user's attributes with the new Map of attribute values in the directory specified by the passed in directoryId . |
|
boolean |
supportsInactiveAccounts()
Return true if this directory supports inactive accounts. |
|
boolean |
supportsNestedGroups()
Allows us to only display nested-group related UI for directories that support it. |
|
void |
testConnection()
Test if a connection to the directory server can be established. |
|
java.util.List<java.lang.String> |
testUserSearch()
Tests a blank principal search against the underlying LDAP directory. |
|
Group |
updateGroup(GroupTemplate group)
Updates the group . |
|
User |
updateUser(UserTemplate user)
Updates the user . |
|
void |
updateUserCredential(java.lang.String username,
PasswordCredential credential)
Updates the password for a user . |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
public static final java.lang.String ATTRIBUTE_CREATE_USER_ON_AUTH
public static final java.lang.String ATTRIBUTE_LDAP_DIRECTORY_CLASS
Constructor Detail |
---|
public DelegatedAuthenticationDirectory(RemoteDirectory ldapDirectory, RemoteDirectory internalDirectory, com.atlassian.event.api.EventPublisher eventPublisher, DirectoryDao directoryDao)
Method Detail |
---|
public long getDirectoryId()
RemoteDirectory
directoryId
of the directory store.
getDirectoryId
in interface RemoteDirectory
directoryId
.public void setDirectoryId(long directoryId)
RemoteDirectory
directoryId
will be set by the
crowd framework.
setDirectoryId
in interface RemoteDirectory
directoryId
- The unique directoryId
of the DirectoryImpl
stored in the database.public java.lang.String getDescriptiveName()
RemoteDirectory
getDescriptiveName
in interface RemoteDirectory
public void setAttributes(java.util.Map<java.lang.String,java.lang.String> attributes)
RemoteDirectory
setAttributes
in interface RemoteDirectory
attributes
- attributes map.public User findUserByName(java.lang.String name) throws UserNotFoundException, OperationFailedException
RemoteDirectory
user
that matches the supplied name
.
findUserByName
in interface RemoteDirectory
name
- the name of the user (username).
UserNotFoundException
- a user with the supplied name does not exist.
OperationFailedException
- underlying directory implementation failed to execute the operation.public UserWithAttributes findUserWithAttributesByName(java.lang.String name) throws UserNotFoundException, OperationFailedException
RemoteDirectory
user
that matches the supplied name
.
findUserWithAttributesByName
in interface RemoteDirectory
name
- the name of the user (username).
UserNotFoundException
- a user with the supplied name does not exist.
OperationFailedException
- underlying directory implementation failed to execute the operation.public User authenticate(java.lang.String name, PasswordCredential credential) throws UserNotFoundException, InactiveAccountException, InvalidAuthenticationException, ExpiredCredentialException, OperationFailedException
RemoteDirectory
user
with the directory store.
authenticate
in interface RemoteDirectory
name
- The name of the user (username).credential
- The supplied credentials (password).
UserNotFoundException
- The user wth the supplied name does not exist.
InactiveAccountException
- The supplied user is inactive.
InvalidAuthenticationException
- Authentication with the provided credentials failed.
ExpiredCredentialException
- The user's credentials have expired. The user must change their credentials in order to successfully authenticate.
OperationFailedException
- underlying directory implementation failed to execute the operation.public User addUser(UserTemplate user, PasswordCredential credential) throws InvalidUserException, UserNotFoundException, InvalidCredentialException, OperationFailedException
RemoteDirectory
user
to the directory store.
addUser
in interface RemoteDirectory
user
- template of the user to add.credential
- password. May be null, since JIRA creates a user in two steps (user THEN password)
InvalidUserException
- The supplied user is invalid.
UserNotFoundException
- The user could not be looked up after creation
InvalidCredentialException
- The supplied credential is invalid.
OperationFailedException
- underlying directory implementation failed to execute the operation.public User updateUser(UserTemplate user) throws InvalidUserException, UserNotFoundException, OperationFailedException
RemoteDirectory
user
.
updateUser
in interface RemoteDirectory
user
- The user to update.
InvalidUserException
- the supplied user is invalid.
UserNotFoundException
- the user does not exist in the directory store.
OperationFailedException
- underlying directory implementation failed to execute the operation.public void updateUserCredential(java.lang.String username, PasswordCredential credential) throws UserNotFoundException, InvalidCredentialException, OperationFailedException
RemoteDirectory
password
for a user
.
updateUserCredential
in interface RemoteDirectory
username
- The name of the user (username).credential
- The new credential (password).
UserNotFoundException
- The user does not exist.
InvalidCredentialException
- The supplied credential is invalid.
OperationFailedException
- underlying directory implementation failed to execute the operation.public User renameUser(java.lang.String oldName, java.lang.String newName) throws UserNotFoundException, InvalidUserException
RemoteDirectory
user
.
renameUser
in interface RemoteDirectory
oldName
- name of existing user.newName
- desired name of user.
UserNotFoundException
- if the user with the existing name does not exist.
InvalidUserException
- if the new username is invalid or already exists in the directory.public void storeUserAttributes(java.lang.String username, java.util.Map<java.lang.String,java.util.Set<java.lang.String>> attributes) throws UserNotFoundException, OperationFailedException
RemoteDirectory
directoryId
.
The attributes map represents new or updated attributes and does not replace existing attributes unless the key of an attribute
matches the key of an existing
Attributes with values of empty sets are not added (these attributes are effectively removed).
storeUserAttributes
in interface RemoteDirectory
username
- name of user to update.attributes
- new or updated attributes (attributes that don't need changing should not appear in this Map).
UserNotFoundException
- user with supplied username does not exist.
OperationFailedException
- underlying directory implementation failed to execute the operation.public void removeUserAttributes(java.lang.String username, java.lang.String attributeName) throws UserNotFoundException, OperationFailedException
RemoteDirectory
removeUserAttributes
in interface RemoteDirectory
username
- name of the user to update.attributeName
- name of attribute to remove.
UserNotFoundException
- user with supplied username does not exist.
OperationFailedException
- underlying directory implementation failed to execute the operation.public void removeUser(java.lang.String name) throws UserNotFoundException, OperationFailedException
RemoteDirectory
user
that matches the supplied name
.
removeUser
in interface RemoteDirectory
name
- The name of the user (username).
UserNotFoundException
- The user does not exist.
OperationFailedException
- underlying directory implementation failed to execute the operation.public <T> java.util.List<T> searchUsers(EntityQuery<T> query) throws OperationFailedException
RemoteDirectory
users
that match the supplied query criteria.
searchUsers
in interface RemoteDirectory
query
- EntityQuery for Entity.USER.
List<User
>
or List<String
>
of users/usernames
matching the search criteria. An empty List
will be returned
if no users matching the criteria are found.
OperationFailedException
- underlying directory implementation failed to execute the operation.public Group findGroupByName(java.lang.String name) throws GroupNotFoundException, OperationFailedException
RemoteDirectory
group
that matches the supplied name
.
findGroupByName
in interface RemoteDirectory
name
- the name of the group.
GroupNotFoundException
- a group with the supplied name does not exist.
OperationFailedException
- underlying directory implementation failed to execute the operation.public GroupWithAttributes findGroupWithAttributesByName(java.lang.String name) throws GroupNotFoundException, OperationFailedException
RemoteDirectory
group
that matches the supplied name
.
findGroupWithAttributesByName
in interface RemoteDirectory
name
- the name of the group.
GroupNotFoundException
- a group with the supplied name does not exist.
OperationFailedException
- underlying directory implementation failed to execute the operation.public Group addGroup(GroupTemplate group) throws InvalidGroupException, GroupNotFoundException, OperationFailedException
RemoteDirectory
group
to the directory store.
addGroup
in interface RemoteDirectory
group
- template of the group to add.
InvalidGroupException
- The supplied group is invalid.
GroupNotFoundException
- The group could not be looked up after creation
OperationFailedException
- underlying directory implementation failed to execute the operation.public Group updateGroup(GroupTemplate group) throws InvalidGroupException, GroupNotFoundException, OperationFailedException
RemoteDirectory
group
.
updateGroup
in interface RemoteDirectory
group
- The group to update.
InvalidGroupException
- the supplied group is invalid.
GroupNotFoundException
- the group does not exist in the directory store.
OperationFailedException
- underlying directory implementation failed to execute the operation.public Group renameGroup(java.lang.String oldName, java.lang.String newName) throws GroupNotFoundException, InvalidGroupException
RemoteDirectory
group
.
renameGroup
in interface RemoteDirectory
oldName
- name of existing group.newName
- desired name of group.
GroupNotFoundException
- if the group with the existing name does not exist.
InvalidGroupException
- if the new groupname is invalid or already exists in the directory.public void storeGroupAttributes(java.lang.String groupName, java.util.Map<java.lang.String,java.util.Set<java.lang.String>> attributes) throws GroupNotFoundException, OperationFailedException
RemoteDirectory
directoryId
.
The attributes map represents new or updated attributes and does not replace existing attributes unless the key of an attribute
matches the key of an existing
Attributes with values of empty sets are not added (these attributes are effectively removed).
storeGroupAttributes
in interface RemoteDirectory
groupName
- name of group to update.attributes
- new or updated attributes (attributes that don't need changing should not appear in this Map).
GroupNotFoundException
- group with supplied groupName does not exist.
OperationFailedException
- underlying directory implementation failed to execute the operation.public void removeGroupAttributes(java.lang.String groupName, java.lang.String attributeName) throws GroupNotFoundException, OperationFailedException
RemoteDirectory
removeGroupAttributes
in interface RemoteDirectory
groupName
- name of the group to update.attributeName
- name of attribute to remove.
GroupNotFoundException
- group with supplied groupName does not exist.
OperationFailedException
- underlying directory implementation failed to execute the operation.public void removeGroup(java.lang.String name) throws GroupNotFoundException, OperationFailedException
RemoteDirectory
group
that matches the supplied name
.
removeGroup
in interface RemoteDirectory
name
- The name of the group.
GroupNotFoundException
- The group does not exist.
OperationFailedException
- underlying directory implementation failed to execute the operation.public <T> java.util.List<T> searchGroups(EntityQuery<T> query) throws OperationFailedException
RemoteDirectory
groups
that match the supplied query criteria.
searchGroups
in interface RemoteDirectory
query
- EntityQuery for Entity.GROUP.
List
or List
of groups/groupnames
matching the search criteria. An empty List
will be returned
if no groups matching the criteria are found.
OperationFailedException
- underlying directory implementation failed to execute the operation.public boolean isUserDirectGroupMember(java.lang.String username, java.lang.String groupName) throws OperationFailedException
RemoteDirectory
isUserDirectGroupMember
in interface RemoteDirectory
username
- name of user.groupName
- name of group.
true
iff the user is a direct member of the group.
OperationFailedException
- underlying directory implementation failed to execute the operation.public boolean isGroupDirectGroupMember(java.lang.String childGroup, java.lang.String parentGroup) throws OperationFailedException
RemoteDirectory
isGroupDirectGroupMember
in interface RemoteDirectory
childGroup
- name of child group.parentGroup
- name of parent group.
true
iff the childGroup is a direct member of the parentGroup.
OperationFailedException
- underlying directory implementation failed to execute the operation.public void addUserToGroup(java.lang.String username, java.lang.String groupName) throws GroupNotFoundException, UserNotFoundException, OperationFailedException
RemoteDirectory
childGroup
will
appear as members of parentGroup
to querying applications.
addUserToGroup
in interface RemoteDirectory
username
- The user that will become a member of groupName
groupName
- The group that will gain a new member.
GroupNotFoundException
- If the group cannot be found.
UserNotFoundException
- If the user cannot be found.
OperationFailedException
- underlying directory implementation failed to execute the operation.public void addGroupToGroup(java.lang.String childGroup, java.lang.String parentGroup) throws GroupNotFoundException, InvalidMembershipException, OperationFailedException
RemoteDirectory
addGroupToGroup
in interface RemoteDirectory
childGroup
- The group that will become a member of parentGroup
parentGroup
- The group that will gain a new member
GroupNotFoundException
- One or both of the groups cannot be found.
InvalidMembershipException
- if the childGroup and parentGroup exist but are of different GroupTypes.
OperationFailedException
- underlying directory implementation failed to execute the operation.public void removeUserFromGroup(java.lang.String username, java.lang.String groupName) throws GroupNotFoundException, UserNotFoundException, MembershipNotFoundException, OperationFailedException
RemoteDirectory
removeUserFromGroup
in interface RemoteDirectory
username
- The user that will be removed from parentGroup
groupName
- The group that will lose the member.
GroupNotFoundException
- If the group cannot be found.
UserNotFoundException
- If the user cannot be found.
MembershipNotFoundException
- if the user is not a direct member of the group.
OperationFailedException
- underlying directory implementation failed to execute the operation.public void removeGroupFromGroup(java.lang.String childGroup, java.lang.String parentGroup) throws GroupNotFoundException, InvalidMembershipException, MembershipNotFoundException, OperationFailedException
RemoteDirectory
removeGroupFromGroup
in interface RemoteDirectory
childGroup
- The group that will be removed from parentGroup
parentGroup
- The group that will lose the member.
GroupNotFoundException
- One or both of the groups cannot be found.
InvalidMembershipException
- if the childGroup and parentGroup exist but are of different GroupTypes.
MembershipNotFoundException
- if the childGroup is not a direct member of the parentGroup.
OperationFailedException
- underlying directory implementation failed to execute the operation.public <T> java.util.List<T> searchGroupRelationships(MembershipQuery<T> query) throws OperationFailedException
RemoteDirectory
searchGroupRelationships
in interface RemoteDirectory
query
- query for memberships.
OperationFailedException
- underlying directory implementation failed to execute the operation.public void testConnection() throws OperationFailedException
RemoteDirectory
testConnection
in interface RemoteDirectory
OperationFailedException
- underlying directory implementation failed to execute the operation.public boolean supportsInactiveAccounts()
RemoteDirectory
supportsInactiveAccounts
in interface RemoteDirectory
public boolean supportsNestedGroups()
RemoteDirectory
supportsNestedGroups
in interface RemoteDirectory
public boolean isRolesDisabled()
RemoteDirectory
isRolesDisabled
in interface RemoteDirectory
public java.util.Set<java.lang.String> getValues(java.lang.String key)
Attributes
getValues
in interface Attributes
key
- the key to retrieve the values for
public java.lang.String getValue(java.lang.String key) throws DuplicateAttributeValueException
Attributes
null
if there is no value,
or throws an exception if there is more than one value.
getValue
in interface Attributes
key
- the key to retrieve the value for
null
if there is no value
DuplicateAttributeValueException
- if the attribute has more than one value stored against itpublic java.util.Set<java.lang.String> getKeys()
Attributes
getKeys
in interface Attributes
public boolean isEmpty()
isEmpty
in interface Attributes
true
if there are no attributespublic java.util.List<java.lang.String> testUserSearch() throws OperationFailedException
DirectoryInstantiationException
- directory could not be loaded.
OperationFailedException
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |