From 3691dcd98fbc263c76f10e674daf0ad042240406 Mon Sep 17 00:00:00 2001 From: Athou Date: Sat, 6 Apr 2013 21:38:18 +0200 Subject: [PATCH] added registration on welcome page --- .../commafeed/backend/dao/UserService.java | 8 +- .../com/commafeed/backend/model/User.java | 8 ++ .../frontend/CommaFeedApplication.java | 6 +- .../frontend/model/RegistrationRequest.java | 36 +++++++++ .../commafeed/frontend/pages/HomePage.html | 1 + .../commafeed/frontend/pages/LoginPage.html | 16 ---- .../commafeed/frontend/pages/LoginPage.java | 11 --- .../commafeed/frontend/pages/WelcomePage.html | 21 +++++ .../commafeed/frontend/pages/WelcomePage.java | 13 ++++ .../frontend/pages/auth/LoginPanel.java | 12 --- .../components/BootstrapFeedbackPanel.css | 3 + .../components/BootstrapFeedbackPanel.java | 62 +++++++++++++++ .../{auth => components}/LoginPanel.html | 0 .../frontend/pages/components/LoginPanel.java | 17 +++++ .../pages/components/RegisterPanel.html | 31 ++++++++ .../pages/components/RegisterPanel.java | 76 +++++++++++++++++++ 16 files changed, 278 insertions(+), 43 deletions(-) create mode 100644 src/main/java/com/commafeed/frontend/model/RegistrationRequest.java delete mode 100644 src/main/java/com/commafeed/frontend/pages/LoginPage.html delete mode 100644 src/main/java/com/commafeed/frontend/pages/LoginPage.java create mode 100644 src/main/java/com/commafeed/frontend/pages/WelcomePage.html create mode 100644 src/main/java/com/commafeed/frontend/pages/WelcomePage.java delete mode 100644 src/main/java/com/commafeed/frontend/pages/auth/LoginPanel.java create mode 100644 src/main/java/com/commafeed/frontend/pages/components/BootstrapFeedbackPanel.css create mode 100644 src/main/java/com/commafeed/frontend/pages/components/BootstrapFeedbackPanel.java rename src/main/java/com/commafeed/frontend/pages/{auth => components}/LoginPanel.html (100%) create mode 100644 src/main/java/com/commafeed/frontend/pages/components/LoginPanel.java create mode 100644 src/main/java/com/commafeed/frontend/pages/components/RegisterPanel.html create mode 100644 src/main/java/com/commafeed/frontend/pages/components/RegisterPanel.java diff --git a/src/main/java/com/commafeed/backend/dao/UserService.java b/src/main/java/com/commafeed/backend/dao/UserService.java index 1208641e..be74fbc4 100644 --- a/src/main/java/com/commafeed/backend/dao/UserService.java +++ b/src/main/java/com/commafeed/backend/dao/UserService.java @@ -19,7 +19,7 @@ public class UserService extends GenericDAO { @Inject PasswordEncryptionService encryptionService; - private User findByName(String name) { + public User findByName(String name) { TypedQuery query = em.createNamedQuery("User.byName", User.class); query.setParameter("name", name.toLowerCase()); @@ -46,12 +46,18 @@ public class UserService extends GenericDAO { } public User register(String name, String password, Collection roles) { + return register(name, password, null, roles); + } + + public User register(String name, String password, String email, + Collection roles) { if (findByName(name) != null) { return null; } User user = new User(); byte[] salt = encryptionService.generateSalt(); user.setName(name); + user.setEmail(email); user.setSalt(salt); user.setPassword(encryptionService.getEncryptedPassword(password, salt)); user.getRoles().add(new UserRole(user, Role.USER)); diff --git a/src/main/java/com/commafeed/backend/model/User.java b/src/main/java/com/commafeed/backend/model/User.java index 9dd9b768..d00dfa16 100644 --- a/src/main/java/com/commafeed/backend/model/User.java +++ b/src/main/java/com/commafeed/backend/model/User.java @@ -77,4 +77,12 @@ public class User extends AbstractModel { this.disabled = disabled; } + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + } diff --git a/src/main/java/com/commafeed/frontend/CommaFeedApplication.java b/src/main/java/com/commafeed/frontend/CommaFeedApplication.java index fe1603ac..a890b6f1 100644 --- a/src/main/java/com/commafeed/frontend/CommaFeedApplication.java +++ b/src/main/java/com/commafeed/frontend/CommaFeedApplication.java @@ -42,7 +42,7 @@ import com.commafeed.frontend.pages.FaviconPage; import com.commafeed.frontend.pages.GoogleImportCallbackPage; import com.commafeed.frontend.pages.GoogleImportRedirectPage; import com.commafeed.frontend.pages.HomePage; -import com.commafeed.frontend.pages.LoginPage; +import com.commafeed.frontend.pages.WelcomePage; import com.commafeed.frontend.pages.LogoutPage; import com.commafeed.frontend.utils.exception.DisplayExceptionPage; @@ -57,7 +57,7 @@ public class CommaFeedApplication extends AuthenticatedWebApplication { protected void init() { super.init(); - mountPage("login", LoginPage.class); + mountPage("welcome", WelcomePage.class); mountPage("logout", LogoutPage.class); mountPage("error", DisplayExceptionPage.class); mountPage("favicon", FaviconPage.class); @@ -135,7 +135,7 @@ public class CommaFeedApplication extends AuthenticatedWebApplication { @Override protected Class getSignInPageClass() { - return LoginPage.class; + return WelcomePage.class; } @Override diff --git a/src/main/java/com/commafeed/frontend/model/RegistrationRequest.java b/src/main/java/com/commafeed/frontend/model/RegistrationRequest.java new file mode 100644 index 00000000..799c27ac --- /dev/null +++ b/src/main/java/com/commafeed/frontend/model/RegistrationRequest.java @@ -0,0 +1,36 @@ +package com.commafeed.frontend.model; + +import java.io.Serializable; + +@SuppressWarnings("serial") +public class RegistrationRequest implements Serializable { + + private String name; + private String password; + private String email; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + +} diff --git a/src/main/java/com/commafeed/frontend/pages/HomePage.html b/src/main/java/com/commafeed/frontend/pages/HomePage.html index 0d251047..f995293e 100644 --- a/src/main/java/com/commafeed/frontend/pages/HomePage.html +++ b/src/main/java/com/commafeed/frontend/pages/HomePage.html @@ -2,6 +2,7 @@ CommaFeed +
diff --git a/src/main/java/com/commafeed/frontend/pages/LoginPage.html b/src/main/java/com/commafeed/frontend/pages/LoginPage.html deleted file mode 100644 index 10e89550..00000000 --- a/src/main/java/com/commafeed/frontend/pages/LoginPage.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - -
- -
- -
-
- - diff --git a/src/main/java/com/commafeed/frontend/pages/LoginPage.java b/src/main/java/com/commafeed/frontend/pages/LoginPage.java deleted file mode 100644 index 81fa6c72..00000000 --- a/src/main/java/com/commafeed/frontend/pages/LoginPage.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.commafeed.frontend.pages; - -import com.commafeed.frontend.pages.auth.LoginPanel; - -@SuppressWarnings("serial") -public class LoginPage extends BasePage { - - public LoginPage() { - add(new LoginPanel("login")); - } -} diff --git a/src/main/java/com/commafeed/frontend/pages/WelcomePage.html b/src/main/java/com/commafeed/frontend/pages/WelcomePage.html new file mode 100644 index 00000000..aa97aaa9 --- /dev/null +++ b/src/main/java/com/commafeed/frontend/pages/WelcomePage.html @@ -0,0 +1,21 @@ + + + + +CommaFeed + + +
+
+
+

Login

+ +
+
+

Register

+ +
+
+
+ + diff --git a/src/main/java/com/commafeed/frontend/pages/WelcomePage.java b/src/main/java/com/commafeed/frontend/pages/WelcomePage.java new file mode 100644 index 00000000..a70afd13 --- /dev/null +++ b/src/main/java/com/commafeed/frontend/pages/WelcomePage.java @@ -0,0 +1,13 @@ +package com.commafeed.frontend.pages; + +import com.commafeed.frontend.pages.components.LoginPanel; +import com.commafeed.frontend.pages.components.RegisterPanel; + +@SuppressWarnings("serial") +public class WelcomePage extends BasePage { + + public WelcomePage() { + add(new LoginPanel("login")); + add(new RegisterPanel("register")); + } +} diff --git a/src/main/java/com/commafeed/frontend/pages/auth/LoginPanel.java b/src/main/java/com/commafeed/frontend/pages/auth/LoginPanel.java deleted file mode 100644 index b165e541..00000000 --- a/src/main/java/com/commafeed/frontend/pages/auth/LoginPanel.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.commafeed.frontend.pages.auth; - -import org.apache.wicket.authroles.authentication.panel.SignInPanel; - -@SuppressWarnings("serial") -public class LoginPanel extends SignInPanel { - - public LoginPanel(String id) { - super(id); - } - -} diff --git a/src/main/java/com/commafeed/frontend/pages/components/BootstrapFeedbackPanel.css b/src/main/java/com/commafeed/frontend/pages/components/BootstrapFeedbackPanel.css new file mode 100644 index 00000000..45ede0f3 --- /dev/null +++ b/src/main/java/com/commafeed/frontend/pages/components/BootstrapFeedbackPanel.css @@ -0,0 +1,3 @@ +.bs-fb ul { + margin-bottom: 0px; +} \ No newline at end of file diff --git a/src/main/java/com/commafeed/frontend/pages/components/BootstrapFeedbackPanel.java b/src/main/java/com/commafeed/frontend/pages/components/BootstrapFeedbackPanel.java new file mode 100644 index 00000000..ed4665df --- /dev/null +++ b/src/main/java/com/commafeed/frontend/pages/components/BootstrapFeedbackPanel.java @@ -0,0 +1,62 @@ +package com.commafeed.frontend.pages.components; + +import org.apache.wicket.behavior.AttributeAppender; +import org.apache.wicket.feedback.IFeedbackMessageFilter; +import org.apache.wicket.markup.ComponentTag; +import org.apache.wicket.markup.head.IHeaderResponse; +import org.apache.wicket.markup.html.panel.FeedbackPanel; +import org.apache.wicket.model.AbstractReadOnlyModel; + +import com.commafeed.frontend.utils.WicketUtils; + +import de.agilecoders.wicket.Bootstrap; + +@SuppressWarnings("serial") +public class BootstrapFeedbackPanel extends FeedbackPanel { + + public BootstrapFeedbackPanel(String id) { + super(id); + init(); + } + + public BootstrapFeedbackPanel(String id, IFeedbackMessageFilter filter) { + super(id, filter); + init(); + } + + private void init() { + setOutputMarkupPlaceholderTag(true); + add(new AttributeAppender("class", new AbstractReadOnlyModel() { + + @Override + public String getObject() { + StringBuilder sb = new StringBuilder(); + if (anyMessage()) { + sb.append(" bs-fb alert"); + } + if (anyErrorMessage()) { + sb.append(" alert-error"); + } else { + sb.append(" alert-success"); + } + return sb.toString(); + } + })); + + get("feedbackul").add(new AttributeAppender("class", " unstyled")); + } + + @Override + protected void onComponentTag(ComponentTag tag) { + tag.setName("div"); + super.onComponentTag(tag); + } + + @Override + public void renderHead(IHeaderResponse response) { + super.renderHead(response); + Bootstrap.renderHead(response); + WicketUtils.loadCSS(response, BootstrapFeedbackPanel.class); + } + +} diff --git a/src/main/java/com/commafeed/frontend/pages/auth/LoginPanel.html b/src/main/java/com/commafeed/frontend/pages/components/LoginPanel.html similarity index 100% rename from src/main/java/com/commafeed/frontend/pages/auth/LoginPanel.html rename to src/main/java/com/commafeed/frontend/pages/components/LoginPanel.html diff --git a/src/main/java/com/commafeed/frontend/pages/components/LoginPanel.java b/src/main/java/com/commafeed/frontend/pages/components/LoginPanel.java new file mode 100644 index 00000000..942b33fa --- /dev/null +++ b/src/main/java/com/commafeed/frontend/pages/components/LoginPanel.java @@ -0,0 +1,17 @@ +package com.commafeed.frontend.pages.components; + +import org.apache.wicket.MarkupContainer; +import org.apache.wicket.authroles.authentication.panel.SignInPanel; +import org.apache.wicket.feedback.ContainerFeedbackMessageFilter; + +@SuppressWarnings("serial") +public class LoginPanel extends SignInPanel { + + public LoginPanel(String id) { + super(id); + replace(new BootstrapFeedbackPanel("feedback", + new ContainerFeedbackMessageFilter( + (MarkupContainer) get("signInForm")))); + } + +} diff --git a/src/main/java/com/commafeed/frontend/pages/components/RegisterPanel.html b/src/main/java/com/commafeed/frontend/pages/components/RegisterPanel.html new file mode 100644 index 00000000..eb55c16c --- /dev/null +++ b/src/main/java/com/commafeed/frontend/pages/components/RegisterPanel.html @@ -0,0 +1,31 @@ + + + + +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+
+
+ + diff --git a/src/main/java/com/commafeed/frontend/pages/components/RegisterPanel.java b/src/main/java/com/commafeed/frontend/pages/components/RegisterPanel.java new file mode 100644 index 00000000..c008f417 --- /dev/null +++ b/src/main/java/com/commafeed/frontend/pages/components/RegisterPanel.java @@ -0,0 +1,76 @@ +package com.commafeed.frontend.pages.components; + +import java.util.Arrays; + +import javax.inject.Inject; + +import org.apache.wicket.authentication.IAuthenticationStrategy; +import org.apache.wicket.feedback.ContainerFeedbackMessageFilter; +import org.apache.wicket.markup.html.form.EmailTextField; +import org.apache.wicket.markup.html.form.Form; +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.panel.Panel; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.Model; +import org.apache.wicket.validation.IValidatable; +import org.apache.wicket.validation.IValidator; +import org.apache.wicket.validation.ValidationError; +import org.apache.wicket.validation.validator.StringValidator; + +import com.commafeed.backend.dao.UserService; +import com.commafeed.backend.model.User; +import com.commafeed.backend.model.UserRole.Role; +import com.commafeed.frontend.model.RegistrationRequest; +import com.commafeed.frontend.utils.ModelFactory.MF; + +@SuppressWarnings("serial") +public class RegisterPanel extends Panel { + + @Inject + UserService userService; + + public RegisterPanel(String markupId) { + super(markupId); + + IModel model = Model.of(new RegistrationRequest()); + + Form form = new StatelessForm( + "form", model) { + @Override + protected void onSubmit() { + RegistrationRequest req = getModelObject(); + userService.register(req.getName(), req.getPassword(), + Arrays.asList(Role.USER)); + IAuthenticationStrategy strategy = getApplication() + .getSecuritySettings().getAuthenticationStrategy(); + strategy.save(req.getName(), req.getPassword()); + setResponsePage(getApplication().getHomePage()); + } + }; + add(form); + add(new BootstrapFeedbackPanel("feedback", + new ContainerFeedbackMessageFilter(form))); + + RegistrationRequest p = MF.p(RegistrationRequest.class); + form.add(new RequiredTextField("name", MF.m(model, p.getName())) + .add(StringValidator.lengthBetween(3, 32)).add( + new IValidator() { + @Override + public void validate( + IValidatable validatable) { + String name = validatable.getValue(); + User user = userService.findByName(name); + if (user != null) { + validatable.error(new ValidationError( + "Name is already taken.")); + } + } + })); + form.add(new PasswordTextField("password", MF.m(model, p.getPassword())) + .setResetPassword(false).add(StringValidator.minimumLength(6))); + form.add(new EmailTextField("email", MF.m(model, p.getEmail()))); + + } +}