package codeine.servlet; import javax.inject.Inject; import org.apache.log4j.Logger; import org.eclipse.jetty.security.HashLoginService; import org.eclipse.jetty.security.LoginService; import org.eclipse.jetty.util.security.Credential; import codeine.jsons.auth.AuthenticationMethod; import codeine.jsons.auth.CodeineUser; import codeine.jsons.auth.IdentityConfJson; import codeine.jsons.auth.IdentityConfJsonStore; import codeine.jsons.global.GlobalConfigurationJsonStore; import codeine.utils.ExceptionUtils; public class UsersManager { private static final Logger log = Logger.getLogger(UsersManager.class); private @Inject IdentityConfJsonStore identityConfJsonStore; private @Inject HashLoginService hashLoginService; private @Inject GlobalConfigurationJsonStore globalConfigurationJsonStore; private void store(IdentityConfJson json) { identityConfJsonStore.store(json); } public LoginService loginService() { return hashLoginService; } public void initUsers() { for (CodeineUser user : identityConfJsonStore.get().entries()) { user.api_token(); putUser(user.username(), user.credentials()); } } private void putUser(String name, String sisma) { hashLoginService.putUser(name, Credential.getCredential(sisma), new String[] { "user" }); } public CodeineUser addUser(String name, String sisma) { CodeineUser user = identityConfJsonStore.get().add(name, sisma); store(identityConfJsonStore.get()); putUser(name, sisma); return user; } public CodeineUser userByApiToken(String api_token) { for (CodeineUser user : identityConfJsonStore.get().entries()) { if (user.api_token().equals(api_token)) return user; } throw ExceptionUtils.asUnchecked(new IllegalArgumentException("No such user with api token " + api_token)); } public CodeineUser userOrGuest(String name) { for (CodeineUser user : identityConfJsonStore.get().entries()) { if (user.username().equals(name)) return user; } if (globalConfigurationJsonStore.get().authentication_method() == AuthenticationMethod.WindowsCredentials) { log.info("creating automaticly user " + name); return addUser(name, "NONE"); } return CodeineUser.createGuest(name); } public boolean isUserExists(String username) { return hashLoginService.getUsers().containsKey(username); } public boolean hasUsers() { return hashLoginService.getUsers().size() > 0; } }