Class RemoteCrowdDirectory
- All Implemented Interfaces:
RemoteDirectory
,Attributes
RemoteDirectory
that allows integration with a remote Crowd server.
This class performs all directory operations against a remote Crowd server. The remote Crowd server sees this class as an application.
-
Field Summary
Modifier and TypeFieldDescriptionstatic final String
Directory attribute key for application namestatic final String
Directory attribute key for application passwordprotected AttributeValuesHolder
static final String
Directory attribute key for the authentication method (AuthenticationMethod
).static final String
Directory attribute key for max connections.static final String
Directory attribute key for http proxy host.static final String
Directory attribute key for http proxy password.static final String
Directory attribute key for http proxy port.static final String
Directory attribute key for http proxy username.static final String
Directory attribute key for http timeout.static final String
Directory attribute key for remote Crowd server URLstatic final String
-
Constructor Summary
ConstructorDescriptionRemoteCrowdDirectory
(CrowdClientFactory crowdClientFactory) Creates a new RemoteCrowdDirectory using the given CrowdClientFactory. -
Method Summary
Modifier and TypeMethodDescriptionaddGroup
(GroupTemplate group) Adds agroup
to the directory store.void
addGroupToGroup
(String childGroup, String parentGroup) Adds a group as a member of a parent group.addUser
(UserTemplate user, PasswordCredential credential) Adds auser
to the directory store.addUser
(UserTemplateWithAttributes user, PasswordCredential credential) Adds auser
to the directory store.void
addUserToGroup
(String username, String groupName) Adds a user as a member of a group.authenticate
(String username, PasswordCredential credential) Authenticates auser
with the directory store.countDirectMembersOfGroup
(String groupName, int querySizeHint) Count the direct members of a group in the remote directory.void
Sets theUserConstants.REQUIRES_PASSWORD_CHANGE
attribute to true for all users in the directory using bulk operationsfindGroupByName
(String name) Finds thegroup
that matches the suppliedname
.Finds thegroup
that matches the suppliedname
.findUserByExternalId
(String externalId) Finds the user that matches the suppliedexternalId
.findUserByName
(String name) Finds theuser
that matches the suppliedname
.Finds theuser
that matches the suppliedname
.protected ClientProperties
Access the Crowd client used for communication with the remote Crowd directory, intended for internal reuse only.Returns a token that can be used for querying events that have happened after the token was generated.Returns a descriptive name for the type of directory.long
Gets the internal uniquedirectoryId
of the directory store.getKeys()
Gets all the keys of the attributes.Get an iterable view of the available group memberships.getNewEvents
(String eventToken) Returns an events object which contains a new eventToken and events that happened after the giveneventToken
was generated.Returns any value associated with the given key, returnsnull
if there is no value.Get all the values associated with a given key.boolean
isEmpty()
boolean
isGroupDirectGroupMember
(String childGroup, String parentGroup) Determines if a group is a direct member of another group.boolean
Expose whether the directory has roles disabled.boolean
isUserDirectGroupMember
(String username, String groupName) Determines if a user is a direct member of a group.void
removeGroup
(String groupname) Removes thegroup
that matches the suppliedname
.void
removeGroupAttributes
(String groupName, String attributeName) Removes all the values for a single attribute key for a group.void
removeGroupFromGroup
(String childGroup, String parentGroup) Removes a group as a member of a parent group.void
removeUser
(String username) Removes theuser
that matches the suppliedname
.void
removeUserAttributes
(String username, String attributeName) Removes all the values for a single attribute key for a user.void
removeUserFromGroup
(String username, String groupName) Removes a user as a member of a group.renameGroup
(String oldName, String newName) Renames agroup
.renameUser
(String oldName, String newName) Renames auser
.<T> List<T>
searchGroupRelationships
(MembershipQuery<T> query) Searches for membership information.<T> List<T>
searchGroups
(EntityQuery<T> query) Searches forgroups
that match the supplied query criteria.<T> List<T>
searchUsers
(EntityQuery<T> query) Searches forusers
that match the supplied query criteria.void
setAttributes
(Map<String, String> attributes) Called by theDirectoryInstanceLoader
after constructing an InternalDirectory.void
setDirectoryId
(long directoryId) When a directory store is loaded, thedirectoryId
will be set by the crowd framework.void
Adds or updates a group's attributes with the new Map of attribute values in the directory specified by the passed indirectoryId
.void
Adds or updates a user's attributes with the new Map of attribute values in the directory specified by the passed indirectoryId
.boolean
Remote crowd directories always support inactive accounts.boolean
Allows us to only display nested-group related UI for directories that support it.boolean
Return true if this directory supports manually expiring passwords.boolean
If this method returns true, then callingRemoteDirectory.updateUserCredential(String, PasswordCredential)
orRemoteDirectory.addUser(com.atlassian.crowd.model.user.UserTemplate, com.atlassian.crowd.embedded.api.PasswordCredential)
with aPasswordCredential
instance wherePasswordCredential.isEncryptedCredential()
returns true and the instance is not equal toPasswordCredential.NONE
will succeed; otherwise, it will fail.void
Test if a connection to the directory server can be established.updateGroup
(GroupTemplate group) Updates thegroup
.updateUser
(UserTemplate user) Updates theuser
.void
updateUserCredential
(String username, PasswordCredential credential) userAuthenticated
(String username) Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface com.atlassian.crowd.directory.RemoteDirectory
getLocallyFilteredGroupNames, getUserAvatarByName, updateUserFromRemoteDirectory
-
Field Details
-
DESCRIPTIVE_NAME
- See Also:
-
APPLICATION_NAME
Directory attribute key for application name- See Also:
-
APPLICATION_PASSWORD
Directory attribute key for application password- See Also:
-
CROWD_SERVER_URL
Directory attribute key for remote Crowd server URL- See Also:
-
AUTHENTICATION_METHOD_ATTRIBUTE
Directory attribute key for the authentication method (AuthenticationMethod
).- See Also:
-
CROWD_HTTP_TIMEOUT
Directory attribute key for http timeout.- See Also:
-
CROWD_HTTP_MAX_CONNECTIONS
Directory attribute key for max connections.- See Also:
-
CROWD_HTTP_PROXY_HOST
Directory attribute key for http proxy host.- See Also:
-
CROWD_HTTP_PROXY_PORT
Directory attribute key for http proxy port.- See Also:
-
CROWD_HTTP_PROXY_USERNAME
Directory attribute key for http proxy username.- See Also:
-
CROWD_HTTP_PROXY_PASSWORD
Directory attribute key for http proxy password.- See Also:
-
attributes
-
-
Constructor Details
-
RemoteCrowdDirectory
Creates a new RemoteCrowdDirectory using the given CrowdClientFactory.- Parameters:
crowdClientFactory
- factory for creating aCrowdClient
-
-
Method Details
-
getDirectoryId
public long getDirectoryId()Description copied from interface:RemoteDirectory
Gets the internal uniquedirectoryId
of the directory store.- Specified by:
getDirectoryId
in interfaceRemoteDirectory
- Returns:
- The
directoryId
.
-
setDirectoryId
public void setDirectoryId(long directoryId) Description copied from interface:RemoteDirectory
When a directory store is loaded, thedirectoryId
will be set by the crowd framework.- Specified by:
setDirectoryId
in interfaceRemoteDirectory
- Parameters:
directoryId
- The uniquedirectoryId
of theDirectoryImpl
stored in the database.
-
findUserByName
Description copied from interface:RemoteDirectory
Finds theuser
that matches the suppliedname
.- Specified by:
findUserByName
in interfaceRemoteDirectory
- Parameters:
name
- the name of the user (username).- Returns:
- user entity.
- Throws:
UserNotFoundException
- a user with the supplied name does not exist.OperationFailedException
- underlying directory implementation failed to execute the operation.
-
findUserWithAttributesByName
public UserWithAttributes findUserWithAttributesByName(String name) throws UserNotFoundException, OperationFailedException Description copied from interface:RemoteDirectory
Finds theuser
that matches the suppliedname
.- Specified by:
findUserWithAttributesByName
in interfaceRemoteDirectory
- Parameters:
name
- the name of the user (username).- Returns:
- user entity with attributes.
- Throws:
UserNotFoundException
- a user with the supplied name does not exist.OperationFailedException
- underlying directory implementation failed to execute the operation.
-
findUserByExternalId
public User findUserByExternalId(String externalId) throws UserNotFoundException, OperationFailedException Description copied from interface:RemoteDirectory
Finds the user that matches the suppliedexternalId
. This is an optional method that may not be implemented on all directory types. Currently it is implemented for LDAP and Internal directories but not Crowd directories.- Specified by:
findUserByExternalId
in interfaceRemoteDirectory
- Parameters:
externalId
- the externalId of the user- Returns:
- the user that matches the supplied
externalId
. - Throws:
UserNotFoundException
- a user with the supplied externalId does not exist.OperationFailedException
- underlying directory implementation failed to execute the operation.- See Also:
-
authenticate
public User authenticate(String username, PasswordCredential credential) throws UserNotFoundException, InactiveAccountException, InvalidAuthenticationException, ExpiredCredentialException, OperationFailedException Description copied from interface:RemoteDirectory
Authenticates auser
with the directory store.- Specified by:
authenticate
in interfaceRemoteDirectory
- Parameters:
username
- The name of the user (username).credential
- The supplied credentials (password).- Returns:
- The populated user if the authentication is valid.
- Throws:
UserNotFoundException
- The user with 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.
-
addUser
public User addUser(UserTemplate user, PasswordCredential credential) throws InvalidUserException, InvalidCredentialException, OperationFailedException Description copied from interface:RemoteDirectory
Adds auser
to the directory store.- Specified by:
addUser
in interfaceRemoteDirectory
- Parameters:
user
- template of the user to add.credential
- a password, orPasswordCredential.NONE
for an account that cannot login with any password- Returns:
- the added user retrieved from the underlying store.
- Throws:
InvalidUserException
- The supplied user is invalid.InvalidCredentialException
- The supplied credential is invalid.OperationFailedException
- underlying directory implementation failed to execute the operation.- See Also:
-
addUser
public UserWithAttributes addUser(UserTemplateWithAttributes user, PasswordCredential credential) throws InvalidUserException, InvalidCredentialException, OperationFailedException Description copied from interface:RemoteDirectory
Adds auser
to the directory store.- Specified by:
addUser
in interfaceRemoteDirectory
- Parameters:
user
- template of the user to add.credential
- a password, orPasswordCredential.NONE
for an account that cannot login with any password- Returns:
- the added user retrieved from the underlying store.
- Throws:
InvalidUserException
- The supplied user is invalid.InvalidCredentialException
- The supplied credential is invalid.OperationFailedException
- underlying directory implementation failed to execute the operation.- See Also:
-
expireAllPasswords
Description copied from interface:RemoteDirectory
Sets theUserConstants.REQUIRES_PASSWORD_CHANGE
attribute to true for all users in the directory using bulk operations- Specified by:
expireAllPasswords
in interfaceRemoteDirectory
- Throws:
OperationFailedException
-
updateUser
public User updateUser(UserTemplate user) throws InvalidUserException, UserNotFoundException, OperationFailedException Description copied from interface:RemoteDirectory
Updates theuser
.- Specified by:
updateUser
in interfaceRemoteDirectory
- Parameters:
user
- The user to update.- Returns:
- the updated user retrieved from the underlying store.
- Throws:
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.
-
updateUserCredential
public void updateUserCredential(String username, PasswordCredential credential) throws UserNotFoundException, InvalidCredentialException, OperationFailedException Description copied from interface:RemoteDirectory
- Specified by:
updateUserCredential
in interfaceRemoteDirectory
- Parameters:
username
- The name of the user (username).credential
- The new credential (password).- Throws:
UserNotFoundException
- The user does not exist.InvalidCredentialException
- The supplied credential is invalid.OperationFailedException
- underlying directory implementation failed to execute the operation.- See Also:
-
renameUser
public User renameUser(String oldName, String newName) throws UserNotFoundException, InvalidUserException, OperationFailedException Description copied from interface:RemoteDirectory
Renames auser
.- Specified by:
renameUser
in interfaceRemoteDirectory
- Parameters:
oldName
- name of existing user.newName
- desired name of user.- Returns:
- renamed user.
- Throws:
UserNotFoundException
- if the user with the existing name does not exist.InvalidUserException
- if the new username is invalid.OperationFailedException
- if the underlying directory implementation failed to execute the operation.
-
storeUserAttributes
public void storeUserAttributes(String username, Map<String, Set<String>> attributes) throws UserNotFoundException, OperationFailedExceptionDescription copied from interface:RemoteDirectory
Adds or updates a user's attributes with the new Map of attribute values in the directory specified by the passed indirectoryId
.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).
- Specified by:
storeUserAttributes
in interfaceRemoteDirectory
- Parameters:
username
- name of user to update.attributes
- new or updated attributes (attributes that don't need changing should not appear in this Map).- Throws:
UserNotFoundException
- user with supplied username does not exist.OperationFailedException
- underlying directory implementation failed to execute the operation.
-
removeUserAttributes
public void removeUserAttributes(String username, String attributeName) throws UserNotFoundException, OperationFailedException Description copied from interface:RemoteDirectory
Removes all the values for a single attribute key for a user. If the attribute key does not exist nothing will happen.- Specified by:
removeUserAttributes
in interfaceRemoteDirectory
- Parameters:
username
- name of the user to update.attributeName
- name of attribute to remove.- Throws:
UserNotFoundException
- user with supplied username does not exist.OperationFailedException
- underlying directory implementation failed to execute the operation.
-
removeUser
Description copied from interface:RemoteDirectory
Removes theuser
that matches the suppliedname
.- Specified by:
removeUser
in interfaceRemoteDirectory
- Parameters:
username
- The name of the user (username).- Throws:
UserNotFoundException
- The user does not exist.OperationFailedException
- underlying directory implementation failed to execute the operation.
-
searchUsers
Description copied from interface:RemoteDirectory
Searches forusers
that match the supplied query criteria.The users will be returned in a stable order including across pagination boundaries (excluding modification).
- Specified by:
searchUsers
in interfaceRemoteDirectory
- Parameters:
query
- EntityQuery for Entity.USER.- Returns:
List<
orUser
>List<
of users/usernames matching the search criteria. An emptyString
>List
will be returned if no users matching the criteria are found.- Throws:
OperationFailedException
- if the underlying directory implementation failed to execute the operation
-
findGroupByName
Description copied from interface:RemoteDirectory
Finds thegroup
that matches the suppliedname
.- Specified by:
findGroupByName
in interfaceRemoteDirectory
- Parameters:
name
- the name of the group.- Returns:
- group entity.
- Throws:
GroupNotFoundException
- a group with the supplied name does not exist.OperationFailedException
- underlying directory implementation failed to execute the operation.
-
findGroupWithAttributesByName
public GroupWithAttributes findGroupWithAttributesByName(String name) throws GroupNotFoundException, OperationFailedException Description copied from interface:RemoteDirectory
Finds thegroup
that matches the suppliedname
.- Specified by:
findGroupWithAttributesByName
in interfaceRemoteDirectory
- Parameters:
name
- the name of the group.- Returns:
- group entity with attributes.
- Throws:
GroupNotFoundException
- a group with the supplied name does not exist.OperationFailedException
- underlying directory implementation failed to execute the operation.
-
addGroup
Description copied from interface:RemoteDirectory
Adds agroup
to the directory store.- Specified by:
addGroup
in interfaceRemoteDirectory
- Parameters:
group
- template of the group to add.- Returns:
- the added group retrieved from the underlying store.
- Throws:
InvalidGroupException
- The supplied group is invalid or it already exists in the directory.OperationFailedException
- underlying directory implementation failed to execute the operation.
-
updateGroup
public Group updateGroup(GroupTemplate group) throws InvalidGroupException, GroupNotFoundException, OperationFailedException Description copied from interface:RemoteDirectory
Updates thegroup
.- Specified by:
updateGroup
in interfaceRemoteDirectory
- Parameters:
group
- The group to update.- Returns:
- the updated group retrieved from the underlying store.
- Throws:
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.
-
renameGroup
public Group renameGroup(String oldName, String newName) throws GroupNotFoundException, InvalidGroupException, OperationFailedException Description copied from interface:RemoteDirectory
Renames agroup
.- Specified by:
renameGroup
in interfaceRemoteDirectory
- Parameters:
oldName
- name of existing group.newName
- desired name of group.- Returns:
- renamed group.
- Throws:
GroupNotFoundException
- if the group with the existing name does not exist.InvalidGroupException
- if the new group name is invalid or already exists in the directory.OperationFailedException
- if the underlying directory implementation failed to execute the operation.
-
storeGroupAttributes
public void storeGroupAttributes(String groupName, Map<String, Set<String>> attributes) throws GroupNotFoundException, OperationFailedExceptionDescription copied from interface:RemoteDirectory
Adds or updates a group's attributes with the new Map of attribute values in the directory specified by the passed indirectoryId
.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).
- Specified by:
storeGroupAttributes
in interfaceRemoteDirectory
- Parameters:
groupName
- name of group to update.attributes
- new or updated attributes (attributes that don't need changing should not appear in this Map).- Throws:
GroupNotFoundException
- group with supplied groupName does not exist.OperationFailedException
- underlying directory implementation failed to execute the operation.
-
removeGroupAttributes
public void removeGroupAttributes(String groupName, String attributeName) throws GroupNotFoundException, OperationFailedException Description copied from interface:RemoteDirectory
Removes all the values for a single attribute key for a group.- Specified by:
removeGroupAttributes
in interfaceRemoteDirectory
- Parameters:
groupName
- name of the group to update.attributeName
- name of attribute to remove.- Throws:
GroupNotFoundException
- group with supplied groupName does not exist.OperationFailedException
- underlying directory implementation failed to execute the operation.
-
removeGroup
Description copied from interface:RemoteDirectory
Removes thegroup
that matches the suppliedname
.- Specified by:
removeGroup
in interfaceRemoteDirectory
- Parameters:
groupname
- The name of the group.- Throws:
GroupNotFoundException
- The group does not exist.OperationFailedException
- underlying directory implementation failed to execute the operation.
-
searchGroups
Description copied from interface:RemoteDirectory
Searches forgroups
that match the supplied query criteria.The groups will be returned in a stable order including across pagination boundaries (excluding modification).
- Specified by:
searchGroups
in interfaceRemoteDirectory
- Parameters:
query
- EntityQuery for Entity.GROUP.- Returns:
List<Group>
orList<String>
of groups/groupnames matching the search criteria. An emptyList
will be returned if no groups matching the criteria are found.- Throws:
OperationFailedException
- if the underlying directory implementation failed to execute the operation
-
isUserDirectGroupMember
public boolean isUserDirectGroupMember(String username, String groupName) throws OperationFailedException Description copied from interface:RemoteDirectory
Determines if a user is a direct member of a group. The directory is NOT expected to resolve any transitive group relationships.- Specified by:
isUserDirectGroupMember
in interfaceRemoteDirectory
- Parameters:
username
- name of user.groupName
- name of group.- Returns:
true
iff the user is a direct member of the group.- Throws:
OperationFailedException
- underlying directory implementation failed to execute the operation.
-
isGroupDirectGroupMember
public boolean isGroupDirectGroupMember(String childGroup, String parentGroup) throws OperationFailedException Description copied from interface:RemoteDirectory
Determines if a group is a direct member of another group. The directory is NOT expected to resolve any transitive group relationships.- Specified by:
isGroupDirectGroupMember
in interfaceRemoteDirectory
- Parameters:
childGroup
- name of child group.parentGroup
- name of parent group.- Returns:
true
iff the childGroup is a direct member of the parentGroup.- Throws:
OperationFailedException
- underlying directory implementation failed to execute the operation.
-
countDirectMembersOfGroup
public BoundedCount countDirectMembersOfGroup(String groupName, int querySizeHint) throws OperationFailedException Description copied from interface:RemoteDirectory
Count the direct members of a group in the remote directory. You may hint at the number of memberships that you would like to see for the purposes of efficiency but the hint may be ignored.- Specified by:
countDirectMembersOfGroup
in interfaceRemoteDirectory
- Parameters:
groupName
- the name of the group to search forquerySizeHint
- hinting at the maximum number of memberships that should be counted. The directory that implements this may choose to count less or more. This is a user provided suggestion for potential efficiency.- Returns:
- A bounded count of the number of memberships in the given group for the provided directory. If the group is not found then there are exactly 0 members of that non-existent group.
- Throws:
OperationFailedException
- if we failed to count the number of memberships for the provided group.
-
addUserToGroup
public void addUserToGroup(String username, String groupName) throws GroupNotFoundException, UserNotFoundException, OperationFailedException, MembershipAlreadyExistsException Description copied from interface:RemoteDirectory
Adds a user as a member of a group. This means that all user members ofchildGroup
will appear as members ofparentGroup
to querying applications.- Specified by:
addUserToGroup
in interfaceRemoteDirectory
- Parameters:
username
- The user that will become a member ofgroupName
groupName
- The group that will gain a new member.- Throws:
GroupNotFoundException
- If the group cannot be found.UserNotFoundException
- If the user cannot be found.OperationFailedException
- underlying directory implementation failed to execute the operation.MembershipAlreadyExistsException
- if the user is already a member of the group
-
addGroupToGroup
public void addGroupToGroup(String childGroup, String parentGroup) throws GroupNotFoundException, InvalidMembershipException, OperationFailedException, MembershipAlreadyExistsException Description copied from interface:RemoteDirectory
Adds a group as a member of a parent group.- Specified by:
addGroupToGroup
in interfaceRemoteDirectory
- Parameters:
childGroup
- The group that will become a member ofparentGroup
parentGroup
- The group that will gain a new member- Throws:
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.MembershipAlreadyExistsException
- if the child group is already a child of the parent group
-
removeUserFromGroup
public void removeUserFromGroup(String username, String groupName) throws GroupNotFoundException, UserNotFoundException, MembershipNotFoundException, OperationFailedException Description copied from interface:RemoteDirectory
Removes a user as a member of a group.- Specified by:
removeUserFromGroup
in interfaceRemoteDirectory
- Parameters:
username
- The user that will be removed fromparentGroup
groupName
- The group that will lose the member.- Throws:
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.
-
removeGroupFromGroup
public void removeGroupFromGroup(String childGroup, String parentGroup) throws GroupNotFoundException, InvalidMembershipException, MembershipNotFoundException, OperationFailedException Description copied from interface:RemoteDirectory
Removes a group as a member of a parent group.- Specified by:
removeGroupFromGroup
in interfaceRemoteDirectory
- Parameters:
childGroup
- The group that will be removed fromparentGroup
parentGroup
- The group that will lose the member.- Throws:
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.
-
searchGroupRelationships
public <T> List<T> searchGroupRelationships(MembershipQuery<T> query) throws OperationFailedException Description copied from interface:RemoteDirectory
Searches for membership information.- Specified by:
searchGroupRelationships
in interfaceRemoteDirectory
- Parameters:
query
- query for memberships.- Returns:
- a List of Users or Groups or Strings depending on the query criteria. An empty List if there are no results. Results are ordered by entity name, case-insensitive.
- Throws:
OperationFailedException
- underlying directory implementation failed to execute the operation.
-
getCurrentEventToken
public String getCurrentEventToken() throws OperationFailedException, IncrementalSynchronisationNotAvailableExceptionReturns a token that can be used for querying events that have happened after the token was generated.If the event token has not changed since the last call to this method, it is guaranteed that no new events have been received.
The format of event token is implementation specific and can change without a warning.
- Returns:
- token that can be used for querying events that have happened after the token was generated
- Throws:
UnsupportedCrowdApiException
- if the remote server does not support this operationOperationFailedException
- if the operation has failed for any other reason, including invalid argumentsIncrementalSynchronisationNotAvailableException
- if the application cannot provide incremental synchronisation
-
getNewEvents
public Events getNewEvents(String eventToken) throws EventTokenExpiredException, OperationFailedException Returns an events object which contains a new eventToken and events that happened after the giveneventToken
was generated.If for any reason event store is unable to retrieve events that happened after the event token was generated, an
EventTokenExpiredException
will be thrown. The caller is then expected to callgetCurrentEventToken()
again before asking for new events.- Parameters:
eventToken
- event token that was retrieved by a call togetCurrentEventToken()
orgetNewEvents(String)
- Returns:
- events object which contains a new eventToken and events that happened after the given
eventToken
was generated - Throws:
EventTokenExpiredException
- if events that happened after the event token was generated can not be retrievedUnsupportedCrowdApiException
- if the remote server does not support this operationOperationFailedException
- if the operation has failed for any other reason, including invalid arguments
-
testConnection
Description copied from interface:RemoteDirectory
Test if a connection to the directory server can be established. When executed for a directory already persisted in the database (ie with a non-null id) the connection will be taken using the same semantics as during regular directory operations, which means that the connection may be sourced from a connection pool and be subject to additional validation if applicable. This gives a good indicator as to the RemoteDirectory's status but can be problematic when used to verify correctness during a directory update. If absolute certainty about the RemoteDirectory's status is not needed or the RemoteDirectory's lifecycle will be limited strictly to the connection test,CrowdDirectoryService.testConnection(Directory)
should be used instead.- Specified by:
testConnection
in interfaceRemoteDirectory
- Throws:
OperationFailedException
- underlying directory implementation failed to execute the operation.
-
supportsInactiveAccounts
public boolean supportsInactiveAccounts()Remote crowd directories always support inactive accounts.- Specified by:
supportsInactiveAccounts
in interfaceRemoteDirectory
- Returns:
- true
-
supportsNestedGroups
public boolean supportsNestedGroups()Description copied from interface:RemoteDirectory
Allows us to only display nested-group related UI for directories that support it.- Specified by:
supportsNestedGroups
in interfaceRemoteDirectory
- Returns:
- true if the directory can handle having a group added to a group.
-
supportsPasswordExpiration
public boolean supportsPasswordExpiration()Description copied from interface:RemoteDirectory
Return true if this directory supports manually expiring passwords.- Specified by:
supportsPasswordExpiration
in interfaceRemoteDirectory
- Returns:
- true if this directory supports manually expiring passwords
-
supportsSettingEncryptedCredential
public boolean supportsSettingEncryptedCredential()Description copied from interface:RemoteDirectory
If this method returns true, then callingRemoteDirectory.updateUserCredential(String, PasswordCredential)
orRemoteDirectory.addUser(com.atlassian.crowd.model.user.UserTemplate, com.atlassian.crowd.embedded.api.PasswordCredential)
with aPasswordCredential
instance wherePasswordCredential.isEncryptedCredential()
returns true and the instance is not equal toPasswordCredential.NONE
will succeed; otherwise, it will fail.- Specified by:
supportsSettingEncryptedCredential
in interfaceRemoteDirectory
- Returns:
- true if this directory supports setting passwords by hash
-
isRolesDisabled
public boolean isRolesDisabled()Description copied from interface:RemoteDirectory
Expose whether the directory has roles disabled. Always true.- Specified by:
isRolesDisabled
in interfaceRemoteDirectory
- Returns:
- true
-
getDescriptiveName
Description copied from interface:RemoteDirectory
Returns a descriptive name for the type of directory.- Specified by:
getDescriptiveName
in interfaceRemoteDirectory
- Returns:
- descriptive name.
-
setAttributes
Called by theDirectoryInstanceLoader
after constructing an InternalDirectory.- Specified by:
setAttributes
in interfaceRemoteDirectory
- Parameters:
attributes
- attributes map.
-
getValues
Description copied from interface:Attributes
Get all the values associated with a given key. Duplicate values are not allowed, and this should be enforced case-insensitively to match the behaviour of LDAP servers. Will return null if the key does not exist.- Specified by:
getValues
in interfaceAttributes
- Parameters:
name
- the key to retrieve the values for- Returns:
- the values associated with the given key. It may return null or empty set if the key does not exist.
-
getValue
Description copied from interface:Attributes
Returns any value associated with the given key, returnsnull
if there is no value.- Specified by:
getValue
in interfaceAttributes
- Parameters:
name
- the key to retrieve the value for- Returns:
- any value associated with the given key, or
null
if there is no value
-
getKeys
Description copied from interface:Attributes
Gets all the keys of the attributes. Warning: case-insensitive keys are currently no enforced, however this is the case for LDAP, so this may be implemented in the future.- Specified by:
getKeys
in interfaceAttributes
- Returns:
- a set of all the keys.
-
isEmpty
public boolean isEmpty()- Specified by:
isEmpty
in interfaceAttributes
- Returns:
true
if there are no attributes
-
getAuthoritativeDirectory
- Specified by:
getAuthoritativeDirectory
in interfaceRemoteDirectory
- Returns:
- the directory that is the authoritative source of data for this directory, possibly itself.
-
getClientProperties
-
getCrowdClient
Access the Crowd client used for communication with the remote Crowd directory, intended for internal reuse only.- Throws:
OperationFailedException
-
getMemberships
Description copied from interface:RemoteDirectory
Get an iterable view of the available group memberships. This may be implemented as a single remote call or separate calls, depending on the directory.
If there is a failure in the underlying retrieval, the iterator may throw
Membership.MembershipIterationException
at runtime.If the directory does not have a bulk call interface then a typical implementation would be:
return new DirectoryMembershipsIterable(this);
- Specified by:
getMemberships
in interfaceRemoteDirectory
- Returns:
- an iterable view of the available group memberships
- Throws:
OperationFailedException
- if the underlying directory implementation failed to execute the operation
-
userAuthenticated
public User userAuthenticated(String username) throws OperationFailedException, UserNotFoundException, InactiveAccountException - Specified by:
userAuthenticated
in interfaceRemoteDirectory
- Throws:
OperationFailedException
UserNotFoundException
InactiveAccountException
-