/** * (C) Copyright 2013 Jabylon (http://www.jabylon.org) and others. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ package org.jabylon.rest.ui.wicket.pages; import org.apache.wicket.authroles.authentication.AuthenticatedWebSession; import org.apache.wicket.markup.html.form.Button; 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.TextField; import org.apache.wicket.markup.html.form.validation.EqualPasswordInputValidator; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import org.apache.wicket.model.StringResourceModel; import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.validation.validator.EmailAddressValidator; import org.eclipse.emf.cdo.CDOObject; import org.eclipse.emf.cdo.transaction.CDOTransaction; import org.eclipse.emf.cdo.util.CommitException; import org.eclipse.emf.cdo.view.CDOView; import org.eclipse.emf.ecore.EObject; import org.jabylon.rest.ui.Activator; import org.jabylon.rest.ui.model.AttachableWritableModel; import org.jabylon.rest.ui.model.EObjectModel; import org.jabylon.rest.ui.model.EObjectPropertyModel; import org.jabylon.rest.ui.security.RestrictedComponent; import org.jabylon.rest.ui.wicket.components.ControlGroup; import org.jabylon.rest.ui.wicket.validators.UniqueNameValidator; import org.jabylon.security.CommonPermissions; import org.jabylon.users.User; import org.jabylon.users.UserManagement; import org.jabylon.users.UsersPackage; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * @author jutzig.dev@googlemail.com * */ public class RegisterPage extends GenericPage<User> implements RestrictedComponent { private static final long serialVersionUID = 6952350972929880454L; private static final Logger logger = LoggerFactory.getLogger(RegisterPage.class); public RegisterPage(PageParameters parameters) { super(parameters); } @Override protected void construct() { super.construct(); Form<User> form = new Form<User>("form", getModel()) { private static final long serialVersionUID = 1L; @Override protected void onSubmit() { IModel<User> model = RegisterPage.this.getModel(); User user = model.getObject(); CDOView cdoView = getUserManagement().cdoView(); CDOTransaction transaction = cdoView.getSession().openTransaction(); UserManagement userManagement = transaction.getObject(getUserManagement()); userManagement.getUsers().add(user); model.getObject().setType(CommonPermissions.AUTH_TYPE_DB); CommonPermissions.addDefaultPermissions(userManagement, user); String username = user.getName(); String password = user.getPassword(); commit(userManagement, transaction); AuthenticatedWebSession.get().signIn(username, password); super.onSubmit(); } protected void commit(CDOObject object, CDOTransaction transaction) { try { transaction.commit(); setResponsePage(WelcomePage.class); } catch (CommitException e) { logger.error("failed to commit configuration for " + object, e); } finally { transaction.close(); } } }; add(form); createContents(form); } private void createContents(Form<User> form) { UserManagement userManagement = getUserManagement(); ControlGroup usernameGroup = new ControlGroup("username-group", nls("username.label"), nls("username.help.block")); RequiredTextField<String> userID = new RequiredTextField<String>("username", new EObjectPropertyModel<String, User>(getModel(), UsersPackage.Literals.USER__NAME)); if (userManagement != null) userID.add(UniqueNameValidator.fromCollection(getUserManagement().getUsers(), UsersPackage.Literals.USER__NAME, getModel().getObject())); usernameGroup.add(userID); form.add(usernameGroup); ControlGroup passwordGroup = new ControlGroup("password-group", nls("userpassword.label"), nls("userpassword.help.block")); PasswordTextField passwordTextField = new PasswordTextField("userpassword", new EObjectPropertyModel<String, User>(getModel(), UsersPackage.Literals.USER__PASSWORD)); passwordTextField.setRequired(true); passwordTextField.setResetPassword(false); passwordGroup.add(passwordTextField); form.add(passwordGroup); ControlGroup passwordRepeat = new ControlGroup("password-repeat-group", nls("userpassword.repeat.label")); PasswordTextField passwordRepeatTextField = new PasswordTextField("userpassword-repeat", Model.of("")); passwordRepeatTextField.setRequired(true); passwordRepeatTextField.setResetPassword(false); passwordRepeat.add(passwordRepeatTextField); form.add(passwordRepeat); ControlGroup emailGroup = new ControlGroup("email-group", nls("email.label"), nls("email.help.block")); TextField<String> emailField = new TextField<String>("email", new EObjectPropertyModel<String, User>(getModel(), UsersPackage.Literals.USER__EMAIL)); emailGroup.add(emailField); emailField.add(EmailAddressValidator.getInstance()); emailField.setRequired(true); form.add(emailGroup); ControlGroup displaynameGroup = new ControlGroup("displayname-group", nls("displayName.label"), nls("displayName.help.block")); TextField<String> displayName = new TextField<String>("displayName", new EObjectPropertyModel<String, User>(getModel(), UsersPackage.Literals.USER__DISPLAY_NAME)); displaynameGroup.add(displayName); displayName.setRequired(true); form.add(displaynameGroup); form.add(new EqualPasswordInputValidator(passwordTextField, passwordRepeatTextField)); ControlGroup submitGroup = new ControlGroup("submit-group", null); Button submitButton = new Button("submit", new StringResourceModel("submit.button.label", this, null)); submitGroup.add(submitButton); form.add(submitGroup); } private UserManagement getUserManagement() { User anonymous = Activator.getDefault().getAuthenticationService().getAnonymousUser(); EObject userManagement = anonymous.eContainer(); return (UserManagement) userManagement; } @Override protected IModel<User> createModel(PageParameters params) { return new AttachableWritableModel<User>(UsersPackage.Literals.USER, new EObjectModel<UserManagement>(getUserManagement()), UsersPackage.Literals.USER_MANAGEMENT__USERS); } @Override public String getRequiredPermission() { return CommonPermissions.USER_REGISTER; } }