diff --git a/server/src/main/java/password/pwm/http/servlet/newuser/NewUserServlet.java b/server/src/main/java/password/pwm/http/servlet/newuser/NewUserServlet.java index 3f622c3b6..863e252c3 100644 --- a/server/src/main/java/password/pwm/http/servlet/newuser/NewUserServlet.java +++ b/server/src/main/java/password/pwm/http/servlet/newuser/NewUserServlet.java @@ -283,6 +283,16 @@ protected void nextStep( final PwmRequest pwmRequest ) } } + // last chance to edit form data before user creation (and DN generation too) + try + { + NewUserUtils.remoteEditFormData( pwmRequest, newUserBean.getNewUserForm(), null); + } + catch ( PwmDataValidationException e ) + { + throw new PwmUnrecoverableException( e.getErrorInformation() ); + } + // success so create the new user. final String newUserDN = NewUserUtils.determineUserDN( pwmRequest, newUserBean.getNewUserForm() ); diff --git a/server/src/main/java/password/pwm/http/servlet/newuser/NewUserUtils.java b/server/src/main/java/password/pwm/http/servlet/newuser/NewUserUtils.java index b6abc67f8..0105643eb 100644 --- a/server/src/main/java/password/pwm/http/servlet/newuser/NewUserUtils.java +++ b/server/src/main/java/password/pwm/http/servlet/newuser/NewUserUtils.java @@ -75,6 +75,7 @@ import password.pwm.util.operations.ActionExecutor; import password.pwm.util.operations.PasswordUtility; import password.pwm.ws.client.rest.form.FormDataRequestBean; +import password.pwm.ws.client.rest.form.FormDataRequestBean.Mode; import password.pwm.ws.client.rest.form.FormDataResponseBean; import password.pwm.ws.client.rest.form.RestFormDataClient; @@ -555,6 +556,20 @@ static void remoteWriteFormData( ); } + static void remoteEditFormData( + final PwmRequest pwmRequest, + final NewUserForm newUserForm + + ) + throws PwmUnrecoverableException, PwmDataValidationException + { + remoteSendFormData( + pwmRequest, + newUserForm, + FormDataRequestBean.Mode.edit + ); + } + private static void remoteSendFormData( final PwmRequest pwmRequest, final NewUserForm newUserForm, @@ -586,6 +601,25 @@ private static void remoteSendFormData( .build(); final FormDataResponseBean formDataResponseBean = restFormDataClient.invoke( formDataRequestBean, pwmRequest.getLocale() ); + + if(Mode.edit == mode) { + if(formDataResponseBean.isError()) { + // TODO + } else if(formDataResponseBean.getFormValues() != null && newUserForm.getFormData() != null) { + // merge (replace) form values with rest-returned + for(String respKey : formDataResponseBean.getFormValues().keySet()) { + newUserForm.getFormData().put(respKey, formDataResponseBean.getFormValues().get(respKey)); + } + // delete form values if absent from rest-returned + Iterator respKeysIter = formDataResponseBean.getFormValues().keySet().iterator(); + while(respKeysIter.hasNext()) { + if(!formDataResponseBean.getFormValues().containsKey(respKeysIter.next())) { + respKeysIter.remove(); + } + } + } + } + if ( formDataResponseBean.isError() ) { final ErrorInformation error = new ErrorInformation( diff --git a/server/src/main/java/password/pwm/ws/client/rest/form/FormDataRequestBean.java b/server/src/main/java/password/pwm/ws/client/rest/form/FormDataRequestBean.java index fe6f79fe9..6d61ff6a0 100644 --- a/server/src/main/java/password/pwm/ws/client/rest/form/FormDataRequestBean.java +++ b/server/src/main/java/password/pwm/ws/client/rest/form/FormDataRequestBean.java @@ -56,6 +56,7 @@ public enum FormType public enum Mode { + edit, read, verify, write,