This is an automated email from the git hooks/post-receive script. New commit to branch feature/7463 in repository observe. See http://git.codelutin.com/observe.git commit cb211a96b80249ee743c9cc1eee741f22096e88f Author: Tony CHEMIT <chemit@codelutin.com> Date: Sun Sep 6 11:21:44 2015 +0200 Permettre de connecter plusieurs utilisateurs à la même source de données (un must pour une application web... --- .../application/web/ObserveWebMotionFilter.java | 5 ++-- .../controller/v1/DataSourceServiceController.java | 11 +------- ...urceConfigurationAlreadyRegistredException.java | 27 ------------------- .../ObserveWebSecurityApplicationContext.java | 30 +++++----------------- ...ObserveWebSecurityAuthenticationTokenCache.java | 10 +++----- .../service/DataSourceServiceRestTest.java | 24 +++++++++-------- 6 files changed, 27 insertions(+), 80 deletions(-) diff --git a/observe-application-web/src/main/java/fr/ird/observe/application/web/ObserveWebMotionFilter.java b/observe-application-web/src/main/java/fr/ird/observe/application/web/ObserveWebMotionFilter.java index 4590091..562c5c2 100644 --- a/observe-application-web/src/main/java/fr/ird/observe/application/web/ObserveWebMotionFilter.java +++ b/observe-application-web/src/main/java/fr/ird/observe/application/web/ObserveWebMotionFilter.java @@ -4,7 +4,6 @@ import com.google.common.base.Optional; import fr.ird.observe.application.web.request.ObserveWebRequestContext; import fr.ird.observe.application.web.request.ObserveWebRequestSecurityContext; import fr.ird.observe.application.web.security.BadObserveWebUserPasswordException; -import fr.ird.observe.application.web.security.DataSourceConfigurationAlreadyRegistredException; import fr.ird.observe.application.web.security.InvalidAuthenticationTokenException; import fr.ird.observe.application.web.security.ObserveWebSecurityApplicationContext; import fr.ird.observe.application.web.security.UnknownObserveWebUserException; @@ -25,7 +24,7 @@ import java.util.Locale; */ public class ObserveWebMotionFilter extends WebMotionFilter implements ObserveDataSourceConfigurationRestConstants { - public void inject(HttpContext context) throws InvalidAuthenticationTokenException, UnknownObserveWebUserException, BadObserveWebUserPasswordException, DataSourceConfigurationAlreadyRegistredException, UnknownObserveWebUserForDatabaseException, InvalidAdminKeyApiException { + public void inject(HttpContext context) throws InvalidAuthenticationTokenException, UnknownObserveWebUserException, BadObserveWebUserPasswordException, UnknownObserveWebUserForDatabaseException, InvalidAdminKeyApiException { ObserveWebApplicationContext applicationContext = ObserveWebApplicationContext.getApplicationContext(context); @@ -75,7 +74,7 @@ public class ObserveWebMotionFilter extends WebMotionFilter implements ObserveDa } - protected ObserveWebRequestSecurityContext createSecurityContext(ObserveWebApplicationContext applicationContext, HttpServletRequest request) throws InvalidAuthenticationTokenException, UnknownObserveWebUserForDatabaseException, BadObserveWebUserPasswordException, DataSourceConfigurationAlreadyRegistredException, UnknownObserveWebUserException { + protected ObserveWebRequestSecurityContext createSecurityContext(ObserveWebApplicationContext applicationContext, HttpServletRequest request) throws InvalidAuthenticationTokenException, UnknownObserveWebUserForDatabaseException, BadObserveWebUserPasswordException, UnknownObserveWebUserException { ObserveWebRequestSecurityContext securityContext = null; String authenticationToken = getRequestHeaderOrParameterValueOrNull(request, REQUEST_AUTHENTICATION_TOKEN); diff --git a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/DataSourceServiceController.java b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/DataSourceServiceController.java index 28a2972..40fd4b2 100644 --- a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/DataSourceServiceController.java +++ b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/DataSourceServiceController.java @@ -1,8 +1,6 @@ package fr.ird.observe.application.web.controller.v1; -import com.google.common.base.Optional; import fr.ird.observe.application.web.request.ObserveWebRequestContext; -import fr.ird.observe.application.web.security.DataSourceConfigurationAlreadyRegistredException; import fr.ird.observe.services.configuration.ObserveDataSourceConfiguration; import fr.ird.observe.services.configuration.ObserveDataSourceConnection; import fr.ird.observe.services.configuration.ObserveDataSourceConnectionRest; @@ -78,14 +76,7 @@ public class DataSourceServiceController extends ObserveServiceControllerSupport ObserveDataSourceConfiguration dataSourceConfiguration = requestContext.getDataSourceConfiguration(); - String userLogin = requestContext.getUserLogin(); - Optional<String> optionalDatabaseName = requestContext.getOptionalDatabaseName(); - String authenticationToken; - try { - authenticationToken = getSecurityApplicationContext().registerDataSourceConfiguration(userLogin, optionalDatabaseName, dataSourceConfiguration); - } catch (DataSourceConfigurationAlreadyRegistredException e) { - throw new RuntimeException("DataSource already registred", e); - } + String authenticationToken = getSecurityApplicationContext().registerDataSourceConfiguration(dataSourceConfiguration); return authenticationToken; diff --git a/observe-application-web/src/main/java/fr/ird/observe/application/web/security/DataSourceConfigurationAlreadyRegistredException.java b/observe-application-web/src/main/java/fr/ird/observe/application/web/security/DataSourceConfigurationAlreadyRegistredException.java deleted file mode 100644 index 1ced100..0000000 --- a/observe-application-web/src/main/java/fr/ird/observe/application/web/security/DataSourceConfigurationAlreadyRegistredException.java +++ /dev/null @@ -1,27 +0,0 @@ -package fr.ird.observe.application.web.security; - -/** - * Created on 30/08/15. - * - * @author Tony Chemit - chemit@codelutin.com - */ -public class DataSourceConfigurationAlreadyRegistredException extends Exception { - - private static final long serialVersionUID = 1L; - - protected final String databaseName; - protected final String role; - - public DataSourceConfigurationAlreadyRegistredException(String databaseName, String role) { - this.databaseName = databaseName; - this.role = role; - } - - public String getDatabaseName() { - return databaseName; - } - - public String getRole() { - return role; - } -} diff --git a/observe-application-web/src/main/java/fr/ird/observe/application/web/security/ObserveWebSecurityApplicationContext.java b/observe-application-web/src/main/java/fr/ird/observe/application/web/security/ObserveWebSecurityApplicationContext.java index 6aff7aa..5210310 100644 --- a/observe-application-web/src/main/java/fr/ird/observe/application/web/security/ObserveWebSecurityApplicationContext.java +++ b/observe-application-web/src/main/java/fr/ird/observe/application/web/security/ObserveWebSecurityApplicationContext.java @@ -118,15 +118,16 @@ public class ObserveWebSecurityApplicationContext implements Closeable { } /** - * Récupére la configuration de la data source associé à l'utilisateur et à la base passé en paramètre. + * Récupére la configuration de la source de données associée à l'utilisateur et à la base passée en paramètre. + * + * Si la base n'est pas spécifiée, on utilise alors la base par défaut du serveur. * * @param userLogin le login de l'utilisateur * @param optionalDatabaseName le nom de la base à utiliser - * @return + * @return la configuration de source de données associée à l'utilisateur et la base donnée * @throws UnknownObserveWebUserForDatabaseException - * @throws DataSourceConfigurationAlreadyRegistredException */ - public ObserveDataSourceConfiguration getDataSourceConfiguration(String userLogin, Optional<String> optionalDatabaseName) throws UnknownObserveWebUserForDatabaseException, DataSourceConfigurationAlreadyRegistredException { + public ObserveDataSourceConfiguration getDataSourceConfiguration(String userLogin, Optional<String> optionalDatabaseName) throws UnknownObserveWebUserForDatabaseException { // Get database name String databaseName; @@ -158,32 +159,15 @@ public class ObserveWebSecurityApplicationContext implements Closeable { } - public String registerDataSourceConfiguration(String userLogin, Optional<String> optionalDatabaseName, ObserveDataSourceConfiguration dataSourceConfiguration) throws DataSourceConfigurationAlreadyRegistredException { - - // Check if the data source configuration is not already registred in cache - boolean alreadyInCache = authenticateCache.isDataSourceConfigurationInCache(dataSourceConfiguration); - if (alreadyInCache) { - - // Get database name - String databaseName; - if (optionalDatabaseName.isPresent()) { - databaseName = optionalDatabaseName.get(); - } else { - databaseName = defaultDatabaseName; - } - - // can't register twice a user for a database - throw new DataSourceConfigurationAlreadyRegistredException(userLogin, databaseName); - } + public String registerDataSourceConfiguration(ObserveDataSourceConfiguration dataSourceConfiguration) { // Register data source configuration in cache String authenticationToken = authenticateCache.registerDataSourceConfiguration(dataSourceConfiguration); - return authenticationToken; } - public ObserveDataSourceConfiguration getDataSourceConfiguration(String userLogin, String userPassword, Optional<String> optionalDatabaseName) throws UnknownObserveWebUserException, BadObserveWebUserPasswordException, DataSourceConfigurationAlreadyRegistredException, UnknownObserveWebUserForDatabaseException { + public ObserveDataSourceConfiguration getDataSourceConfiguration(String userLogin, String userPassword, Optional<String> optionalDatabaseName) throws UnknownObserveWebUserException, BadObserveWebUserPasswordException, UnknownObserveWebUserForDatabaseException { // Get user Optional<? extends ObserveWebUser> optionalUser = users.getUserByLogin(userLogin); diff --git a/observe-application-web/src/main/java/fr/ird/observe/application/web/security/ObserveWebSecurityAuthenticationTokenCache.java b/observe-application-web/src/main/java/fr/ird/observe/application/web/security/ObserveWebSecurityAuthenticationTokenCache.java index ecd3de4..c2edd9f 100644 --- a/observe-application-web/src/main/java/fr/ird/observe/application/web/security/ObserveWebSecurityAuthenticationTokenCache.java +++ b/observe-application-web/src/main/java/fr/ird/observe/application/web/security/ObserveWebSecurityAuthenticationTokenCache.java @@ -8,6 +8,7 @@ import fr.ird.observe.services.configuration.ObserveDataSourceConfiguration; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import java.io.Closeable; import java.util.UUID; import java.util.concurrent.TimeUnit; @@ -18,7 +19,7 @@ import java.util.concurrent.TimeUnit; * * @author Tony Chemit - chemit@codelutin.com */ -public class ObserveWebSecurityAuthenticationTokenCache { +public class ObserveWebSecurityAuthenticationTokenCache implements Closeable { /** Logger. */ private static final Log log = LogFactory.getLog(ObserveWebSecurityAuthenticationTokenCache.class); @@ -50,11 +51,6 @@ public class ObserveWebSecurityAuthenticationTokenCache { return dataSourceConfiguration; } - public boolean isDataSourceConfigurationInCache(ObserveDataSourceConfiguration dataSourceConfiguration) { - boolean inCache = authenticationTokenCache.asMap().containsValue(dataSourceConfiguration); - return inCache; - } - public String registerDataSourceConfiguration(ObserveDataSourceConfiguration dataSourceConfiguration) { String authenticationToken = UUID.randomUUID().toString(); if (log.isInfoEnabled()) { @@ -78,7 +74,9 @@ public class ObserveWebSecurityAuthenticationTokenCache { authenticationTokenCache.invalidateAll(); } + @Override public void close() { removeAllAuthenticationTokens(); } + } diff --git a/observe-services-rest/src/test/java/fr/ird/observe/services/service/DataSourceServiceRestTest.java b/observe-services-rest/src/test/java/fr/ird/observe/services/service/DataSourceServiceRestTest.java index b3fb694..79b0e86 100644 --- a/observe-services-rest/src/test/java/fr/ird/observe/services/service/DataSourceServiceRestTest.java +++ b/observe-services-rest/src/test/java/fr/ird/observe/services/service/DataSourceServiceRestTest.java @@ -29,17 +29,15 @@ public class DataSourceServiceRestTest { @Rule public final TestMethodResource testMethodResource = new TestMethodResource(testClassResource); - protected DataSourceService service; - @Before public void setUp() throws Exception { ObserveDataSourceConfigurationRest dataSourceConfiguration = testMethodResource.getDataSourceConfiguration(); - service = testClassResource.newService(dataSourceConfiguration, DataSourceService.class); + //TODO Tester si le serveur est accessible sinon on ignore le test boolean serverExist = true; - + Assume.assumeTrue("Serveur " + dataSourceConfiguration.getServerUrl() + " no found", serverExist); } @@ -48,6 +46,7 @@ public class DataSourceServiceRestTest { public void testOpenNotExistingDatabase() throws IOException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException { ObserveDataSourceConfigurationRest dataSourceConfiguration = testMethodResource.getDataSourceConfiguration(); + DataSourceService service = testClassResource.newService(dataSourceConfiguration, DataSourceService.class); service.open(dataSourceConfiguration); } @@ -56,17 +55,19 @@ public class DataSourceServiceRestTest { public void testOpen() throws IOException, IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException { ObserveDataSourceConfigurationRest dataSourceConfiguration = testMethodResource.getDataSourceConfiguration(); - ObserveDataSourceConnection dataSourceConnection = service.open(dataSourceConfiguration); - Assert.assertNotNull(dataSourceConnection); - Assert.assertNotNull(dataSourceConnection.getAuthenticationToken()); - - service.close(); - dataSourceConnection = service.open(dataSourceConfiguration); + DataSourceService service1 = testClassResource.newService(dataSourceConfiguration, DataSourceService.class); + ObserveDataSourceConnection dataSourceConnection = service1.open(dataSourceConfiguration); Assert.assertNotNull(dataSourceConnection); Assert.assertNotNull(dataSourceConnection.getAuthenticationToken()); - service.close(); + DataSourceService service2 = testClassResource.newService(dataSourceConfiguration, DataSourceService.class); + ObserveDataSourceConnection dataSourceConnection2 = service2.open(dataSourceConfiguration); + Assert.assertNotNull(dataSourceConnection2); + Assert.assertNotNull(dataSourceConnection2.getAuthenticationToken()); + + service1.close(); + service2.close(); } @@ -77,6 +78,7 @@ public class DataSourceServiceRestTest { DataSourceCreateConfigurationDto dataSourceCreateConfiguration = new DataSourceCreateConfigurationDto(); dataSourceCreateConfiguration.setCanCreateEmptyDatabase(true); + DataSourceService service = testClassResource.newService(dataSourceConfiguration, DataSourceService.class); service.create(dataSourceConfiguration, dataSourceCreateConfiguration); } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.