Forums

Articles
Create
cancel
Showing results for 
Search instead for 
Did you mean: 

I need urgent help reactivating users

gaven December 20, 2023

I ran this script on Scriptrunner and it did not work as expected. I had tested in a dev system and worked fine.

import com.atlassian.confluence.security.login.LoginManager
import com.atlassian.confluence.user.UserAccessor
import com.atlassian.sal.api.component.ComponentLocator
import com.atlassian.user.GroupManager

import java.time.LocalDateTime
import java.time.ZoneId

def groupManager = ComponentLocator.getComponent(GroupManager)
def loginManager = ComponentLocator.getComponent(LoginManager)
def userAccessor = ComponentLocator.getComponent(UserAccessor)

def inactiveGroup = groupManager.getGroup("Deactivated-users")

def confluenceUsersGroup = groupManager.getGroup('confluence-users')
def users = groupManager.getMemberNames(confluenceUsersGroup)
users.each { userName ->
def user = userAccessor.getUserByName(userName)
if (user) {
log.info "Inspecting $user.name to determine whether user should be deactivated"
def loginInfo = loginManager.getLoginInfo(user)

def lastSuccessfulDate = convertDate(loginInfo?.lastSuccessfulLoginDate)
def lastFailedDate = convertDate(loginInfo?.lastFailedLoginDate)
def threeMonthsAgo = LocalDateTime.now().minusDays(60)

if (lastFailedDate?.isBefore(threeMonthsAgo) || lastSuccessfulDate?.isBefore(threeMonthsAgo)) {
log.info "User ${user.name} last successuflly logged in ${lastSuccessfulDate} and last failed to login on ${lastFailedDate}"
log.info "Removing user ${user.name} from confluence-users"

groupManager.removeMembership(confluenceUsersGroup, user)

log.info "Add user ${user.name} to the group: 'Deactivated-Users'"
groupManager.addMembership(inactiveGroup, user)

log.info "Deactivating-user ${user.name}"
userAccessor.deactivateUser(user)
}
}
}

/**
* Note: In the latest versions of ScriptRunner, you can simply use http://docs.groovy-lang.org/docs/latest/html/groovy-jdk/java/util/Date.html#toLocalDateTime() to convert the Date object to a LocalDateTime, as we have upgraded to Groovy 2.5. This convenience method is here for backward compatibility only.
* @Param date
* @return
*/
private static LocalDateTime convertDate(Date date) {
date?.toInstant()?.atZone(ZoneId.systemDefault())?.toLocalDateTime()
}

 

 

I now need to reverse it.

1 answer

0 votes
Mirek
Community Champion
December 30, 2023
gaven January 4, 2024

Sorry this is for Confluence.

I opened this in a hurry as I had removed a large number of users from Confluence.

Suggest an answer

Log in or Sign up to answer