private Resource getOrCreateServiceUser()

in src/main/java/org/apache/sling/serviceuser/webconsole/impl/ServiceUserWebConsolePlugin.java [348:384]


    private Resource getOrCreateServiceUser(HttpServletRequest request, ResourceResolver resolver) {

        final String name = getParameter(request, PN_NAME, "");

        Session session = resolver.adaptTo(Session.class);
        try {
            UserManager userManager = AccessControlUtil.getUserManager(session);
            if (userManager.getAuthorizable(name) != null) {
                Authorizable user = userManager.getAuthorizable(name);
                log.debug("Using existing user: {}", user);
                return resolver.getResource(user.getPath());
            } else {

                final String userPath = getParameter(request, PN_USER_PATH, "system");

                log.debug("Creating new user with name {} and intermediate path {}", name, userPath);

                User user = userManager.createSystemUser(name, userPath);
                session.save();

                String path = "/home/users/" + userPath + "/" + name;
                log.debug("Moving {} to {}", user.getPath(), path);
                session.getWorkspace().move(user.getPath(), path);
                session.save();

                return resolver.getResource(path);
            }
        } catch (RepositoryException e) {
            log.warn("Exception getting / creating service user {}", name, e);
            try {
                session.refresh(false);
            } catch (RepositoryException e1) {
                log.error("Unexpected exception reverting changes", e1);
            }
        }
        return null;
    }