From deca3939ae5482b660aa10bb1bcfefeafd46e043 Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Thu, 23 Jun 2016 00:21:25 +0000
Subject: [PATCH] OPENDJ-2789 Split passwordModify into distinct requests: modifyPassword and resetPassword
---
opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/SubResourceImpl.java | 54 +++++++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 43 insertions(+), 11 deletions(-)
diff --git a/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/SubResourceImpl.java b/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/SubResourceImpl.java
index a1da30e..6cd3367 100644
--- a/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/SubResourceImpl.java
+++ b/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/SubResourceImpl.java
@@ -159,8 +159,10 @@
final Action action = asEnum(request.getAction(), Action.class);
if (resource.hasSupportedAction(action)) {
switch (action) {
- case PASSWORDMODIFY:
- return passwordModify(context, resourceId, request);
+ case RESET_PASSWORD:
+ return resetPassword(context, resourceId, request);
+ case MODIFY_PASSWORD:
+ return modifyPassword(context, resourceId, request);
}
}
} catch (final IllegalArgumentException ignored) {
@@ -170,7 +172,41 @@
}
- private Promise<ActionResponse, ResourceException> passwordModify(
+ private Promise<ActionResponse, ResourceException> resetPassword(
+ final Context context, final String resourceId, final ActionRequest request) {
+ if (!context.containsContext(ClientContext.class)
+ || !context.asContext(ClientContext.class).isSecure()) {
+ return newResourceException(FORBIDDEN, ERR_PASSWORD_RESET_SECURE_CONNECTION.get().toString()).asPromise();
+ }
+ if (!context.containsContext(SecurityContext.class)
+ || context.asContext(SecurityContext.class).getAuthenticationId() == null) {
+ return newResourceException(FORBIDDEN, ERR_PASSWORD_RESET_USER_AUTHENTICATED.get().toString()).asPromise();
+ }
+
+ final Connection connection = connectionFrom(context);
+ return resolveResourceDnAndType(context, connection, resourceId, null)
+ .thenAsync(new AsyncFunction<RoutingContext, PasswordModifyExtendedResult, ResourceException>() {
+ @Override
+ public Promise<PasswordModifyExtendedResult, ResourceException> apply(RoutingContext dnAndType) {
+ final PasswordModifyExtendedRequest pwdModifyRequest =
+ newPasswordModifyExtendedRequest().setUserIdentity("dn: " + dnAndType.getDn());
+ return connection.extendedRequestAsync(pwdModifyRequest)
+ .thenCatchAsync(adaptLdapException(PasswordModifyExtendedResult.class));
+ }
+ }).thenAsync(new AsyncFunction<PasswordModifyExtendedResult, ActionResponse, ResourceException>() {
+ @Override
+ public Promise<ActionResponse, ResourceException> apply(PasswordModifyExtendedResult r) {
+ final JsonValue result = new JsonValue(new LinkedHashMap<>());
+ final byte[] generatedPwd = r.getGeneratedPassword();
+ if (generatedPwd != null) {
+ result.put("generatedPassword", valueOfBytes(generatedPwd).toString());
+ }
+ return newActionResponse(result).asPromise();
+ }
+ });
+ }
+
+ private Promise<ActionResponse, ResourceException> modifyPassword(
final Context context, final String resourceId, final ActionRequest request) {
if (!context.containsContext(ClientContext.class)
|| !context.asContext(ClientContext.class).isSecure()) {
@@ -185,8 +221,8 @@
final String oldPassword;
final String newPassword;
try {
- oldPassword = jsonContent.get("oldPassword").asString();
- newPassword = jsonContent.get("newPassword").asString();
+ oldPassword = jsonContent.get("oldPassword").required().asString();
+ newPassword = jsonContent.get("newPassword").required().asString();
} catch (JsonValueException e) {
final LocalizableMessage msg = ERR_PASSWORD_MODIFY_REQUEST_IS_INVALID.get();
final ResourceException ex = newBadRequestException(msg, e);
@@ -209,12 +245,8 @@
}).thenAsync(new AsyncFunction<PasswordModifyExtendedResult, ActionResponse, ResourceException>() {
@Override
public Promise<ActionResponse, ResourceException> apply(PasswordModifyExtendedResult r) {
- final JsonValue result = new JsonValue(new LinkedHashMap<>());
- final byte[] generatedPwd = r.getGeneratedPassword();
- if (generatedPwd != null) {
- result.put("generatedPassword", valueOfBytes(generatedPwd).toString());
- }
- return newActionResponse(result).asPromise();
+ // Empty response.
+ return newActionResponse(new JsonValue(new LinkedHashMap<>(0))).asPromise();
}
});
}
--
Gitblit v1.10.0