From 87bae5e838e3936859ae45e620b30271b13efcb4 Mon Sep 17 00:00:00 2001 From: Andreas Kohlbecker Date: Fri, 14 Mar 2014 13:52:45 +0000 Subject: [PATCH 1/1] implementing #4120: User always needs to have the right to change password and hiding all user related menu contributions if no user is logged in --- .gitattributes | 3 +- eu.etaxonomy.taxeditor.store/plugin.xml | 37 ++++++++++- .../handler/OpenPasswordWizzardHandler.java | 66 +++++++++++++++++++ ...java => AuthenticationSourceProvider.java} | 53 ++++++++++++--- .../etaxonomy/taxeditor/store/CdmStore.java | 11 ++-- 5 files changed, 151 insertions(+), 19 deletions(-) create mode 100644 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/handler/OpenPasswordWizzardHandler.java rename eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/security/{RolesSourceProvider.java => AuthenticationSourceProvider.java} (62%) diff --git a/.gitattributes b/.gitattributes index 15ef3f6c0..801bb665a 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1144,6 +1144,7 @@ eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/Fe eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/OpenFeatureTreeEditorWizardHandler.java -text eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/SelectFeatureTreeWizard.java -text eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/SelectFeatureTreeWizardPage.java -text +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/handler/OpenPasswordWizzardHandler.java -text eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/handler/ShowLoginWindowHandler.java -text eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/identificationkey/AbstractIdentificaitonKeyWizard.java -text eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/io/AbstractIOManager.java -text @@ -1271,9 +1272,9 @@ eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/men eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/menu/TaxonRelationshipTypeMenuPreferences.java -text eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/wizard/VocabularyTermWizard.java -text eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/wizard/VocabularyTermWizardPage.java -text +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/security/AuthenticationSourceProvider.java -text eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/security/PermissionPropertyTester.java -text eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/security/RequiredPermissions.java -text -eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/security/RolesSourceProvider.java -text eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/store/CdmStore.java -text eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/store/CdmStoreConnector.java -text eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/store/ContextManager.java -text diff --git a/eu.etaxonomy.taxeditor.store/plugin.xml b/eu.etaxonomy.taxeditor.store/plugin.xml index 0d696cc57..c79f7ffac 100644 --- a/eu.etaxonomy.taxeditor.store/plugin.xml +++ b/eu.etaxonomy.taxeditor.store/plugin.xml @@ -338,6 +338,11 @@ label="Switch User" style="push"> + + @@ -470,6 +475,22 @@ + + + + + + + + + + @@ -528,6 +548,10 @@ id="eu.etaxonomy.taxeditor.store.open.FeatureTreeEditorWizard" name="Open Feature Tree Editor Wizard"> + + @@ -969,6 +993,15 @@ + + + + + + + provider="eu.etaxonomy.taxeditor.security.AuthenticationSourceProvider"> diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/handler/OpenPasswordWizzardHandler.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/handler/OpenPasswordWizzardHandler.java new file mode 100644 index 000000000..e61f23cde --- /dev/null +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/handler/OpenPasswordWizzardHandler.java @@ -0,0 +1,66 @@ +// $Id$ +/** +* Copyright (C) 2007 EDIT +* European Distributed Institute of Taxonomy +* http://www.e-taxonomy.eu +* +* The contents of this file are subject to the Mozilla Public License Version 1.1 +* See LICENSE.TXT at the top of this package for the full license terms. +*/ + +package eu.etaxonomy.taxeditor.handler; + +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.commands.IHandler; +import org.eclipse.jface.wizard.WizardDialog; + +import eu.etaxonomy.cdm.api.conversation.ConversationHolder; +import eu.etaxonomy.cdm.model.common.User; +import eu.etaxonomy.taxeditor.model.AbstractUtility; +import eu.etaxonomy.taxeditor.store.CdmStore; +import eu.etaxonomy.taxeditor.ui.password.PasswordWizard; + +/** + *

ShowLoginWindowHandler class.

+ * + * @author n.hoffmann + * @created Aug 7, 2009 + * @version 1.0 + */ +public class OpenPasswordWizzardHandler extends AbstractHandler implements IHandler{ + + /* (non-Javadoc) + * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent) + */ + /** {@inheritDoc} */ + @Override + public Object execute(ExecutionEvent event) throws ExecutionException { + + Object principal = CdmStore.getCurrentAuthentiation().getPrincipal(); + + if(principal instanceof User){ + ConversationHolder conversation = CdmStore.createConversation(); + + PasswordWizard wizard = new PasswordWizard(conversation, (User)principal); + WizardDialog dialog = new WizardDialog(AbstractUtility.getShell(), wizard); + + dialog.open(); + + // clean up + conversation.commit(); + conversation.unbind(); + conversation.close(); + } else { + // should never happen, log an error + AbstractUtility.error(OpenPasswordWizzardHandler.class, "The principal currently authenticated is not a eu.etaxonomy.cdm.model.common.User", null); + } + + return null; + + } + + + +} diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/security/RolesSourceProvider.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/security/AuthenticationSourceProvider.java similarity index 62% rename from eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/security/RolesSourceProvider.java rename to eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/security/AuthenticationSourceProvider.java index abb44e7c6..637c8ab8a 100644 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/security/RolesSourceProvider.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/security/AuthenticationSourceProvider.java @@ -20,18 +20,25 @@ import eu.etaxonomy.taxeditor.store.LoginManager; /** * Provides the Roles assigned to the currently authenticated principal as the * variable {@code eu.etaxonomy.taxeditor.security.userRoles} - * + * * @author a.kohlbecker - * + * */ -public class RolesSourceProvider extends AbstractSourceProvider implements Observer { +public class AuthenticationSourceProvider extends AbstractSourceProvider implements Observer { - public final static String RIGHTS_VARIABLE = "eu.etaxonomy.taxeditor.security.userRoles"; - private final static String[] PROVIDED_SOURCE_NAMES = new String[] { RIGHTS_VARIABLE }; + public final static String USER_ROLES_VARIABLE = "eu.etaxonomy.taxeditor.security.userRoles"; + public final static String USER_NAME_VARIABLE = "eu.etaxonomy.taxeditor.security.userName"; + public final static String USER_VARIABLE = "eu.etaxonomy.taxeditor.security.user"; - private final static Map> stateMap = new HashMap>(); + private final static String[] PROVIDED_SOURCE_NAMES = new String[] { + USER_ROLES_VARIABLE, + USER_NAME_VARIABLE, + USER_VARIABLE + }; - public RolesSourceProvider() { + private final static Map stateMap = new HashMap(); + + public AuthenticationSourceProvider() { super(); initialize(); } @@ -55,11 +62,36 @@ public class RolesSourceProvider extends AbstractSourceProvider implements Obser rolesStr.add(r.getAuthority()); } - stateMap.put(RIGHTS_VARIABLE, rolesStr); + stateMap.put(USER_ROLES_VARIABLE, rolesStr); + stateMap.put(USER_VARIABLE, getCurrentAutheticationPrincipal()); + stateMap.put(USER_NAME_VARIABLE, getCurrentAutheticationName()); return stateMap; } - /* + /** + * @return + */ + private String getCurrentAutheticationName() { + Authentication authentication = CdmStore.getCurrentAuthentiation(); + if (authentication != null) { + return authentication.getName(); + } + return null; + } + + /** + * @return most probably a Cdm User instance or null + */ + private Object getCurrentAutheticationPrincipal() { + Authentication authentication = CdmStore.getCurrentAuthentiation(); + if (authentication != null) { + return authentication.getPrincipal(); + } + return null; + } + + + /* * TODO refactor into User once Role is a model class */ private List getCurrentAuthenticationsRoles() { @@ -92,7 +124,8 @@ public class RolesSourceProvider extends AbstractSourceProvider implements Obser } - public String[] getProvidedSourceNames() { + @Override + public String[] getProvidedSourceNames() { return PROVIDED_SOURCE_NAMES; } diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/store/CdmStore.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/store/CdmStore.java index 01ded5e28..11f5c06a0 100644 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/store/CdmStore.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/store/CdmStore.java @@ -41,6 +41,7 @@ import eu.etaxonomy.cdm.persistence.hibernate.permission.Role; import eu.etaxonomy.taxeditor.datasource.CdmDataSourceRepository; import eu.etaxonomy.taxeditor.io.ExportManager; import eu.etaxonomy.taxeditor.io.ImportManager; +import eu.etaxonomy.taxeditor.model.AbstractUtility; import eu.etaxonomy.taxeditor.preference.PreferencesUtil; import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin; import eu.etaxonomy.taxeditor.view.datasource.CdmDataSourceViewPart; @@ -98,14 +99,14 @@ public class CdmStore { return instance; } else if (instance == null || !instance.isConnected) { - StoreUtil + AbstractUtility .warningDialog( "Application is not connected to a datastore", instance, "The requested operation is only available when " - + "connected to a datasource. You may choose a datasource to connect to or create a new one in the datasource view."); + + "connected to a datasource. You may choose a datasource to connect to or create a new one in the datasource view."); - StoreUtil.showView(CdmDataSourceViewPart.ID); + AbstractUtility.showView(CdmDataSourceViewPart.ID); } @@ -388,9 +389,7 @@ public class CdmStore { */ /** - *

- * getDefaultLanguage - *

+ * Provides access to the global default language set in the application preferences. * * @return a {@link eu.etaxonomy.cdm.model.common.Language} object. */ -- 2.34.1