in reference/src/main/java/org/apache/sling/cms/reference/forms/impl/actions/CreateUserAction.java [73:130]
public FormActionResult handleForm(final Resource actionResource, final FormRequest request) throws FormException {
final StringSubstitutor sub = new StringSubstitutor(request.getFormData());
final ValueMap properties = actionResource.getValueMap();
String username = request.getFormData().get(PN_USERNAME, String.class);
String password = request.getFormData().get(FormConstants.PN_PASSWORD, String.class);
String intermediatePath = properties.get(PN_INTERMEDIATE_PATH, String.class);
if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password)) {
return FormActionResult.failure("Empty username / password");
}
try {
try (ResourceResolver adminResolver = factory.getServiceResourceResolver(
Collections.singletonMap(ResourceResolverFactory.SUBSERVICE, FormConstants.SERVICE_USER))) {
JackrabbitSession session = (JackrabbitSession) adminResolver.adaptTo(Session.class);
final UserManager userManager = session.getUserManager();
if (userManager.getAuthorizable(username) == null) {
log.debug("Creating user {}", username);
User user = userManager.createUser(username, password, new PrincipalImpl(username),
intermediatePath);
String[] groups = properties.get(GROUPS, new String[0]);
for (String g : groups) {
String groupName = sub.replace(g);
Authorizable group = userManager.getAuthorizable(groupName);
if (group == null || !group.isGroup()) {
log.error("Could not find group {}", groupName);
return FormActionResult.failure("Could not find group: " + groupName);
} else {
((Group) group).addMember(user);
}
}
log.debug("Updating profile for {}", username);
updateProfile(adminResolver, user, properties.get(PROFILE_PROPERTIES, new String[0]),
request.getFormData());
log.debug("Saving changes!");
adminResolver.commit();
return FormActionResult.success("User " + username + " created successfully");
} else {
log.error("Failed to create user, {} already exists", username);
return FormActionResult.failure("User " + username + " already exists");
}
}
} catch (LoginException le) {
log.error("Failed to get user manager service user", le);
return FormActionResult.failure("Failed to get service user");
} catch (PersistenceException | RepositoryException e) {
log.error("Failed to create user " + username, e);
return FormActionResult.failure("Failed to create user " + username);
}
}