From 76431c11d930acc18ab30e45ee45893419bc1497 Mon Sep 17 00:00:00 2001 From: Edgar Mueller Date: Thu, 12 Feb 2015 17:23:50 +0100 Subject: [PATCH] Bug 459781 - Customizable authentication & authorization: fixed testing mock --- .../server/accesscontrol/AccessControl.java | 46 +++++++++++++++++-- .../server/accesscontrol/LoginService.java | 12 +++-- .../verifiers/UserVerifier.java | 4 +- .../client/test/common/util/ServerUtil.java | 10 ++-- 4 files changed, 54 insertions(+), 18 deletions(-) diff --git a/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/accesscontrol/AccessControl.java b/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/accesscontrol/AccessControl.java index cc2bc2785..b03c88ad7 100644 --- a/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/accesscontrol/AccessControl.java +++ b/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/accesscontrol/AccessControl.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2011-2015 EclipseSource Muenchen GmbH and others. + * Copyright (c) 2015 EclipseSource Muenchen GmbH and others. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 @@ -7,26 +7,30 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * Edgar - initial API and implementation + * Edgar Mueller - initial API and implementation ******************************************************************************/ package org.eclipse.emf.emfstore.internal.server.accesscontrol; import org.eclipse.emf.emfstore.common.extensionpoint.ESExtensionPoint; import org.eclipse.emf.emfstore.common.extensionpoint.ESExtensionPointException; import org.eclipse.emf.emfstore.internal.common.model.util.ModelUtil; +import org.eclipse.emf.emfstore.internal.server.ServerConfiguration; import org.eclipse.emf.emfstore.internal.server.impl.api.ESOrgUnitProviderImpl; import org.eclipse.emf.emfstore.internal.server.model.ServerSpace; +import org.eclipse.emf.emfstore.server.auth.ESAuthenticationControlType; import org.eclipse.emf.emfstore.server.auth.ESAuthorizationService; import org.eclipse.emf.emfstore.server.auth.ESOrgUnitResolver; import org.eclipse.emf.emfstore.server.model.ESOrgUnitProvider; /** - * @author Edgar + * Access control class holding references to the customizable access control related services. + * + * @author emueller * */ public class AccessControl { - private static final String ACCESSCONTROL_EXTENSION_ID = "org.eclipse.emf.emfstore.server.accessControl"; + private static final String ACCESSCONTROL_EXTENSION_ID = "org.eclipse.emf.emfstore.server.accessControl"; //$NON-NLS-1$ private final ESOrgUnitProvider orgUnitProvider; @@ -39,6 +43,8 @@ public class AccessControl { private final ServerSpace serverSpace; + private ESAuthenticationControlType authenticationControlType; + public AccessControl(ServerSpace serverSpace) { this.serverSpace = serverSpace; sessions = new Sessions(); @@ -46,7 +52,37 @@ public AccessControl(ServerSpace serverSpace) { orgUnitProvider = initOrgUnitProviderService(); orgUnitResolver = initOrgUnitResolverService(); authorizationService = initAuthorizationService(); - loginService = new LoginService(sessions, orgUnitProvider, + loginService = initLoginService(); + } + + public AccessControl( + ESAuthenticationControlType authenticationControlType, + ServerSpace serverSpace) { + + this.authenticationControlType = authenticationControlType; + this.serverSpace = serverSpace; + sessions = new Sessions(); + + orgUnitProvider = initOrgUnitProviderService(); + orgUnitResolver = initOrgUnitResolverService(); + authorizationService = initAuthorizationService(); + loginService = initLoginService(); + } + + /** + * @return + */ + private LoginService initLoginService() { + + if (authenticationControlType == null) { + final String[] splittedProperty = ServerConfiguration + .getSplittedProperty(ServerConfiguration.AUTHENTICATION_POLICY); + authenticationControlType = ESAuthenticationControlType.valueOf(splittedProperty[0]); + } + return new LoginService( + authenticationControlType, + sessions, + orgUnitProvider, getOrgUnitResolverServive()); } diff --git a/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/accesscontrol/LoginService.java b/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/accesscontrol/LoginService.java index 9e8c549c2..c89c1ef95 100644 --- a/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/accesscontrol/LoginService.java +++ b/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/accesscontrol/LoginService.java @@ -14,7 +14,6 @@ import org.eclipse.emf.emfstore.common.extensionpoint.ESExtensionPoint; import org.eclipse.emf.emfstore.common.extensionpoint.ESExtensionPointException; import org.eclipse.emf.emfstore.internal.common.model.util.ModelUtil; -import org.eclipse.emf.emfstore.internal.server.ServerConfiguration; import org.eclipse.emf.emfstore.internal.server.accesscontrol.authentication.ESUserVerifierFactory; import org.eclipse.emf.emfstore.internal.server.core.MonitorProvider; import org.eclipse.emf.emfstore.internal.server.exceptions.AccessControlException; @@ -44,6 +43,7 @@ public class LoginService { private final Sessions sessions; private final ESOrgUnitResolver orgUnitResolver; private final ESOrgUnitProvider orgUnitProvider; + private final ESAuthenticationControlType authenticationControlType; /** * Constructor. @@ -57,10 +57,13 @@ public class LoginService { * @param orgUnitResolver * an {@link ESOrgUnitResolver} for resolving any roles and groups on a given organizational unit */ - public LoginService(Sessions sessions, + public LoginService( + ESAuthenticationControlType authenticationControlType, + Sessions sessions, ESOrgUnitProvider orgUnitProvider, ESOrgUnitResolver orgUnitResolver) { + this.authenticationControlType = authenticationControlType; this.sessions = sessions; this.orgUnitProvider = orgUnitProvider; this.orgUnitResolver = orgUnitResolver; @@ -74,10 +77,9 @@ private ESUserVerifier initUserVerifierService() { return new ESExtensionPoint(USER_VERIFIER_EXTENSION_ID, true).getClass( "providerClass", ESUserVerifier.class); //$NON-NLS-1$ } - final String[] splittedProperty = ServerConfiguration - .getSplittedProperty(ServerConfiguration.AUTHENTICATION_POLICY); + return ESUserVerifierFactory.getInstance().createUserVerifier( - ESAuthenticationControlType.valueOf(splittedProperty[0]), + authenticationControlType, orgUnitProvider); } catch (final ESExtensionPointException e) { final String message = "Custom Access Control could not be initialized"; diff --git a/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/accesscontrol/authentication/verifiers/UserVerifier.java b/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/accesscontrol/authentication/verifiers/UserVerifier.java index 1767c5d9b..52e70c694 100644 --- a/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/accesscontrol/authentication/verifiers/UserVerifier.java +++ b/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/accesscontrol/authentication/verifiers/UserVerifier.java @@ -60,9 +60,9 @@ public ESAuthenticationInformation verifyUser(String username, String password, ESClientVersionInfo clientVersionInfo) throws AccessControlException { checkClientVersion(clientVersionInfo); - password = preparePassword(password); + final String preparedPassword = preparePassword(password); - if (verifySuperUser(username, password) || verifyPassword(username, password)) { + if (verifySuperUser(username, preparedPassword) || verifyPassword(username, preparedPassword)) { final AuthenticationInformation createAuthenticationInfo = createAuthenticationInfo(); createAuthenticationInfo.setResolvedACUser(findUser(username)); return createAuthenticationInfo.toAPI(); diff --git a/tests/org.eclipse.emf.emfstore.test.common/src/org/eclipse/emf/emfstore/client/test/common/util/ServerUtil.java b/tests/org.eclipse.emf.emfstore.test.common/src/org/eclipse/emf/emfstore/client/test/common/util/ServerUtil.java index 5be92cd7a..686d75ffe 100644 --- a/tests/org.eclipse.emf.emfstore.test.common/src/org/eclipse/emf/emfstore/client/test/common/util/ServerUtil.java +++ b/tests/org.eclipse.emf.emfstore.test.common/src/org/eclipse/emf/emfstore/client/test/common/util/ServerUtil.java @@ -62,6 +62,7 @@ import org.eclipse.emf.emfstore.internal.server.model.accesscontrol.roles.RolesFactory; import org.eclipse.emf.emfstore.internal.server.model.dao.ACDAOFacade; import org.eclipse.emf.emfstore.internal.server.model.impl.api.ESSessionIdImpl; +import org.eclipse.emf.emfstore.server.auth.ESAuthenticationControlType; import org.eclipse.emf.emfstore.server.exceptions.ESException; import org.osgi.framework.FrameworkUtil; @@ -161,12 +162,9 @@ public static ServerMock startMockServer(Map properties) throws ServerConfiguration.setProperties(initProperties(properties)); setSuperUser(daoFacadeMock); - final AccessControl accessControl = new AccessControl(serverSpace); - - // accessControl.setAuthenticationControl(ESUserVerifierFactory.INSTANCE - // .createAuthenticationControl(ESAuthenticationControlType.model, orgUnitProviderImpl)); - - // AdminConnectionManagerMock adminConnectionManagerMock = new AdminConnectionManagerMock(accessControl); + final AccessControl accessControl = new AccessControl( + ESAuthenticationControlType.model, + serverSpace); final EMFStore emfStore = EMFStoreImpl.createInterface(serverSpace, accessControl); ESWorkspaceProviderImpl.getInstance().setConnectionManager(