From 11703221f489a07fec8f1ccbfacbe401587e9ce5 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Sun, 30 Jan 2011 21:51:48 +0000 Subject: [PATCH] Make security UI more robust git-svn-id: https://svn.argeo.org/commons/trunk@4100 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../AbstractSecureApplication.java | 3 +- .../RapSecureWorkbenchWindowAdvisor.java | 10 ----- .../application/SecureActionBarAdvisor.java | 10 ----- .../security/ui/editors/ArgeoUserEditor.java | 11 +---- .../ui/editors/DefaultUserMainPage.java | 45 +++++++++++++++++++ .../security/core/DefaultSecurityService.java | 20 +++++++-- .../ldap/nature/SimpleUserNatureMapper.java | 3 +- 7 files changed, 66 insertions(+), 36 deletions(-) diff --git a/security/eclipse/plugins/org.argeo.security.ui.application/src/main/java/org/argeo/security/ui/application/AbstractSecureApplication.java b/security/eclipse/plugins/org.argeo.security.ui.application/src/main/java/org/argeo/security/ui/application/AbstractSecureApplication.java index c3bf6b113..3a92e5273 100644 --- a/security/eclipse/plugins/org.argeo.security.ui.application/src/main/java/org/argeo/security/ui/application/AbstractSecureApplication.java +++ b/security/eclipse/plugins/org.argeo.security.ui.application/src/main/java/org/argeo/security/ui/application/AbstractSecureApplication.java @@ -23,6 +23,7 @@ public abstract class AbstractSecureApplication implements IApplication { protected abstract WorkbenchAdvisor createWorkbenchAdvisor(); + @SuppressWarnings("unchecked") public Object start(IApplicationContext context) throws Exception { Integer returnCode = null; @@ -49,8 +50,6 @@ public abstract class AbstractSecureApplication implements IApplication { log.debug("Logged in as " + username); returnCode = (Integer) Subject.doAs(CurrentUser.getSubject(), getRunAction(display)); - if (log.isDebugEnabled()) - log.debug("secure action completed"); CurrentUser.logout(); return processReturnCode(returnCode); } catch (Exception e) { diff --git a/security/eclipse/plugins/org.argeo.security.ui.application/src/main/java/org/argeo/security/ui/application/RapSecureWorkbenchWindowAdvisor.java b/security/eclipse/plugins/org.argeo.security.ui.application/src/main/java/org/argeo/security/ui/application/RapSecureWorkbenchWindowAdvisor.java index 6cc6fe2ae..fb4911a08 100644 --- a/security/eclipse/plugins/org.argeo.security.ui.application/src/main/java/org/argeo/security/ui/application/RapSecureWorkbenchWindowAdvisor.java +++ b/security/eclipse/plugins/org.argeo.security.ui.application/src/main/java/org/argeo/security/ui/application/RapSecureWorkbenchWindowAdvisor.java @@ -1,7 +1,5 @@ package org.argeo.security.ui.application; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; @@ -12,9 +10,6 @@ import org.eclipse.ui.application.IWorkbenchWindowConfigurer; public class RapSecureWorkbenchWindowAdvisor extends SecureWorkbenchWindowAdvisor { - private final static Log log = LogFactory - .getLog(RapSecureWorkbenchWindowAdvisor.class); - public RapSecureWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) { super(configurer); } @@ -27,11 +22,6 @@ public class RapSecureWorkbenchWindowAdvisor extends public void preWindowOpen() { IWorkbenchWindowConfigurer configurer = getWindowConfigurer(); - // configurer.setInitialSize(new Point(800, 600)); - -// if (log.isDebugEnabled()) -// log.debug("CHAR ENCODING" -// + System.getProperty("file.encoding")); configurer.setShowCoolBar(true); configurer.setShowMenuBar(true); configurer.setShowStatusLine(false); diff --git a/security/eclipse/plugins/org.argeo.security.ui.application/src/main/java/org/argeo/security/ui/application/SecureActionBarAdvisor.java b/security/eclipse/plugins/org.argeo.security.ui.application/src/main/java/org/argeo/security/ui/application/SecureActionBarAdvisor.java index fee492691..61a3c0407 100644 --- a/security/eclipse/plugins/org.argeo.security.ui.application/src/main/java/org/argeo/security/ui/application/SecureActionBarAdvisor.java +++ b/security/eclipse/plugins/org.argeo.security.ui.application/src/main/java/org/argeo/security/ui/application/SecureActionBarAdvisor.java @@ -20,7 +20,6 @@ public class SecureActionBarAdvisor extends ActionBarAdvisor { private IWorkbenchAction openPerspectiveDialogAction; private IWorkbenchAction showViewMenuAction; private IWorkbenchAction preferences; - private IWorkbenchAction helpContentAction; private IWorkbenchAction saveAction; private IWorkbenchAction saveAllAction; private IWorkbenchAction closeAllAction; @@ -40,8 +39,6 @@ public class SecureActionBarAdvisor extends ActionBarAdvisor { register(openPerspectiveDialogAction); showViewMenuAction = ActionFactory.SHOW_VIEW_MENU.create(window); register(showViewMenuAction); - helpContentAction = ActionFactory.HELP_CONTENTS.create(window); - register(helpContentAction); exitAction = ActionFactory.QUIT.create(window); register(exitAction); @@ -63,15 +60,12 @@ public class SecureActionBarAdvisor extends ActionBarAdvisor { IWorkbenchActionConstants.M_EDIT); MenuManager windowMenu = new MenuManager("&Window", IWorkbenchActionConstants.M_WINDOW); - MenuManager helpMenu = new MenuManager("&Help", - IWorkbenchActionConstants.M_HELP); menuBar.add(fileMenu); menuBar.add(editMenu); menuBar.add(windowMenu); // Add a group marker indicating where action set menus will appear. menuBar.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS)); - menuBar.add(helpMenu); // File fileMenu.add(saveAction); @@ -87,10 +81,6 @@ public class SecureActionBarAdvisor extends ActionBarAdvisor { // Window windowMenu.add(openPerspectiveDialogAction); windowMenu.add(showViewMenuAction); - - // Help - helpMenu.add(helpContentAction); - // helpMenu.add(aboutAction); } @Override diff --git a/security/eclipse/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/editors/ArgeoUserEditor.java b/security/eclipse/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/editors/ArgeoUserEditor.java index 1cc41783c..80abbe7f4 100644 --- a/security/eclipse/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/editors/ArgeoUserEditor.java +++ b/security/eclipse/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/editors/ArgeoUserEditor.java @@ -51,15 +51,8 @@ public class ArgeoUserEditor extends FormEditor { if (securityService.getSecurityDao().userExists(user.getUsername())) securityService.updateUser(user); else { - try { - // FIXME: make it cleaner - ((SimpleArgeoUser)user).setPassword(user.getUsername()); - securityService.newUser(user); - setPartName(user.getUsername()); - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } + securityService.newUser(user); + setPartName(user.getUsername()); } firePropertyChange(PROP_DIRTY); } diff --git a/security/eclipse/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/editors/DefaultUserMainPage.java b/security/eclipse/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/editors/DefaultUserMainPage.java index ee63e24db..696d23d6d 100644 --- a/security/eclipse/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/editors/DefaultUserMainPage.java +++ b/security/eclipse/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/editors/DefaultUserMainPage.java @@ -74,6 +74,7 @@ public class DefaultUserMainPage extends FormPage { createGeneralPart(form.getBody()); createRolesPart(form.getBody()); + createPassworPart(form.getBody()); } /** Creates the general section */ @@ -123,6 +124,8 @@ public class DefaultUserMainPage extends FormPage { log.trace("General part committed"); } }; + if (username != null) + username.addModifyListener(new FormPartML(part)); firstName.addModifyListener(new FormPartML(part)); lastName.addModifyListener(new FormPartML(part)); email.addModifyListener(new FormPartML(part)); @@ -130,6 +133,39 @@ public class DefaultUserMainPage extends FormPage { getManagedForm().addPart(part); } + /** Creates the password section */ + protected void createPassworPart(Composite parent) { + FormToolkit tk = getManagedForm().getToolkit(); + Section section = tk.createSection(parent, Section.TITLE_BAR); + section.setText("Password"); + + Composite body = tk.createComposite(section, SWT.WRAP); + section.setClient(body); + GridLayout layout = new GridLayout(); + layout.marginWidth = layout.marginHeight = 0; + layout.numColumns = 2; + body.setLayout(layout); + + // add widgets (view) + final Text password1 = createLP(body, "New password", ""); + final Text password2 = createLP(body, "Repeat password", ""); + // create form part (controller) + AbstractFormPart part = new SectionPart(section) { + public void commit(boolean onSave) { + if (!password1.getText().equals("") + && password1.getText().equals(password2.getText())) { + ((SimpleArgeoUser) user).setPassword(password1.getText()); + } + super.commit(onSave); + if (log.isTraceEnabled()) + log.trace("Password part committed"); + } + }; + password1.addModifyListener(new FormPartML(part)); + password2.addModifyListener(new FormPartML(part)); + getManagedForm().addPart(part); + } + /** Creates the role section */ protected void createRolesPart(Composite parent) { FormToolkit tk = getManagedForm().getToolkit(); @@ -215,6 +251,15 @@ public class DefaultUserMainPage extends FormPage { return text; } + /** Creates label and password. */ + protected Text createLP(Composite body, String label, String value) { + FormToolkit toolkit = getManagedForm().getToolkit(); + toolkit.createLabel(body, label); + Text text = toolkit.createText(body, value, SWT.BORDER | SWT.PASSWORD); + text.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); + return text; + } + public void setSimpleNatureType(String simpleNatureType) { this.simpleNatureType = simpleNatureType; } diff --git a/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/core/DefaultSecurityService.java b/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/core/DefaultSecurityService.java index d6ff69cc2..b9b85087b 100644 --- a/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/core/DefaultSecurityService.java +++ b/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/core/DefaultSecurityService.java @@ -59,7 +59,7 @@ public class DefaultSecurityService implements ArgeoSecurityService { public void updateUserPassword(String username, String password) { SimpleArgeoUser user = new SimpleArgeoUser( securityDao.getUser(username)); - user.setPassword(password); + user.setPassword(securityDao.encodePassword(password)); securityDao.update(user); } @@ -72,14 +72,26 @@ public class DefaultSecurityService implements ArgeoSecurityService { } public void newUser(ArgeoUser user) { -// user.getUserNatures().clear(); argeoSecurity.beforeCreate(user); + // normalize password + if (user instanceof SimpleArgeoUser) { + if (user.getPassword() == null || user.getPassword().equals("")) + ((SimpleArgeoUser) user).setPassword(securityDao + .encodePassword(user.getUsername())); + else if (!user.getPassword().startsWith("{")) + ((SimpleArgeoUser) user).setPassword(securityDao + .encodePassword(user.getPassword())); + } securityDao.create(user); } public void updateUser(ArgeoUser user) { - String password = securityDao.getUserWithPassword(user.getUsername()) - .getPassword(); + String password = user.getPassword(); + if (password == null) + password = securityDao.getUserWithPassword(user.getUsername()) + .getPassword(); + if (!password.startsWith("{")) + password = securityDao.encodePassword(user.getPassword()); SimpleArgeoUser simpleArgeoUser = new SimpleArgeoUser(user); simpleArgeoUser.setPassword(password); securityDao.update(simpleArgeoUser); diff --git a/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ldap/nature/SimpleUserNatureMapper.java b/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ldap/nature/SimpleUserNatureMapper.java index bc20c9db8..681c5174a 100644 --- a/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ldap/nature/SimpleUserNatureMapper.java +++ b/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ldap/nature/SimpleUserNatureMapper.java @@ -44,7 +44,8 @@ public class SimpleUserNatureMapper implements UserNatureMapper { ctx.setAttributeValue("sn", nature.getLastName()); ctx.setAttributeValue("givenName", nature.getFirstName()); ctx.setAttributeValue("mail", nature.getEmail()); - if (nature.getDescription() != null) { + if (nature.getDescription() != null + && !nature.getDescription().equals("")) { ctx.setAttributeValue("description", nature.getDescription()); } } -- 2.30.2