X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.security.ui.admin%2Fsrc%2Forg%2Fargeo%2Fsecurity%2Fui%2Fadmin%2Finternal%2Fcommands%2FNewUser.java;h=c04c83562f3cad02fdbbed82a40b5eedf4cd728e;hb=8260f4470f514ea347ca53f5b4dfc632c4a4de66;hp=838e66ff57cb554264218195a84ebf95d689410c;hpb=8fea21d044841079b2f490c00da5d0902d50c3eb;p=lgpl%2Fargeo-commons.git
diff --git a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/commands/NewUser.java b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/commands/NewUser.java
index 838e66ff5..c04c83562 100644
--- a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/commands/NewUser.java
+++ b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/commands/NewUser.java
@@ -17,19 +17,20 @@ package org.argeo.security.ui.admin.internal.commands;
import java.util.Dictionary;
import java.util.List;
+import java.util.Map;
import javax.naming.InvalidNameException;
import javax.naming.ldap.LdapName;
import javax.naming.ldap.Rdn;
-import org.argeo.ArgeoException;
+import org.argeo.cms.CmsException;
+import org.argeo.cms.util.useradmin.UserAdminUtils;
import org.argeo.eclipse.ui.EclipseUiUtils;
import org.argeo.eclipse.ui.dialogs.ErrorFeedback;
import org.argeo.jcr.ArgeoNames;
-import org.argeo.security.UserAdminService;
+import org.argeo.osgi.useradmin.LdifName;
+import org.argeo.osgi.useradmin.UserAdminConf;
import org.argeo.security.ui.admin.SecurityAdminPlugin;
-import org.argeo.security.ui.admin.internal.UiAdminUtils;
-import org.argeo.security.ui.admin.internal.UserAdminConstants;
import org.argeo.security.ui.admin.internal.UserAdminWrapper;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
@@ -53,6 +54,13 @@ import org.osgi.service.useradmin.UserAdminEvent;
/** Open a wizard that enables creation of a new user. */
public class NewUser extends AbstractHandler {
+ /**
+ * Email addresses must match this regexp pattern ({@value #EMAIL_PATTERN}.
+ * Thanks to this tip.
+ */
+ public final static String EMAIL_PATTERN = "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
// private final static Log log = LogFactory.getLog(NewUser.class);
public final static String ID = SecurityAdminPlugin.PLUGIN_ID + ".newUser";
@@ -61,27 +69,13 @@ public class NewUser extends AbstractHandler {
public Object execute(ExecutionEvent event) throws ExecutionException {
NewUserWizard newUserWizard = new NewUserWizard();
+ newUserWizard.setWindowTitle("User creation");
WizardDialog dialog = new WizardDialog(
HandlerUtil.getActiveShell(event), newUserWizard);
-
dialog.open();
-
- // // Force refresh until the listener are implemented
- // if (Window.OK == dialog.open())
- // forceRefresh(event);
return null;
}
- // private void forceRefresh(ExecutionEvent event) {
- // IWorkbenchWindow iww = HandlerUtil.getActiveWorkbenchWindow(event);
- // if (iww == null)
- // return;
- // IWorkbenchPage activePage = iww.getActivePage();
- // IWorkbenchPart part = activePage.getActivePart();
- // if (part instanceof UsersView)
- // ((UsersView) part).refresh();
- // }
-
private class NewUserWizard extends Wizard {
// pages
@@ -93,13 +87,15 @@ public class NewUser extends AbstractHandler {
private Combo baseDnCmb;
public NewUserWizard() {
+
}
@Override
public void addPages() {
mainUserInfo = new MainUserInfoWizardPage();
addPage(mainUserInfo);
- String message = "Dummy wizard to ease user creation tests:\n Mail and last name are automatically "
+ String message = "Default wizard that also eases user creation tests:\n "
+ + "Mail and last name are automatically "
+ "generated form the uid. Password are defauted to 'demo'.";
mainUserInfo.setMessage(message, WizardPage.WARNING);
}
@@ -110,33 +106,33 @@ public class NewUser extends AbstractHandler {
if (!canFinish())
return false;
String username = mainUserInfo.getUsername();
+ userAdminWrapper.beginTransactionIfNeeded();
try {
- userAdminWrapper.beginTransactionIfNeeded();
User user = (User) userAdminWrapper.getUserAdmin().createRole(
getDn(username), Role.USER);
Dictionary props = user.getProperties();
String lastNameStr = lastNameTxt.getText();
- if (UiAdminUtils.notNull(lastNameStr))
- props.put(UserAdminConstants.KEY_LASTNAME, lastNameStr);
+ if (EclipseUiUtils.notEmpty(lastNameStr))
+ props.put(LdifName.sn.name(), lastNameStr);
String firstNameStr = firstNameTxt.getText();
- if (UiAdminUtils.notNull(firstNameStr))
- props.put(UserAdminConstants.KEY_FIRSTNAME, firstNameStr);
+ if (EclipseUiUtils.notEmpty(firstNameStr))
+ props.put(LdifName.givenName.name(), firstNameStr);
- String cn = UiAdminUtils
- .getDefaultCn(firstNameStr, lastNameStr);
- if (UiAdminUtils.notNull(cn))
- props.put(UserAdminConstants.KEY_CN, cn);
+ String cn = UserAdminUtils.buildDefaultCn(firstNameStr,
+ lastNameStr);
+ if (EclipseUiUtils.notEmpty(cn))
+ props.put(LdifName.cn.name(), cn);
String mailStr = primaryMailTxt.getText();
- if (UiAdminUtils.notNull(mailStr))
- props.put(UserAdminConstants.KEY_MAIL, mailStr);
+ if (EclipseUiUtils.notEmpty(mailStr))
+ props.put(LdifName.mail.name(), mailStr);
char[] password = mainUserInfo.getPassword();
user.getCredentials().put(null, password);
-
+ userAdminWrapper.commitOrNotifyTransactionStateChange();
userAdminWrapper.notifyListeners(new UserAdminEvent(null,
UserAdminEvent.ROLE_CREATED, user));
return true;
@@ -163,8 +159,9 @@ public class NewUser extends AbstractHandler {
"Distinguished name", this);
dNameTxt.setEnabled(false);
- baseDnCmb = createGridLC(composite, "Base DN", this);
+ baseDnCmb = createGridLC(composite, "Base DN");
initialiseDnCmb(baseDnCmb);
+ baseDnCmb.addModifyListener(this);
baseDnCmb.addModifyListener(new ModifyListener() {
private static final long serialVersionUID = -1435351236582736843L;
@@ -239,8 +236,7 @@ public class NewUser extends AbstractHandler {
.getRole(getDn(name));
if (role != null)
return "User " + name + " already exists";
- if (!primaryMailTxt.getText().matches(
- UserAdminService.EMAIL_PATTERN))
+ if (!primaryMailTxt.getText().matches(EMAIL_PATTERN))
return "Not a valid email address";
if (lastNameTxt.getText().trim().equals(""))
return "Specify a last name";
@@ -257,7 +253,10 @@ public class NewUser extends AbstractHandler {
public void setVisible(boolean visible) {
super.setVisible(visible);
if (visible)
- usernameTxt.setFocus();
+ if (baseDnCmb.getSelectionIndex() == -1)
+ baseDnCmb.setFocus();
+ else
+ usernameTxt.setFocus();
}
public String getUsername() {
@@ -270,17 +269,31 @@ public class NewUser extends AbstractHandler {
}
+ private Map getDns() {
+ return userAdminWrapper.getKnownBaseDns(true);
+ }
+
private String getDn(String uid) {
- return "uid=" + uid + ",ou=users," + baseDnCmb.getText();
+ Map dns = getDns();
+ String bdn = baseDnCmb.getText();
+ if (EclipseUiUtils.notEmpty(bdn)) {
+ Dictionary props = UserAdminConf.uriAsProperties(dns
+ .get(bdn));
+ String dn = LdifName.uid.name() + "=" + uid + ","
+ + UserAdminConf.userBase.getValue(props) + "," + bdn;
+ return dn;
+ }
+ return null;
}
private void initialiseDnCmb(Combo combo) {
- List dns = userAdminWrapper.getKnownBaseDns(true);
+ Map dns = userAdminWrapper.getKnownBaseDns(true);
if (dns.isEmpty())
- throw new ArgeoException(
+ throw new CmsException(
"No writable base dn found. Cannot create user");
- combo.setItems(dns.toArray(new String[0]));
- // combo.select(0);
+ combo.setItems(dns.keySet().toArray(new String[0]));
+ if (dns.size() == 1)
+ combo.select(0);
}
private String getMail(String username) {
@@ -293,22 +306,18 @@ public class NewUser extends AbstractHandler {
return username + "@" + (String) rdns.get(1).getValue() + '.'
+ (String) rdns.get(0).getValue();
} catch (InvalidNameException e) {
- throw new ArgeoException("Unable to generate mail for "
+ throw new CmsException("Unable to generate mail for "
+ username + " with base dn " + baseDn, e);
}
}
-
}
- private Combo createGridLC(Composite parent, String label,
- ModifyListener modifyListener) {
+ private Combo createGridLC(Composite parent, String label) {
Label lbl = new Label(parent, SWT.LEAD);
lbl.setText(label);
lbl.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false));
Combo combo = new Combo(parent, SWT.LEAD | SWT.BORDER | SWT.READ_ONLY);
combo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
- if (modifyListener != null)
- combo.addModifyListener(modifyListener);
return combo;
}