]> git.argeo.org Git - lgpl/argeo-commons.git/blob - security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/wizards/MainUserInfoWizardPage.java
Introduce delete roles and users
[lgpl/argeo-commons.git] / security / plugins / org.argeo.security.ui.admin / src / main / java / org / argeo / security / ui / admin / wizards / MainUserInfoWizardPage.java
1 package org.argeo.security.ui.admin.wizards;
2
3 import javax.jcr.Node;
4 import javax.jcr.Property;
5 import javax.jcr.RepositoryException;
6
7 import org.argeo.ArgeoException;
8 import org.argeo.eclipse.ui.EclipseUiUtils;
9 import org.argeo.jcr.ArgeoNames;
10 import org.argeo.security.UserAdminService;
11 import org.eclipse.jface.wizard.WizardPage;
12 import org.eclipse.swt.SWT;
13 import org.eclipse.swt.events.ModifyEvent;
14 import org.eclipse.swt.events.ModifyListener;
15 import org.eclipse.swt.layout.GridLayout;
16 import org.eclipse.swt.widgets.Composite;
17 import org.eclipse.swt.widgets.Text;
18 import org.springframework.security.userdetails.UserDetails;
19 import org.springframework.security.userdetails.UsernameNotFoundException;
20
21 public class MainUserInfoWizardPage extends WizardPage implements
22 ModifyListener, ArgeoNames {
23 private Text username, firstName, lastName, primaryEmail, password1,
24 password2;
25 private UserAdminService userAdminService;
26
27 public MainUserInfoWizardPage(UserAdminService userAdminService) {
28 super("Main");
29 this.userAdminService = userAdminService;
30 setTitle("Required Information");
31 }
32
33 @Override
34 public void createControl(Composite parent) {
35 Composite composite = new Composite(parent, SWT.NONE);
36 composite.setLayout(new GridLayout(2, false));
37 username = EclipseUiUtils.createGridLT(composite, "Username", this);
38 primaryEmail = EclipseUiUtils.createGridLT(composite, "Email", this);
39 firstName = EclipseUiUtils.createGridLT(composite, "First name", this);
40 lastName = EclipseUiUtils.createGridLT(composite, "Last name", this);
41 password1 = EclipseUiUtils.createGridLP(composite, "Password", this);
42 password2 = EclipseUiUtils.createGridLP(composite, "Repeat password",
43 this);
44 setControl(composite);
45 }
46
47 @Override
48 public void modifyText(ModifyEvent event) {
49 String message = checkComplete();
50 if (message != null)
51 setMessage(message, WizardPage.ERROR);
52 else {
53 setMessage("Complete", WizardPage.INFORMATION);
54 setPageComplete(true);
55 }
56 }
57
58 /** @return error message or null if complete */
59 protected String checkComplete() {
60 if (!username.getText().matches(UserAdminService.USERNAME_PATTERN))
61 return "Wrong user name format, should be lower case, between 3 and 15 characters with only '_' as acceptable special character.";
62 try {
63 UserDetails userDetails = userAdminService
64 .loadUserByUsername(username.getText());
65 return "User " + userDetails.getUsername() + " alreayd exists";
66 } catch (UsernameNotFoundException e) {
67 // silent
68 }
69 if (!primaryEmail.getText().matches(UserAdminService.EMAIL_PATTERN))
70 return "Not a valid email address";
71 if (firstName.getText().trim().equals(""))
72 return "Specify a first name";
73 if (lastName.getText().trim().equals(""))
74 return "Specify a last name";
75 if (password1.getText().trim().equals(""))
76 return "Specify a password";
77 if (password2.getText().trim().equals(""))
78 return "Repeat the password";
79 if (!password2.getText().equals(password1.getText()))
80 return "Passwords are different";
81 return null;
82 }
83
84 public String getUsername() {
85 return username.getText();
86 }
87
88 public String getPassword() {
89 return password1.getText();
90 }
91
92 public void mapToProfileNode(Node up) {
93 try {
94 up.setProperty(ARGEO_PRIMARY_EMAIL, primaryEmail.getText());
95 up.setProperty(ARGEO_FIRST_NAME, firstName.getText());
96 up.setProperty(ARGEO_LAST_NAME, lastName.getText());
97
98 // derived values
99 // TODO add wizard pages to do it
100 up.setProperty(Property.JCR_TITLE, firstName.getText() + " "
101 + lastName.getText());
102 up.setProperty(Property.JCR_DESCRIPTION, "");
103 } catch (RepositoryException e) {
104 throw new ArgeoException("Cannot map to " + up, e);
105 }
106 }
107 }