Esempio n. 1
0
  public static Status changePassword(String username, String newPassword) throws Exception {
    String serviceURI = "service/local/users_setpw";

    UserChangePasswordResource resource = new UserChangePasswordResource();
    resource.setUserId(username);
    resource.setNewPassword(newPassword);

    UserChangePasswordRequest request = new UserChangePasswordRequest();
    request.setData(resource);

    XStreamRepresentation representation =
        new XStreamRepresentation(xstream, "", MediaType.APPLICATION_XML);
    representation.setPayload(request);

    return RequestFacade.doPostForStatus(serviceURI, representation);
  }
  /** Changes a user's password. */
  @Override
  @POST
  @ResourceMethodSignature(input = UserChangePasswordRequest.class)
  public Object post(Context context, Request request, Response response, Object payload)
      throws ResourceException {
    UserChangePasswordRequest changePasswordRequest = (UserChangePasswordRequest) payload;

    if (changePasswordRequest != null) {
      UserChangePasswordResource resource = changePasswordRequest.getData();

      try {
        if (!isAnonymousUser(resource.getUserId(), request)) {
          getSecuritySystem().changePassword(resource.getUserId(), resource.getNewPassword());

          response.setStatus(Status.SUCCESS_NO_CONTENT);
        } else {
          response.setStatus(
              Status.CLIENT_ERROR_BAD_REQUEST, "Anonymous user cannot change password!");

          getLogger().debug("Anonymous user password change is blocked!");
        }
      } catch (UserNotFoundException e) {
        getLogger().debug("Invalid user ID!", e);

        throw new ResourceException(
            Status.CLIENT_ERROR_BAD_REQUEST, "Invalid credentials supplied.");
      } catch (InvalidConfigurationException e) {
        // this should never happen
        getLogger().warn("Failed to set password!", e);

        throw new ResourceException(Status.CLIENT_ERROR_BAD_REQUEST, "Failed to set password!.");
      }
    }
    // don't return anything because the status is a 204
    return null;
  }