public FormActionResult handleForm()

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);
        }
    }