use of annis.security.ANNISUserRealm in project ANNIS by korpling.
the class AdminServiceImpl method changePassword.
@POST
@Path("users/{userName}/password")
@Consumes("text/plain")
@Produces("application/xml")
public Response changePassword(String newPassword, @PathParam("userName") String userName) {
Subject requestingUser = SecurityUtils.getSubject();
requestingUser.checkPermission("admin:write:user");
ANNISUserConfigurationManager confManager = getConfManager();
ANNISUserRealm userRealm = getUserRealm();
if (confManager != null && userRealm != null) {
User user = confManager.getUser(userName);
if (user == null) {
return Response.status(Response.Status.NOT_FOUND).build();
}
Shiro1CryptFormat format = new Shiro1CryptFormat();
SecureRandomNumberGenerator generator = new SecureRandomNumberGenerator();
// 128 bit
ByteSource salt = generator.nextBytes(128 / 8);
Sha256Hash hash = new Sha256Hash(newPassword, salt, 1);
user.setPasswordHash(format.format(hash));
if (userRealm.updateUser(user)) {
return Response.ok().entity(user).build();
}
}
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("Could not change password").build();
}
use of annis.security.ANNISUserRealm in project ANNIS by korpling.
the class AdminServiceImpl method updateOrCreateUser.
@PUT
@Path("users/{userName}")
@Consumes("application/xml")
@Override
public Response updateOrCreateUser(User user, @PathParam("userName") String userName) {
Subject requestingUser = SecurityUtils.getSubject();
requestingUser.checkPermission("admin:write:user");
if (!userName.equals(user.getName())) {
return Response.status(Response.Status.BAD_REQUEST).entity("Username in object is not the same as in path").build();
}
// requesting user needs more than just a "admin:write:user" permission"
for (String permission : user.getPermissions()) {
if (permission.startsWith("admin:")) {
requestingUser.checkPermission("admin:write:adminuser");
break;
}
}
ANNISUserRealm userRealm = getUserRealm();
if (userRealm != null) {
if (userRealm.updateUser(user)) {
return Response.ok().build();
}
}
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("Could not update/create user").build();
}
Aggregations