public class

UserUtilImpl

extends Object
implements Startable UserUtil
java.lang.Object
   ↳ com.atlassian.jira.user.util.UserUtilImpl

Class Overview

This is the default implementation of the UserUtil interface.

Summary

Constants
String DIRECTORY_ID
String DIRECTORY_NAME
String DISPLAY_NAME
String EMAIL
String PASSWORD_HOURS
String PASSWORD_TOKEN
String SEND_EMAIL
String USERNAME
[Expand]
Inherited Constants
From interface com.atlassian.jira.user.util.UserUtil
Public Constructors
UserUtilImpl(IssueSecurityLevelManager issueSecurityLevelManager, GlobalPermissionManager globalPermissionManager, CrowdService crowdService, DirectoryManager directoryManager, PermissionManager permissionManager, ApplicationProperties applicationProperties, SearchProvider searchProvider, ProjectManager projectManager, ProjectRoleService projectRoleService, ProjectComponentManager componentManager, SubscriptionManager subscriptionManager, NotificationSchemeManager notificationSchemeManager, UserHistoryManager userHistoryManager, UserManager userManager, EventPublisher eventPublisher, StudioHooks hooks, CacheManager cacheManager)
Public Methods
void addToJiraUsePermission(User user)
Takes the given user and adds him/her to all the groups that grant a user the global JIRA use permission.
void addUserToGroup(Group group, User userToAdd)
This is used to add a specified user to a specified group.
void addUserToGroups(Collection<Group> groups, User userToAdd)
This is used to add a user to many groups at once.
boolean canActivateNumberOfUsers(int numUsers)
Returns true if, after adding the specified number of users, the number of active users in JIRA does not exceed the user limit allowed by the license.
boolean canActivateUsers(Collection<String> userNames)
Returns true if, after adding the specified users, the number of active users in JIRA does not exceed the user limit allowed by the license.
void changePassword(User user, String newPassword)
Can be called to set the password for a user.
void clearActiveUserCount()
Clears the cache of the active user count so that it can be recalculated.
User createUserNoNotification(String username, String password, String emailAddress, String displayName)
Creates a User from supplied details.
User createUserNoNotification(String username, String password, String emailAddress, String displayName, Long directoryId)
Creates a User from supplied details.
User createUserWithNotification(String username, String password, String email, String fullname, Long directoryId, int userEventType)
Creates a User from supplied details.
User createUserWithNotification(String username, String password, String email, String fullname, int userEventType)
Creates a User from supplied details.
void flushUserCaches()
static String generatePassword()
Generates a Random Password that can be used when the user has entered a blank password.
UserUtil.PasswordResetToken generatePasswordResetToken(User user)
This is used to generate a reset password token that last a certain time and allows a person to access a page anonymously so they can reset their password.
int getActiveUserCount()
Returns the number of users that are currently 'active'.
Collection<User> getAdministrators()
Returns a list of JIRA admin Users.
@Nonnull Collection<ApplicationUser> getAllApplicationUsers()
Returns the all users defined in JIRA, regardless of whether they are active or not.
@Nonnull Set<User> getAllUsers()
Returns the all users defined in JIRA, regardless of whether they are active or not.
SortedSet<User> getAllUsersInGroupNames(Collection<String> groupNames)
Returns a collection of User objects that belong to any of the passed in collection of group names.
Set<User> getAllUsersInGroupNamesUnsorted(Collection<String> groupNames)
Returns a collection of User objects that belong to any of the passed in collection of group names.
SortedSet<User> getAllUsersInGroups(Collection<Group> groups)
Returns a collection of User objects that are found within the passed in collection of Group objects.
Collection<ProjectComponent> getComponentsUserLeads(User user)
Retrieve a collection of ProjectComponents - where the lead of each component is the specified user.
Collection<ProjectComponent> getComponentsUserLeads(ApplicationUser user)
Retrieve a collection of ProjectComponents - where the lead of each component is the specified user.
String getDisplayableNameSafely(User user)
Takes the given user and returns a "displayable name" by cautiously checking the different edge cases for users.
String getDisplayableNameSafely(ApplicationUser user)
Takes the given user and returns a "displayable name" by cautiously checking the different edge cases for users.
Group getGroup(String groupName)
Get a Group by name.
SortedSet<String> getGroupNamesForUser(String userName)
Returns a collection of the names of the groups that the user belongs to.
Group getGroupObject(String groupName)
Returns a Group based on user name.
SortedSet<Group> getGroupsForUser(String userName)
Returns a collection of Group objects that the user belongs to.
Collection<User> getJiraAdministrators()
Returns a list of JIRA admin Users.
Collection<User> getJiraSystemAdministrators()
Returns a list of JIRA system admin Users.
long getNumberOfAssignedIssuesIgnoreSecurity(ApplicationUser loggedInUser, ApplicationUser user)
Returns number of issues assigned to user
long getNumberOfAssignedIssuesIgnoreSecurity(User loggedInUser, User user)
Returns number of issues assigned to user
long getNumberOfReportedIssuesIgnoreSecurity(ApplicationUser loggedInUser, ApplicationUser user)
Returns number of issues reported by user
long getNumberOfReportedIssuesIgnoreSecurity(User loggedInUser, User user)
Returns number of issues reported by user
Collection<Project> getProjectsLeadBy(User user)
Returns all the projects that leadUser is the project lead for.
Collection<Project> getProjectsLeadBy(ApplicationUser user)
Returns all the projects that leadUser is the project lead for.
Collection<User> getSystemAdministrators()
Returns a list of JIRA system admin Users.
int getTotalUserCount()
Returns the total number of users defined in JIRA, regardless of whether they are active or not.
User getUser(String userName)
Get a User by name.
ApplicationUser getUserByKey(String key)
Returns a user based on key.
ApplicationUser getUserByName(String username)
Returns a user based on user name.
User getUserObject(String userName)
Returns a user based on user name.
@Nonnull Collection<User> getUsers()
Returns the all users defined in JIRA, regardless of whether they are active or not.
SortedSet<User> getUsersInGroupNames(Collection<String> groupNames)
Returns a collection of User objects that are found within the passed in collection of group names.
SortedSet<User> getUsersInGroups(Collection<Group> groups)
Returns a collection of User objects that are found within the passed in collection of Group objects.
boolean hasExceededUserLimit()
Returns true if this JIRA instance has more active users, than allowed by the license.
boolean isNonSysAdminAttemptingToDeleteSysAdmin(User loggedInUser, User user)
Checking if user without SYSTEM_ADMIN rights tries to remove user with SYSTEM_ADMIN rights.
boolean isNonSysAdminAttemptingToDeleteSysAdmin(ApplicationUser loggedInUser, ApplicationUser user)
Checking if user without SYSTEM_ADMIN rights tries to remove user with SYSTEM_ADMIN rights.
@EventListener void onClearCache(ClearCacheEvent event)
@EventListener void onDirectoryModified(DirectoryEvent event)
@EventListener void onDirectorySynchronisation(RemoteDirectorySynchronisedEvent event)
void removeUser(ApplicationUser loggedInUser, ApplicationUser user)
This will remove the user and removes the user from all the groups.
void removeUser(User loggedInUser, User user)
This will remove the user and removes the user from all the groups.
void removeUserFromGroup(Group group, User userToRemove)
This is used to remove a specified user from a specified group.
void removeUserFromGroups(Collection<Group> groups, User userToRemove)
This is used to remove a user from many groups at once.
void start()
This method wil be called after the plugin system is fully initialised and all components added to the dependency injection framework.
boolean userExists(String userName)
Returns true if the a user exists with the specified userName
UserUtil.PasswordResetTokenValidation validatePasswordResetToken(User user, String token)
This can be called to validate a token against the user.
Protected Methods
User createUserInDefaultDirectory(String username, String password, String emailAddress, String displayName, int userEventType, boolean sendEmail)
User createUserInDirectory(String username, String password, String emailAddress, String displayName, Long directoryId, int userEventType, boolean sendEmail)
void dispatchEvent(User user, int userEventType, Map<StringObject> args)
PortalPageService getPortalPageService()
A Factory method to get the PortalPageService.
SearchRequestService getSearchRequestService()
A Factory method to get the SearchRequestService.
JiraServiceContext getServiceContext(ApplicationUser user)
Protected level factory method to allow for better test integration
[Expand]
Inherited Methods
From class java.lang.Object
From interface com.atlassian.jira.extension.Startable
From interface com.atlassian.jira.user.util.UserUtil

Constants

public static final String DIRECTORY_ID

Constant Value: "directoryId"

public static final String DIRECTORY_NAME

Constant Value: "directoryName"

public static final String DISPLAY_NAME

Constant Value: "fullname"

public static final String EMAIL

Constant Value: "email"

public static final String PASSWORD_HOURS

Constant Value: "password.hours"

public static final String PASSWORD_TOKEN

Constant Value: "password.token"

public static final String SEND_EMAIL

Constant Value: "sendEmail"

public static final String USERNAME

Constant Value: "username"

Public Constructors

public UserUtilImpl (IssueSecurityLevelManager issueSecurityLevelManager, GlobalPermissionManager globalPermissionManager, CrowdService crowdService, DirectoryManager directoryManager, PermissionManager permissionManager, ApplicationProperties applicationProperties, SearchProvider searchProvider, ProjectManager projectManager, ProjectRoleService projectRoleService, ProjectComponentManager componentManager, SubscriptionManager subscriptionManager, NotificationSchemeManager notificationSchemeManager, UserHistoryManager userHistoryManager, UserManager userManager, EventPublisher eventPublisher, StudioHooks hooks, CacheManager cacheManager)

Public Methods

public void addToJiraUsePermission (User user)

Takes the given user and adds him/her to all the groups that grant a user the global JIRA use permission. (see USE) Note: operation is only performed if by doing so we will not exceed the user limit (if the current license happens to specify a limit)

Parameters
user The user to be added to the USE permission

public void addUserToGroup (Group group, User userToAdd)

This is used to add a specified user to a specified group. The user will be added to the group if the user is not already a member of the group.

Parameters
group the group to add the user to.
userToAdd the user to add to the group.

public void addUserToGroups (Collection<Group> groups, User userToAdd)

This is used to add a user to many groups at once.

Parameters
groups a list containing the groups to add the user to.
userToAdd the user to add to the group.

public boolean canActivateNumberOfUsers (int numUsers)

Returns true if, after adding the specified number of users, the number of active users in JIRA does not exceed the user limit allowed by the license. If the license does not require a user limit, this method will return true immediately.

Parameters
numUsers the number of users to add to the JIRA instance. If 0, all things being equal, this method will return true. Must not be negative!
Returns
  • False if the number of active users + the number of users to add is greater than the limit enforced by the license. True otherwise.

public boolean canActivateUsers (Collection<String> userNames)

Returns true if, after adding the specified users, the number of active users in JIRA does not exceed the user limit allowed by the license. If a user specified is already active, or cannot be found, they are not counted towards the user limit. If the limit has already been exceeded, but none of the users specified are inactive, the result will still be true, as these users are already active and thus nothing changes. If the license does not require a user limit, this method will return true immediately.

Parameters
userNames the names of the users to add to the JIRA instance. Must not be null!
Returns
  • False if the number of active users + the number of users to add is greater than the limit enforced by the license. True otherwise.

public void changePassword (User user, String newPassword)

Can be called to set the password for a user. This will delete any password request tokens associated with that user

Parameters
user the user in play
newPassword their new password

public void clearActiveUserCount ()

Clears the cache of the active user count so that it can be recalculated. This method should be used when performing operations that will modify the number of active users in the system.

public User createUserNoNotification (String username, String password, String emailAddress, String displayName)

Creates a User from supplied details.

No email notification will be send to created user.

Parameters
username The username of the new user. Needs to be lowercase and unique.
password The password for the new user.
emailAddress The email for the new user. Needs to be a valid email address.
displayName The display name for the new user
Returns
  • The new user object that was created

public User createUserNoNotification (String username, String password, String emailAddress, String displayName, Long directoryId)

Creates a User from supplied details.

No email notification will be send to created user.

Parameters
username The username of the new user. Needs to be lowercase and unique.
password The password for the new user.
emailAddress The email for the new user. Needs to be a valid email address.
displayName The display name for the new user
directoryId The directory to create the user in. Null means "first writable directory".
Returns
  • The new user object that was created

public User createUserWithNotification (String username, String password, String email, String fullname, Long directoryId, int userEventType)

Creates a User from supplied details.

Email notification will be send to created user.

Parameters
username The username of the new user. Needs to be lowercase and unique.
password The password for the new user.
email The email for the new user. Needs to be a valid email address.
fullname The full name for the new user
directoryId The directory to create the user in. Null means "first writable directory".
userEventType The event type dispatched on user creation. Either USER_CREATED or USER_SIGNUP
Returns
  • The new user object that was created

public User createUserWithNotification (String username, String password, String email, String fullname, int userEventType)

Creates a User from supplied details.

Email notification will be send to created user.

Parameters
username The username of the new user. Needs to be lowercase and unique.
password The password for the new user.
email The email for the new user. Needs to be a valid email address.
fullname The full name for the new user
userEventType The event type dispatched on user creation. Either USER_CREATED or USER_SIGNUP
Returns
  • The new user object that was created

public void flushUserCaches ()

public static String generatePassword ()

Generates a Random Password that can be used when the user has entered a blank password.

The password is guaranteed to contain at least one upper-case letter, lower-case letter and number in case the backend user Directory has password restrictions.

Returns
  • a random password.

public UserUtil.PasswordResetToken generatePasswordResetToken (User user)

This is used to generate a reset password token that last a certain time and allows a person to access a page anonymously so they can reset their password.

The generated token will be associated with the named user so that that this information can be verified at a later time.

Parameters
user the user in question. This MUST not be null
Returns
  • a newly generated token that will live for a certain time

public int getActiveUserCount ()

Returns the number of users that are currently 'active'. For a user to be active, means that it must belong to a group that has either the JIRA-users, JIRA-administrators or JIRA-Systemadministartors global permission. Implementations of this method should take performance into consideration, and ensure that the value is cached. Use clearActiveUserCount() to clear the cache.

Please note that the calculation will be run if the license does not specify a user limit.

Returns
  • the active user count

public Collection<User> getAdministrators ()

Returns a list of JIRA admin Users.

WARNING: This method will be changed in the future to return a Collection of Crowd User objects. Since v4.3.

Returns
  • a list of JIRA admin Users.

@Nonnull public Collection<ApplicationUser> getAllApplicationUsers ()

Returns the all users defined in JIRA, regardless of whether they are active or not.

Returns
  • the set of all users defined in JIRA

@Nonnull public Set<User> getAllUsers ()

Returns the all users defined in JIRA, regardless of whether they are active or not.

Returns
  • the set of all users defined in JIRA

public SortedSet<User> getAllUsersInGroupNames (Collection<String> groupNames)

Returns a collection of User objects that belong to any of the passed in collection of group names. Prefer using getAllUsersInGroupNamesUnsorted(java.util.Collection) and sorting the list of users only if absolutely necessary rather than relying on this method to perform the sort.

Parameters
groupNames a collection of group name strings
Returns

public Set<User> getAllUsersInGroupNamesUnsorted (Collection<String> groupNames)

Returns a collection of User objects that belong to any of the passed in collection of group names.

Parameters
groupNames a collection of group name strings
Returns
  • the set of users that are in the named groups

public SortedSet<User> getAllUsersInGroups (Collection<Group> groups)

Returns a collection of User objects that are found within the passed in collection of Group objects.

Parameters
groups a collection of Group objects
Returns

public Collection<ProjectComponent> getComponentsUserLeads (User user)

Retrieve a collection of ProjectComponents - where the lead of each component is the specified user.

Parameters
user User leading components
Returns
  • Collection of project components

public Collection<ProjectComponent> getComponentsUserLeads (ApplicationUser user)

Retrieve a collection of ProjectComponents - where the lead of each component is the specified user.

Parameters
user User leading components
Returns
  • Collection of project components

public String getDisplayableNameSafely (User user)

Takes the given user and returns a "displayable name" by cautiously checking the different edge cases for users.

Parameters
user the user. May be null.
Returns
  • The user's full name if present and not blank, the username if present, or null otherwise.

public String getDisplayableNameSafely (ApplicationUser user)

Takes the given user and returns a "displayable name" by cautiously checking the different edge cases for users.

Parameters
user the user. May be null.
Returns
  • The user's full name if present and not blank, the username if present, or null otherwise.

public Group getGroup (String groupName)

Get a Group by name.

Parameters
groupName the name of the group
Returns
  • a Group

public SortedSet<String> getGroupNamesForUser (String userName)

Returns a collection of the names of the groups that the user belongs to.

Parameters
userName A User name
Returns
  • the set of groups that the user belongs to

public Group getGroupObject (String groupName)

Returns a Group based on user name.

WARNING: This method will be changed in the future to return a Crowd Group object. Since v4.3.

Parameters
groupName the user name of the group
Returns
  • the Group object, or null if the user cannot be found including null groupName.

public SortedSet<Group> getGroupsForUser (String userName)

Returns a collection of Group objects that the user belongs to.

Parameters
userName A User name
Returns
  • the set of groups that the user belongs to

public Collection<User> getJiraAdministrators ()

Returns a list of JIRA admin Users.

WARNING: This method will be changed in the future to return a Collection of Crowd User objects. Since v4.3.

Returns
  • a list of JIRA admin Users.

public Collection<User> getJiraSystemAdministrators ()

Returns a list of JIRA system admin Users.

WARNING: This method will be changed in the future to return a Collection of Crowd User objects. Since v4.3.

Returns

public long getNumberOfAssignedIssuesIgnoreSecurity (ApplicationUser loggedInUser, ApplicationUser user)

Returns number of issues assigned to user

Parameters
loggedInUser the logged in user
user the user to find the issue count for
Returns
  • number of issues assigned to user

public long getNumberOfAssignedIssuesIgnoreSecurity (User loggedInUser, User user)

Returns number of issues assigned to user

Parameters
loggedInUser the logged in user
user the user to find the issue count for
Returns
  • number of issues assigned to user

public long getNumberOfReportedIssuesIgnoreSecurity (ApplicationUser loggedInUser, ApplicationUser user)

Returns number of issues reported by user

Parameters
loggedInUser the logged in user
user the user to find the issue count for
Returns
  • number of issues reported by user

public long getNumberOfReportedIssuesIgnoreSecurity (User loggedInUser, User user)

Returns number of issues reported by user

Parameters
loggedInUser the logged in user
user the user to find the issue count for
Returns
  • number of issues reported by user

public Collection<Project> getProjectsLeadBy (User user)

Returns all the projects that leadUser is the project lead for.

Parameters
user the user in play
Returns
  • A collection of project org.ofbiz.core.entity.GenericValues

public Collection<Project> getProjectsLeadBy (ApplicationUser user)

Returns all the projects that leadUser is the project lead for.

Parameters
user the user in play
Returns
  • A collection of project org.ofbiz.core.entity.GenericValues

public Collection<User> getSystemAdministrators ()

Returns a list of JIRA system admin Users.

WARNING: This method will be changed in the future to return a Collection of Crowd User objects. Since v4.3.

Returns

public int getTotalUserCount ()

Returns the total number of users defined in JIRA, regardless of whether they are active or not.

Returns
  • the total number of users defined in JIRA

public User getUser (String userName)

Get a User by name.

Parameters
userName the name of the user
Returns
  • a User

public ApplicationUser getUserByKey (String key)

Returns a user based on key.

Parameters
key the key of the user
Returns
  • the User object, or null if the user cannot be found including null userkey.

public ApplicationUser getUserByName (String username)

Returns a user based on user name.

Parameters
username the user name of the user
Returns
  • the User object, or null if the user cannot be found including null userName.

public User getUserObject (String userName)

Returns a user based on user name.

Parameters
userName the user name of the user
Returns
  • the User object, or null if the user cannot be found including null userName.

@Nonnull public Collection<User> getUsers ()

Returns the all users defined in JIRA, regardless of whether they are active or not.

Returns
  • the set of all users defined in JIRA

public SortedSet<User> getUsersInGroupNames (Collection<String> groupNames)

Returns a collection of User objects that are found within the passed in collection of group names. Null users are excluded even if they exist in the underlying data.

Parameters
groupNames a collection of group name strings
Returns
  • the set of users that are in the named groups.

public SortedSet<User> getUsersInGroups (Collection<Group> groups)

Returns a collection of User objects that are found within the passed in collection of Group objects. Null users are excluded even if they exist in the underlying data.

Parameters
groups a collection of Group objects
Returns

public boolean hasExceededUserLimit ()

Returns true if this JIRA instance has more active users, than allowed by the license. If the license does not require a user limit, this method will return false immediately.

Returns
  • True if the number of active users is greater than the limit enforced by the license. False otherwise.

public boolean isNonSysAdminAttemptingToDeleteSysAdmin (User loggedInUser, User user)

Checking if user without SYSTEM_ADMIN rights tries to remove user with SYSTEM_ADMIN rights.

Parameters
loggedInUser User performing operation
user User for remove
Returns
  • true if user without SYSTEM_ADMIN rights tries to remove user with SYSTEM_ADMIN rights

public boolean isNonSysAdminAttemptingToDeleteSysAdmin (ApplicationUser loggedInUser, ApplicationUser user)

Checking if user without SYSTEM_ADMIN rights tries to remove user with SYSTEM_ADMIN rights.

Parameters
loggedInUser User performing operation
user User for remove
Returns
  • true if user without SYSTEM_ADMIN rights tries to remove user with SYSTEM_ADMIN rights

@EventListener public void onClearCache (ClearCacheEvent event)

@EventListener public void onDirectoryModified (DirectoryEvent event)

@EventListener public void onDirectorySynchronisation (RemoteDirectorySynchronisedEvent event)

public void removeUser (ApplicationUser loggedInUser, ApplicationUser user)

This will remove the user and removes the user from all the groups. All components lead by user will have lead cleared.

Parameters
loggedInUser the user performing operation
user the user to delete

public void removeUser (User loggedInUser, User user)

This will remove the user and removes the user from all the groups. All components lead by user will have lead cleared.

Parameters
loggedInUser the user performing operation
user the user to delete

public void removeUserFromGroup (Group group, User userToRemove)

This is used to remove a specified user from a specified group. The user will be removed from the group only if the user is already a member of the group.

Parameters
group the group to add the user to.
userToRemove the user to add to the group.

public void removeUserFromGroups (Collection<Group> groups, User userToRemove)

This is used to remove a user from many groups at once.

Parameters
groups a list containing the groups to add the user to.
userToRemove the user to add to the group.

public void start ()

This method wil be called after the plugin system is fully initialised and all components added to the dependency injection framework.

Throws
Exception

public boolean userExists (String userName)

Returns true if the a user exists with the specified userName

Parameters
userName the name of the user
Returns
  • true if t a user exists with the specified name or false if not

public UserUtil.PasswordResetTokenValidation validatePasswordResetToken (User user, String token)

This can be called to validate a token against the user.

Parameters
user the user in play
token the token they provided
Returns
  • a Validation object that describes how the option went

Protected Methods

protected User createUserInDefaultDirectory (String username, String password, String emailAddress, String displayName, int userEventType, boolean sendEmail)

protected User createUserInDirectory (String username, String password, String emailAddress, String displayName, Long directoryId, int userEventType, boolean sendEmail)

protected void dispatchEvent (User user, int userEventType, Map<StringObject> args)

protected PortalPageService getPortalPageService ()

A Factory method to get the PortalPageService. This helps break the cyclic dependency of PortalPageService to UserUtils AND allows test to override the value used.

Returns
  • a PortalPageService

protected SearchRequestService getSearchRequestService ()

A Factory method to get the SearchRequestService. This helps break the cyclic dependency of SearchRequestService to UserUtils AND allows test to override the value used.

Returns
  • a SearchRequestService

protected JiraServiceContext getServiceContext (ApplicationUser user)

Protected level factory method to allow for better test integration

Parameters
user the user in action
Returns
  • a new JiraServiceContext