Hi
One of our use case, We need to update the all confluence users email addresses. I was trying to implement it through script, but somehow its not working. I was tried with UserAccessor & PersonalInformationManager services and its failing.
com.atlassian.user.User usr = (com.atlassian.user.User)userManager.getUser("suressak");
String email = "sureshsakhare@xxxx.com";
usr.setEmail(email);
userAccessor.saveUser(usr)
return "updated"
com.atlassian.user.User user = (com.atlassian.user.User)userAccessor.getUser("suressak");
if(personalInformationManager.hasPersonalInformation("suressak")){
PersonalInformation personalInfo = personalInformationManager.getOrCreatePersonalInformation(user);
personalInfo.setEmail("sureshsakhare@xxx.com")
personalInformationManager.savePersonalInformation(personalInfo,personalInformationManager.getOrCreatePersonalInformation(usr));
return "updated"
}
Can you help on this? How I can achieve it?
Confluence Data center version : 6.6.11.
We are also using scriptrunner plugin.
Thanks in advanced !!!
import
com.atlassian.sal.api.component.ComponentLocator
import
org.apache.log4j.Level
import
org.apache.log4j.Logger
import
com.atlassian.user.User
import
com.atlassian.confluence.user.UserAccessor
import
com.atlassian.confluence.user.ConfluenceUser
import
com.atlassian.user.impl.DefaultUser
Logger log = Logger.getLogger(
"com.xxx.updateusers"
)
log.setLevel(Level.ALL)
try
{
log.info(
"<------------------------------ User update activity started -------------------------------------------->"
);
File file =
new
File(
'/confluence-sb-uat/shared-home/scripts/azure_confluence_users.csv'
)
def csvMapList = []
file.eachLine { line ->
def columns = line.split(
","
)
def tmpMap = [:]
tmpMap.putAt(
"original_username"
, columns[
0
])
tmpMap.putAt(
"new_username"
, columns[
1
])
tmpMap.putAt(
"original_email"
, columns[
2
])
tmpMap.putAt(
"new_email"
, columns[
3
])
csvMapList.add(tmpMap)
}
final
String stringConstant =
"New"
;
csvMapList.each { map ->
try
{
String originalUserName = map.getAt(
"original_username"
)
String newUserName = map.getAt(
"new_username"
)
String originalEmail = map.getAt(
"original_email"
)
String newEmail = map.getAt(
"new_email"
)
log.info(originalUserName+
" : "
+newUserName+
" : "
+originalEmail+
" : "
+newEmail);
UserAccessor userAccessor = ComponentLocator.getComponent(UserAccessor)
if
(userAccessor.exists(originalUserName)){
if
(userAccessor.exists(newUserName)){
String renameNewUser = newUserName + stringConstant;
String renameEmail = newEmail + stringConstant;
/*Rename the new user's username & email*/
ConfluenceUser usr = userAccessor.getUserByName(newUserName);
final
DefaultUser mNewUser =
new
DefaultUser((User) usr);
mNewUser.setEmail(renameEmail);
userAccessor.saveUser((User)mNewUser);
userAccessor.renameUser(usr,renameNewUser);
/*disabled new user*/
userAccessor.deactivateUser((com.atlassian.user.User) userAccessor.getUserByName(renameNewUser));
/*Update originalUser with New user's username & Email*/
try
{
ConfluenceUser originalUser = userAccessor.getUserByName(originalUserName);
final
DefaultUser mOriginalUser =
new
DefaultUser((User) originalUser);
mOriginalUser.setEmail(newEmail);
userAccessor.saveUser((User)mOriginalUser);
userAccessor.renameUser(originalUser,newUserName);
log.info(originalUserName+
" :Old user updated successfully with new user's username:"
+newUserName+
" & email:"
+newEmail);
}
catch
(e){
log.error(
"Something went wrong while updating the old user. Rollbacking new user rename operation. User:"
+newUserName);
ConfluenceUser usrRollback = userAccessor.getUserByName(renameNewUser);
userAccessor.reactivateUser((com.atlassian.user.User) usrRollback);
final
DefaultUser mNewUserRollback =
new
DefaultUser((User) usrRollback);
mNewUserRollback.setEmail(newEmail);
userAccessor.saveUser((User)mNewUserRollback);
userAccessor.renameUser(usrRollback,newUserName);
}
}
else
{
log.warn(
"New user not created yet. We are skiping the user update action for user:"
+originalUserName);
}
}
else
{
log.warn(
"user not found:"
+originalUserName);
}
}
catch
(e){
log.warn(
"Something went wrong while updating the user : "
+map.getAt(
"original_username"
)+
" due to "
+e.getMessage());
}
}
log.info(
"<------------------------------ User update activity end -------------------------------------------->"
);
}
catch
(e){
log.error(
"Something went wrong while updating the user "
+e);
}
I tried it successfully. This may help someone.
Hi all, this script is now available in our script library for ScriptRunner for Confluence Server/DC (tested by our engineers).
Feel free to copy or customise it as you wish https://library.adaptavist.com/entity/update-user-emails-in-bulk
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Online forums and learning are now in one easy-to-use experience.
By continuing, you accept the updated Community Terms of Use and acknowledge the Privacy Policy. Your public name, photo, and achievements may be publicly visible and available in search engines.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.