package org.nuxeo.labs.operations.usermanagement; import org.apache.commons.lang.StringUtils; import org.nuxeo.ecm.automation.core.Constants; import org.nuxeo.ecm.automation.core.annotations.Context; import org.nuxeo.ecm.automation.core.annotations.Operation; import org.nuxeo.ecm.automation.core.annotations.OperationMethod; import org.nuxeo.ecm.automation.core.annotations.Param; import org.nuxeo.ecm.automation.core.util.Properties; import org.nuxeo.ecm.automation.core.util.StringList; import org.nuxeo.ecm.core.api.CoreSession; import org.nuxeo.ecm.core.api.DocumentModel; import org.nuxeo.ecm.platform.usermanager.UserManager; import java.util.Map; @Operation( id = CreateOrUpdateUserOp.ID, category = Constants.CAT_USERS_GROUPS, label = "Create or Update User", description = "Create or Update User.") public class CreateOrUpdateUserOp { public static final String ID = "CreateOrUpdateUser"; @Context protected CoreSession session; @Context protected UserManager userManager; @Param(name = "username") protected String username; @Param(name = "password", required = false) protected String password; @Param(name = "properties", required = false) protected Properties properties = new Properties(); @Param(name = "groups", required = false) protected StringList groups = new StringList(); @OperationMethod public DocumentModel run() { boolean isUpdate = true; DocumentModel userDoc = userManager.getUserModel(username); if (userDoc == null) { userDoc = userManager.getBareUserModel(); userDoc.setPropertyValue("user:username", username); isUpdate = false; } if (StringUtils.isNotBlank(password)) { userDoc.setPropertyValue("user:password", password); } for (Map.Entry<String,String> entry: properties.entrySet()) { String key = entry.getKey(); if (!key.startsWith("user:")) { key = "user:"+key; } userDoc.setPropertyValue(key, entry.getValue()); } if (groups.size()>0) { userDoc.setPropertyValue("user:groups",groups); } if (isUpdate) { userManager.updateUser(userDoc); return userManager.getUserModel(username); } else { return userManager.createUser(userDoc); } } }