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