You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2015/01/07 00:25:46 UTC
[08/47] isis git commit: ISIS-987 Provide some sort of mechanism to
allow users to self-register for an Isis application.
ISIS-987 Provide some sort of mechanism to allow users to self-register for an Isis application.
Password reset UI improvements.
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/790470c8
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/790470c8
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/790470c8
Branch: refs/heads/ISIS-985
Commit: 790470c80a7baa02816d0cd76e5ddb772cd50958
Parents: 065bc10
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Tue Dec 30 09:21:40 2014 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Tue Dec 30 09:21:40 2014 +0200
----------------------------------------------------------------------
.../signup/PasswordResetEmailPanel.html | 34 ++++++
.../signup/PasswordResetEmailPanel.java | 118 +++++++++++++++++++
.../signup/PasswordResetPage.java | 26 ++--
.../signup/PasswordResetPage.properties | 9 +-
.../signup/PasswordResetPanel.html | 13 +-
.../signup/PasswordResetPanel.java | 23 ++--
.../pages/signup/EmailAvailableValidator.java | 17 +--
.../ui/pages/signup/RegistrationFormPanel.java | 2 +-
.../userreg/UserRegistrationService.java | 3 +
9 files changed, 210 insertions(+), 35 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/790470c8/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/password_reset/signup/PasswordResetEmailPanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/password_reset/signup/PasswordResetEmailPanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/password_reset/signup/PasswordResetEmailPanel.html
new file mode 100644
index 0000000..b536773
--- /dev/null
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/password_reset/signup/PasswordResetEmailPanel.html
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+ <body>
+ <wicket:panel>
+ <span wicket:id="feedback"></span>
+
+ <form wicket:id="signUpForm" role="form">
+ <div class="form-group" wicket:id="formGroup">
+ <label wicket:for="email" class="control-label"><wicket:message key="emailLabel"/></label>
+ <input type="text" class="form-control" wicket:id="email" wicket:message="placeholder:emailPlaceholder"/>
+ </div>
+
+ <button type="submit" wicket:id="passwordResetSubmit" class="btn btn-primary"><wicket:message key="passwordResetSubmitLabel"/></button>
+ </form>
+
+ </wicket:panel>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/isis/blob/790470c8/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/password_reset/signup/PasswordResetEmailPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/password_reset/signup/PasswordResetEmailPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/password_reset/signup/PasswordResetEmailPanel.java
new file mode 100644
index 0000000..bec5ed7
--- /dev/null
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/password_reset/signup/PasswordResetEmailPanel.java
@@ -0,0 +1,118 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.isis.viewer.wicket.ui.pages.password_reset.signup;
+
+import de.agilecoders.wicket.core.markup.html.bootstrap.common.NotificationPanel;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+import javax.inject.Inject;
+import org.apache.wicket.markup.html.form.Button;
+import org.apache.wicket.markup.html.form.RequiredTextField;
+import org.apache.wicket.markup.html.form.StatelessForm;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.ResourceModel;
+import org.apache.wicket.request.Url;
+import org.apache.wicket.request.UrlRenderer;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.validation.validator.EmailAddressValidator;
+import org.apache.isis.applib.services.email.EmailNotificationService;
+import org.apache.isis.applib.services.email.events.EmailRegistrationEvent;
+import org.apache.isis.applib.services.userreg.UserRegistrationService;
+import org.apache.isis.core.runtime.system.context.IsisContext;
+import org.apache.isis.core.runtime.system.internal.InitialisationSession;
+import org.apache.isis.viewer.wicket.ui.components.widgets.bootstrap.FormGroup;
+import org.apache.isis.viewer.wicket.ui.pages.signup.EmailAvailableValidator;
+
+/**
+ * A panel with a form for creation of new users
+ */
+public class PasswordResetEmailPanel extends Panel {
+
+ /**
+ * Constructor
+ *
+ * @param id
+ * the component id
+ */
+ public PasswordResetEmailPanel(final String id) {
+ super(id);
+
+ addOrReplace(new NotificationPanel("feedback"));
+
+ StatelessForm<Void> form = new StatelessForm<>("signUpForm");
+ addOrReplace(form);
+
+ final RequiredTextField<String> emailField = new RequiredTextField<>("email", Model.of(""));
+ emailField.setLabel(new ResourceModel("emailLabel"));
+ emailField.add(EmailAddressValidator.getInstance());
+ emailField.add(EmailAvailableValidator.DOESNT_EXIST);
+
+ FormGroup formGroup = new FormGroup("formGroup", emailField);
+ form.add(formGroup);
+
+ formGroup.add(emailField);
+
+ Button signUpButton = new Button("passwordResetSubmit") {
+ @Override
+ public void onSubmit() {
+ super.onSubmit();
+
+ String email = emailField.getModelObject();
+
+ String confirmationUrl = createUrl(email);
+
+ boolean emailSent = emailService.send(new EmailRegistrationEvent(email, confirmationUrl));
+ if (emailSent) {
+ Map<String, String> map = new HashMap<>();
+ map.put("email", email);
+ IModel<Map<String, String>> model = Model.ofMap(map);
+ String emailSentMessage = getString("emailSentMessage", model);
+ success(emailSentMessage);
+ }
+ }
+ };
+
+ form.add(signUpButton);
+ }
+
+ private String createUrl(String email) {
+ String uuid = UUID.randomUUID().toString();
+ uuid = uuid.replace("-", "");
+
+ // TODO mgrigorov: either improve the API or use a DB table for this
+ AccountConfirmationMap accountConfirmationMap = getApplication().getMetaData(AccountConfirmationMap.KEY);
+ accountConfirmationMap.put(uuid, email);
+
+ PageParameters parameters = new PageParameters();
+ parameters.set(0, uuid);
+ CharSequence relativeUrl = urlFor(PasswordResetPage.class, parameters);
+ UrlRenderer urlRenderer = getRequestCycle().getUrlRenderer();
+ String fullUrl = urlRenderer.renderFullUrl(Url.parse(relativeUrl));
+
+ return fullUrl;
+ }
+
+ @Inject
+ private EmailNotificationService emailService;
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/790470c8/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/password_reset/signup/PasswordResetPage.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/password_reset/signup/PasswordResetPage.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/password_reset/signup/PasswordResetPage.java
index de0096e..d13779b 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/password_reset/signup/PasswordResetPage.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/password_reset/signup/PasswordResetPage.java
@@ -34,6 +34,8 @@ public class PasswordResetPage extends AccountManagementPageAbstract {
private static final long serialVersionUID = 1L;
+ private static final String ID_CONTENT_PANEL = "passwordResetPanel";
+
public PasswordResetPage(final PageParameters parameters) {
this(parameters, getAndClearExceptionModelIfAny());
}
@@ -48,23 +50,27 @@ public class PasswordResetPage extends AccountManagementPageAbstract {
StringValue uuidValue = getPageParameters().get(0);
if (uuidValue.isEmpty()) {
- addPasswordResetPanel("passwordResetPanel");
+ addPasswordResetEmailPanel(ID_CONTENT_PANEL);
} else {
String uuid = uuidValue.toString();
- AccountConfirmationMap accountConfirmationMap = getApplication().getMetaData(AccountConfirmationMap.KEY);
- String email = accountConfirmationMap.get(uuid);
- // TODO ISIS-987 Show a Panel with password/confirmPassword fields and update the passwd of the user with the given email
-// IsisContext.openSession(new InitialisationSession());
-// final UserRegistrationService userRegistrationService = IsisContext.getPersistenceSession().getServicesInjector().lookupService(UserRegistrationService.class);
-// userRegistrationService.updatePasswordByEmail(email, password);
-// IsisContext.closeSession();
+ // TODO ISIS-987 Check that there is a record in AccountConfirmationMap and an ApplicationUser
+ // Show error feedback.
+ // Otherwise show password reset panel
+
+ addPasswordResetPanel(ID_CONTENT_PANEL, uuid);
}
}
- protected PasswordResetPanel addPasswordResetPanel(String id) {
- final PasswordResetPanel passwordResetPanel = new PasswordResetPanel(id);
+ protected PasswordResetPanel addPasswordResetPanel(String id, String uuid) {
+ final PasswordResetPanel passwordResetPanel = new PasswordResetPanel(id, uuid);
addOrReplace(passwordResetPanel);
return passwordResetPanel;
}
+
+ protected PasswordResetEmailPanel addPasswordResetEmailPanel(String id) {
+ final PasswordResetEmailPanel passwordResetEmailPanel = new PasswordResetEmailPanel(id);
+ addOrReplace(passwordResetEmailPanel);
+ return passwordResetEmailPanel;
+ }
}
http://git-wip-us.apache.org/repos/asf/isis/blob/790470c8/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/password_reset/signup/PasswordResetPage.properties
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/password_reset/signup/PasswordResetPage.properties b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/password_reset/signup/PasswordResetPage.properties
index 9891fcd..c43b8cc 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/password_reset/signup/PasswordResetPage.properties
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/password_reset/signup/PasswordResetPage.properties
@@ -19,8 +19,11 @@
passwordResetHeader=Forgot password
emailLabel=Email
-emailPlaceholder=Enter your email address
-signUpPasswordLabel=Password
-passwordPlaceholder=Enter password
+emailPlaceholder=Enter your email
+passwordLabel=Password
+passwordPlaceholder=Enter your new password
+confirmPasswordLabel=Confirm password
+confirmPasswordPlaceholder=Type the same password again
passwordResetSubmitLabel=Submit
emailSentMessage=An automatic email has been sent to '${email}' for verification.
+noSuchUserByEmail=There is no account with this email
http://git-wip-us.apache.org/repos/asf/isis/blob/790470c8/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/password_reset/signup/PasswordResetPanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/password_reset/signup/PasswordResetPanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/password_reset/signup/PasswordResetPanel.html
index b536773..adfd44b 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/password_reset/signup/PasswordResetPanel.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/password_reset/signup/PasswordResetPanel.html
@@ -20,10 +20,15 @@
<wicket:panel>
<span wicket:id="feedback"></span>
- <form wicket:id="signUpForm" role="form">
- <div class="form-group" wicket:id="formGroup">
- <label wicket:for="email" class="control-label"><wicket:message key="emailLabel"/></label>
- <input type="text" class="form-control" wicket:id="email" wicket:message="placeholder:emailPlaceholder"/>
+ <form wicket:id="passwordResetForm" role="form">
+ <div class="form-group">
+ <label wicket:for="password" class="control-label"><wicket:message key="passwordLabel"/></label>
+ <input type="password" class="form-control" wicket:id="password" wicket:message="placeholder:passwordPlaceholder"/>
+ </div>
+
+ <div class="form-group">
+ <label wicket:for="confirmPassword" class="control-label"><wicket:message key="confirmPasswordLabel"/></label>
+ <input type="password" class="form-control" wicket:id="confirmPassword" wicket:message="placeholder:confirmPasswordPlaceholder"/>
</div>
<button type="submit" wicket:id="passwordResetSubmit" class="btn btn-primary"><wicket:message key="passwordResetSubmitLabel"/></button>
http://git-wip-us.apache.org/repos/asf/isis/blob/790470c8/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/password_reset/signup/PasswordResetPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/password_reset/signup/PasswordResetPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/password_reset/signup/PasswordResetPanel.java
index f588066..c668e86 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/password_reset/signup/PasswordResetPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/password_reset/signup/PasswordResetPanel.java
@@ -26,8 +26,10 @@ import java.util.Map;
import java.util.UUID;
import javax.inject.Inject;
import org.apache.wicket.markup.html.form.Button;
+import org.apache.wicket.markup.html.form.PasswordTextField;
import org.apache.wicket.markup.html.form.RequiredTextField;
import org.apache.wicket.markup.html.form.StatelessForm;
+import org.apache.wicket.markup.html.form.validation.EqualPasswordInputValidator;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
@@ -39,7 +41,6 @@ import org.apache.wicket.validation.validator.EmailAddressValidator;
import org.apache.isis.applib.services.email.EmailNotificationService;
import org.apache.isis.applib.services.email.events.EmailRegistrationEvent;
import org.apache.isis.viewer.wicket.ui.components.widgets.bootstrap.FormGroup;
-import org.apache.isis.viewer.wicket.ui.pages.register.RegisterPage;
/**
* A panel with a form for creation of new users
@@ -51,30 +52,32 @@ public class PasswordResetPanel extends Panel {
*
* @param id
* the component id
+ * @param uuid
*/
- public PasswordResetPanel(final String id) {
+ public PasswordResetPanel(final String id, String uuid) {
super(id);
addOrReplace(new NotificationPanel("feedback"));
- StatelessForm<Void> form = new StatelessForm<>("signUpForm");
+ StatelessForm<Void> form = new StatelessForm<>("passwordResetForm");
addOrReplace(form);
- final RequiredTextField<String> emailField = new RequiredTextField<>("email", Model.of(""));
- emailField.setLabel(new ResourceModel("emailLabel"));
- emailField.add(EmailAddressValidator.getInstance());
+ final PasswordTextField passwordField = new PasswordTextField("password", Model.of(""));
+ passwordField.setLabel(new ResourceModel("passwordLabel"));
+ form.add(passwordField);
- FormGroup formGroup = new FormGroup("formGroup", emailField);
- form.add(formGroup);
+ final PasswordTextField confirmPasswordField = new PasswordTextField("confirmPassword", Model.of(""));
+ confirmPasswordField.setLabel(new ResourceModel("confirmPasswordLabel"));
+ form.add(confirmPasswordField);
- formGroup.add(emailField);
+ form.add(new EqualPasswordInputValidator(passwordField, confirmPasswordField));
Button signUpButton = new Button("passwordResetSubmit") {
@Override
public void onSubmit() {
super.onSubmit();
- String email = emailField.getModelObject();
+ String email = confirmPasswordField.getModelObject();
String confirmationUrl = createUrl(email);
boolean emailSent = emailService.send(new EmailRegistrationEvent(email, confirmationUrl));
http://git-wip-us.apache.org/repos/asf/isis/blob/790470c8/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/signup/EmailAvailableValidator.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/signup/EmailAvailableValidator.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/signup/EmailAvailableValidator.java
index c44eda7..12deb66 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/signup/EmailAvailableValidator.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/signup/EmailAvailableValidator.java
@@ -12,21 +12,24 @@ import org.apache.isis.core.runtime.system.internal.InitialisationSession;
*/
public class EmailAvailableValidator implements IValidator<String> {
- private static final EmailAvailableValidator INSTANCE = new EmailAvailableValidator();
+ public static final EmailAvailableValidator EXISTS = new EmailAvailableValidator(true, "emailIsNotAvailable");
+ public static final EmailAvailableValidator DOESNT_EXIST = new EmailAvailableValidator(false, "noSuchUserByEmail");
- public static EmailAvailableValidator getInstance() {
- return INSTANCE;
- }
+ private final boolean emailExists;
+ private final String resourceKey;
- private EmailAvailableValidator() {}
+ private EmailAvailableValidator(boolean emailExists, String resourceKey) {
+ this.emailExists = emailExists;
+ this.resourceKey = resourceKey;
+ }
@Override
public void validate(IValidatable<String> validatable) {
IsisContext.openSession(new InitialisationSession());
final UserRegistrationService userRegistrationService = IsisContext.getPersistenceSession().getServicesInjector().lookupService(UserRegistrationService.class);
String email = validatable.getValue();
- if (userRegistrationService.emailExists(email)) {
- validatable.error(new ValidationError().addKey("emailIsNotAvailable"));
+ if (userRegistrationService.emailExists(email) == emailExists) {
+ validatable.error(new ValidationError().addKey(resourceKey));
}
IsisContext.closeSession();
}
http://git-wip-us.apache.org/repos/asf/isis/blob/790470c8/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/signup/RegistrationFormPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/signup/RegistrationFormPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/signup/RegistrationFormPanel.java
index ff268f2..fd14c8e 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/signup/RegistrationFormPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/signup/RegistrationFormPanel.java
@@ -62,7 +62,7 @@ public class RegistrationFormPanel extends Panel {
final RequiredTextField<String> emailField = new RequiredTextField<>("email", Model.of(""));
emailField.setLabel(new ResourceModel("emailLabel"));
emailField.add(EmailAddressValidator.getInstance());
- emailField.add(EmailAvailableValidator.getInstance());
+ emailField.add(EmailAvailableValidator.EXISTS);
FormGroup formGroup = new FormGroup("formGroup", emailField);
form.add(formGroup);
http://git-wip-us.apache.org/repos/asf/isis/blob/790470c8/core/applib/src/main/java/org/apache/isis/applib/services/userreg/UserRegistrationService.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/userreg/UserRegistrationService.java b/core/applib/src/main/java/org/apache/isis/applib/services/userreg/UserRegistrationService.java
index a37e7db..5639d4f 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/userreg/UserRegistrationService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/userreg/UserRegistrationService.java
@@ -27,4 +27,7 @@ public interface UserRegistrationService {
@Programmatic
boolean emailExists(String emailAddress);
+
+ @Programmatic
+ void updatePasswordByEmail(String emailAddress, String password);
}