You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by tr...@apache.org on 2014/02/11 01:28:51 UTC
svn commit: r1566895 [2/2] - in /jackrabbit/oak/trunk: ./ oak-auth-external/
oak-auth-external/src/ oak-auth-external/src/main/
oak-auth-external/src/main/java/ oak-auth-external/src/main/java/org/
oak-auth-external/src/main/java/org/apache/ oak-auth-e...
Added: jackrabbit/oak/trunk/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/ExternalLoginModuleFactory.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/ExternalLoginModuleFactory.java?rev=1566895&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/ExternalLoginModuleFactory.java (added)
+++ jackrabbit/oak/trunk/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/ExternalLoginModuleFactory.java Tue Feb 11 00:28:49 2014
@@ -0,0 +1,106 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.oak.spi.security.authentication.external.impl;
+
+import java.util.Map;
+
+import javax.security.auth.spi.LoginModule;
+
+import org.apache.felix.jaas.LoginModuleFactory;
+import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.ConfigurationPolicy;
+import org.apache.felix.scr.annotations.Property;
+import org.apache.felix.scr.annotations.Service;
+import org.apache.jackrabbit.oak.spi.security.ConfigurationParameters;
+
+/**
+ * Implements a LoginModuleFactory that creates {@link ExternalLoginModule}s and allows to configure login modules
+ * via OSGi config.
+ */
+@Component(
+ label = "Apache Jackrabbit Oak External Login Module",
+ metatype = true,
+ policy = ConfigurationPolicy.REQUIRE,
+ configurationFactory = true
+)
+@Service
+public class ExternalLoginModuleFactory implements LoginModuleFactory {
+
+ @Property(
+ intValue = 900,
+ label = "JAAS Ranking",
+ description = "Specifying the ranking (i.e. sort order) of this login module entry. The entries are sorted " +
+ "in a descending order (i.e. higher value ranked configurations come first)."
+ )
+ public static final String JAAS_RANKING = LoginModuleFactory.JAAS_RANKING;
+
+ @Property(
+ value = "SUFFICIENT",
+ label = "JAAS Control Flag",
+ description = "Property specifying whether or not a LoginModule is REQUIRED, REQUISITE, SUFFICIENT or " +
+ "OPTIONAL.Refer to the JAAS configuration documentation for more details around the meaning of " +
+ "these flags."
+ )
+ public static final String JAAS_CONTROL_FLAG = LoginModuleFactory.JAAS_CONTROL_FLAG;
+
+ @Property(
+ label = "JAAS Realm",
+ description = "The realm name (or application name) against which the LoginModule is be registered. If no " +
+ "realm name is provided then LoginModule is registered with a default realm as configured in " +
+ "the Felix JAAS configuration."
+ )
+ public static final String JAAS_REALM_NAME = LoginModuleFactory.JAAS_REALM_NAME;
+
+ @Property(
+ label = "Identity Provider Name",
+ description = "Name of the identity provider (for example: 'ldap')."
+ )
+ public static final String PARAM_IDP_NAME = ExternalLoginModule.PARAM_IDP_NAME;
+
+ @Property(
+ value = "default",
+ label = "Sync Handler Name",
+ description = "Name of the sync handler."
+ )
+ public static final String PARAM_SYNC_HANDLER_NAME = ExternalLoginModule.PARAM_SYNC_HANDLER_NAME;
+
+ /**
+ * default configuration for the login modules
+ */
+ private ConfigurationParameters osgiConfig;
+
+ /**
+ * Activates the LoginModuleFactory service
+ * @param properties the OSGi config
+ */
+ @Activate
+ protected void activate(Map<String, Object> properties) {
+ osgiConfig = ConfigurationParameters.of(properties);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @return a new {@link ExternalLoginModule} instance.
+ */
+ @Override
+ public LoginModule createLoginModule() {
+ return new ExternalLoginModule(osgiConfig);
+ }
+
+}
\ No newline at end of file
Added: jackrabbit/oak/trunk/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/SyncManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/SyncManagerImpl.java?rev=1566895&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/SyncManagerImpl.java (added)
+++ jackrabbit/oak/trunk/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/SyncManagerImpl.java Tue Feb 11 00:28:49 2014
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jackrabbit.oak.spi.security.authentication.external.impl;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import javax.annotation.Nonnull;
+
+import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Deactivate;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.ReferenceCardinality;
+import org.apache.felix.scr.annotations.ReferencePolicy;
+import org.apache.felix.scr.annotations.Service;
+import org.apache.jackrabbit.oak.osgi.OsgiWhiteboard;
+import org.apache.jackrabbit.oak.spi.security.authentication.external.SyncHandler;
+import org.apache.jackrabbit.oak.spi.security.authentication.external.SyncManager;
+import org.apache.jackrabbit.oak.spi.whiteboard.AbstractServiceTracker;
+import org.apache.jackrabbit.oak.spi.whiteboard.Whiteboard;
+import org.osgi.service.component.ComponentContext;
+
+/**
+ * {@code SyncManagerImpl} is used to manage registered sync handlers. This class automatically
+ * tracks the SyncHandlers that are registered via OSGi but can also be used in non-OSGi environments by manually
+ * adding and removing the handlers.
+ */
+@Component(immediate = true)
+@Service
+public class SyncManagerImpl extends AbstractServiceTracker<SyncHandler> implements SyncManager {
+
+ /**
+ * Default constructor used by OSGi
+ */
+ public SyncManagerImpl() {
+ super(SyncHandler.class);
+ }
+
+ /**
+ * Constructor used by non OSGi
+ * @param whiteboard the whiteboard
+ */
+ public SyncManagerImpl(Whiteboard whiteboard) {
+ super(SyncHandler.class);
+ start(whiteboard);
+ }
+
+ @Activate
+ private void activate(ComponentContext ctx) {
+ start(new OsgiWhiteboard(ctx.getBundleContext()));
+ }
+
+ @Deactivate
+ private void deactivate() {
+ stop();
+ }
+
+ @Override
+ public SyncHandler getSyncHandler(@Nonnull String name) {
+ for (SyncHandler handler: getServices()) {
+ if (name.equals(handler.getName())) {
+ return handler;
+ }
+ }
+ return null;
+ }
+}
\ No newline at end of file
Added: jackrabbit/oak/trunk/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/package-info.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/package-info.java?rev=1566895&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/package-info.java (added)
+++ jackrabbit/oak/trunk/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/package-info.java Tue Feb 11 00:28:49 2014
@@ -0,0 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+@Version("0.17")
+@Export(optional = "provide:=true")
+package org.apache.jackrabbit.oak.spi.security.authentication.external;
+
+import aQute.bnd.annotation.Version;
+import aQute.bnd.annotation.Export;
\ No newline at end of file
Added: jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/ExternalLoginModuleTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/ExternalLoginModuleTest.java?rev=1566895&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/ExternalLoginModuleTest.java (added)
+++ jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/ExternalLoginModuleTest.java Tue Feb 11 00:28:49 2014
@@ -0,0 +1,146 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.oak.spi.security.authentication.external;
+
+import java.util.HashMap;
+
+import javax.jcr.SimpleCredentials;
+import javax.security.auth.login.LoginException;
+
+import org.apache.jackrabbit.api.security.user.Authorizable;
+import org.apache.jackrabbit.api.security.user.UserManager;
+import org.apache.jackrabbit.oak.api.ContentSession;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+/**
+ * ExternalLoginModuleTest...
+ */
+public class ExternalLoginModuleTest extends ExternalLoginModuleTestBase {
+
+ protected final HashMap<String, Object> options = new HashMap<String, Object>();
+
+ private String userId = "testUser";
+
+ @Before
+ public void before() throws Exception {
+ super.before();
+ }
+
+ @After
+ public void after() throws Exception {
+ super.after();
+ }
+
+ protected ExternalIdentityProvider createIDP() {
+ return new TestIdentityProvider();
+ }
+
+ @Test
+ public void testLoginFailed() throws Exception {
+ UserManager userManager = getUserManager(root);
+ try {
+ ContentSession cs = login(new SimpleCredentials("unknown", new char[0]));
+ cs.close();
+ fail("login failure expected");
+ } catch (LoginException e) {
+ // success
+ } finally {
+ assertNull(userManager.getAuthorizable(userId));
+ }
+ }
+
+ @Test
+ public void testSyncCreateUser() throws Exception {
+ UserManager userManager = getUserManager(root);
+ ContentSession cs = null;
+ try {
+ assertNull(userManager.getAuthorizable(userId));
+
+ cs = login(new SimpleCredentials(userId, new char[0]));
+
+ root.refresh();
+
+ Authorizable a = userManager.getAuthorizable(userId);
+ assertNotNull(a);
+ ExternalUser user = idp.getUser(userId);
+ for (String prop : user.getProperties().keySet()) {
+ assertTrue(a.hasProperty(prop));
+ }
+ } finally {
+ if (cs != null) {
+ cs.close();
+ }
+ options.clear();
+ }
+ }
+
+ @Test
+ @Ignore("group sync not implemented yet")
+ public void testSyncCreateGroup() throws Exception {
+// UserManager userManager = getUserManager(root);
+// ContentSession cs = null;
+// try {
+// cs = login(new SimpleCredentials(userId, new char[0]));
+//
+// root.refresh();
+// for (String id : ids) {
+// assertNull(userManager.getAuthorizable(id));
+// }
+// } finally {
+// if (cs != null) {
+// cs.close();
+// }
+// options.clear();
+// }
+ }
+
+ @Test
+ public void testSyncUpdate() throws Exception {
+ // create user upfront in order to test update mode
+ UserManager userManager = getUserManager(root);
+ ExternalUser externalUser = idp.getUser(userId);
+ Authorizable user = userManager.createUser(externalUser.getId(), externalUser.getPassword());
+ root.commit();
+
+ ContentSession cs = null;
+ try {
+ cs = login(new SimpleCredentials(userId, new char[0]));
+
+ root.refresh();
+
+ Authorizable a = userManager.getAuthorizable(userId);
+ assertNotNull(a);
+ for (String prop : externalUser.getProperties().keySet()) {
+ assertTrue(a.hasProperty(prop));
+ }
+ } finally {
+ if (cs != null) {
+ cs.close();
+ }
+ options.clear();
+ }
+ }
+
+}
\ No newline at end of file
Added: jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/ExternalLoginModuleTestBase.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/ExternalLoginModuleTestBase.java?rev=1566895&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/ExternalLoginModuleTestBase.java (added)
+++ jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/ExternalLoginModuleTestBase.java Tue Feb 11 00:28:49 2014
@@ -0,0 +1,143 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jackrabbit.oak.spi.security.authentication.external;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+import javax.security.auth.login.AppConfigurationEntry;
+import javax.security.auth.login.Configuration;
+
+import org.apache.jackrabbit.api.security.user.Authorizable;
+import org.apache.jackrabbit.api.security.user.UserManager;
+import org.apache.jackrabbit.oak.AbstractSecurityTest;
+import org.apache.jackrabbit.oak.Oak;
+import org.apache.jackrabbit.oak.spi.security.authentication.external.impl.DefaultSyncConfig;
+import org.apache.jackrabbit.oak.spi.security.authentication.external.impl.DefaultSyncHandler;
+import org.apache.jackrabbit.oak.spi.security.authentication.external.impl.ExternalIDPManagerImpl;
+import org.apache.jackrabbit.oak.spi.security.authentication.external.impl.ExternalLoginModule;
+import org.apache.jackrabbit.oak.spi.security.authentication.external.impl.SyncManagerImpl;
+import org.apache.jackrabbit.oak.spi.whiteboard.Registration;
+import org.apache.jackrabbit.oak.spi.whiteboard.Whiteboard;
+import org.junit.After;
+import org.junit.Before;
+
+/**
+ * ExternalLoginModuleTest...
+ */
+public abstract class ExternalLoginModuleTestBase extends AbstractSecurityTest {
+
+ protected final HashMap<String, Object> options = new HashMap<String, Object>();
+
+ private Set<String> ids = new HashSet<String>();
+
+ private Registration testIdpReg;
+
+ private Registration syncHandlerReg;
+
+ protected Whiteboard whiteboard;
+
+ protected ExternalIdentityProvider idp;
+
+ @Before
+ public void before() throws Exception {
+ super.before();
+ UserManager userManager = getUserManager(root);
+ Iterator<Authorizable> iter = userManager.findAuthorizables("jcr:primaryType", null);
+ while (iter.hasNext()) {
+ ids.add(iter.next().getID());
+ }
+ idp = createIDP();
+
+ testIdpReg = whiteboard.register(ExternalIdentityProvider.class, idp, Collections.<String, Object>emptyMap());
+
+ options.put(ExternalLoginModule.PARAM_SYNC_HANDLER_NAME, "default");
+ options.put(ExternalLoginModule.PARAM_IDP_NAME, idp.getName());
+
+ // set default sync config
+ setSyncConfig(new DefaultSyncConfig());
+ }
+
+ @After
+ public void after() throws Exception {
+ if (testIdpReg != null) {
+ testIdpReg.unregister();
+ testIdpReg = null;
+ }
+ idp = null;
+ setSyncConfig(null);
+
+ try {
+ UserManager userManager = getUserManager(root);
+ Iterator<Authorizable> iter = userManager.findAuthorizables("jcr:primaryType", null);
+ while (iter.hasNext()) {
+ ids.remove(iter.next().getID());
+ }
+ for (String id : ids) {
+ Authorizable a = userManager.getAuthorizable(id);
+ if (a != null) {
+ a.remove();
+ }
+ }
+ root.commit();
+ } finally {
+ root.refresh();
+ super.after();
+ }
+ }
+
+ @Override
+ protected Oak withEditors(Oak oak) {
+ super.withEditors(oak);
+
+ // register non-OSGi managers
+ whiteboard = oak.getWhiteboard();
+ whiteboard.register(SyncManager.class, new SyncManagerImpl(whiteboard), Collections.emptyMap());
+ whiteboard.register(ExternalIdentityProviderManager.class, new ExternalIDPManagerImpl(whiteboard), Collections.emptyMap());
+
+ return oak;
+ }
+
+ protected abstract ExternalIdentityProvider createIDP();
+
+ protected void setSyncConfig(DefaultSyncConfig cfg) {
+ if (syncHandlerReg != null) {
+ syncHandlerReg.unregister();
+ syncHandlerReg = null;
+ }
+ if (cfg != null) {
+ syncHandlerReg = whiteboard.register(SyncHandler.class, new DefaultSyncHandler(cfg), Collections.<String, Object>emptyMap());
+ }
+ }
+
+ protected Configuration getConfiguration() {
+ return new Configuration() {
+ @Override
+ public AppConfigurationEntry[] getAppConfigurationEntry(String s) {
+ AppConfigurationEntry entry = new AppConfigurationEntry(
+ ExternalLoginModule.class.getName(),
+ AppConfigurationEntry.LoginModuleControlFlag.REQUIRED,
+ options);
+ return new AppConfigurationEntry[]{entry};
+ }
+ };
+ }
+}
\ No newline at end of file
Added: jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/TestIdentityProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/TestIdentityProvider.java?rev=1566895&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/TestIdentityProvider.java (added)
+++ jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/TestIdentityProvider.java Tue Feb 11 00:28:49 2014
@@ -0,0 +1,173 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.oak.spi.security.authentication.external;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import javax.annotation.Nonnull;
+import javax.jcr.Credentials;
+import javax.jcr.SimpleCredentials;
+import javax.security.auth.login.LoginException;
+
+/**
+ * ExternalLoginModuleImpl... TODO
+ */
+public class TestIdentityProvider implements ExternalIdentityProvider {
+
+ private final Map<String, TestGroup> externalGroups = new HashMap<String, TestGroup>();
+ private final Map<String, TestUser> externalUsers = new HashMap<String, TestUser>();
+
+
+ public TestIdentityProvider() {
+ addGroup(new TestGroup("a").withGroups("aa", "aaa"));
+ addGroup(new TestGroup("b").withGroups("a"));
+ addGroup(new TestGroup("c"));
+
+ addUser(new TestUser("testUser")
+ .withProperty("name", "Test User")
+ .withProperty("profile/name", "Public Name")
+ .withProperty("profile/age", 72)
+ .withProperty("./email", "test@testuser.com")
+ .withGroups("a", "b", "c")
+ );
+ }
+
+ private void addUser(TestIdentity user) {
+ externalUsers.put(user.getId(), (TestUser) user);
+ }
+
+ private void addGroup(TestIdentity group) {
+ externalGroups.put(group.getId(), (TestGroup) group);
+ }
+
+ @Nonnull
+ @Override
+ public String getName() {
+ return "test";
+ }
+
+ @Override
+ public ExternalIdentity getIdentity(@Nonnull ExternalIdentityRef ref) throws ExternalIdentityException {
+ return null;
+ }
+
+ @Override
+ public ExternalUser getUser(@Nonnull String userId) throws ExternalIdentityException {
+ return externalUsers.get(userId);
+ }
+
+ @Override
+ public ExternalUser authenticate(@Nonnull Credentials credentials) throws ExternalIdentityException, LoginException {
+ if (!(credentials instanceof SimpleCredentials)) {
+ return null;
+ }
+ SimpleCredentials creds = (SimpleCredentials) credentials;
+ ExternalUser user = getUser(creds.getUserID());
+ if (user != null) {
+ if (!new String(creds.getPassword()).equals(user.getPassword())) {
+ throw new LoginException("Invalid User/Password");
+ }
+ }
+ return user;
+ }
+
+ @Override
+ public ExternalGroup getGroup(@Nonnull String name) throws ExternalIdentityException {
+ return externalGroups.get(name);
+ }
+
+ private static class TestIdentity implements ExternalIdentity {
+
+ private final String userId;
+ private final ExternalIdentityRef id;
+
+ private final Set<ExternalIdentityRef> groups = new HashSet<ExternalIdentityRef>();
+ private final Map<String, Object> props = new HashMap<String, Object>();
+
+ private TestIdentity(String userId) {
+ this.userId = userId;
+ id = new ExternalIdentityRef(userId, "test");
+ }
+
+ @Override
+ public String getId() {
+ return userId;
+ }
+
+ @Override
+ public String getPrincipalName() {
+ return userId;
+ }
+
+ @Nonnull
+ @Override
+ public ExternalIdentityRef getExternalId() {
+ return id;
+ }
+
+ @Override
+ public String getIntermediatePath() {
+ return null;
+ }
+
+ @Override
+ public Iterable<ExternalIdentityRef> getGroups() {
+ return groups;
+ }
+
+ @Override
+ public Map<String, ?> getProperties() {
+ return props;
+ }
+
+ protected TestIdentity withProperty(String name, Object value) {
+ props.put(name, value);
+ return this;
+ }
+
+ protected TestIdentity withGroups(String ... grps) {
+ for (String grp: grps) {
+ groups.add(new ExternalIdentityRef(grp, "test"));
+ }
+ return this;
+ }
+ }
+
+ private static class TestUser extends TestIdentity implements ExternalUser {
+
+ private TestUser(String userId) {
+ super(userId);
+ }
+
+ @Override
+ public String getPassword() {
+ return "";
+ }
+
+ }
+
+ private static class TestGroup extends TestIdentity implements ExternalGroup {
+
+ private TestGroup(String userId) {
+ super(userId);
+ }
+
+ }
+}
\ No newline at end of file
Added: jackrabbit/oak/trunk/oak-auth-external/src/test/resources/META-INF/services/org.apache.jackrabbit.mk.test.MicroKernelFixture
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-auth-external/src/test/resources/META-INF/services/org.apache.jackrabbit.mk.test.MicroKernelFixture?rev=1566895&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-auth-external/src/test/resources/META-INF/services/org.apache.jackrabbit.mk.test.MicroKernelFixture (added)
+++ jackrabbit/oak/trunk/oak-auth-external/src/test/resources/META-INF/services/org.apache.jackrabbit.mk.test.MicroKernelFixture Tue Feb 11 00:28:49 2014
@@ -0,0 +1,16 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#org.apache.jackrabbit.mk.simple.SimpleKernelImplFixture
Added: jackrabbit/oak/trunk/oak-auth-external/src/test/resources/logback-test.xml
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-auth-external/src/test/resources/logback-test.xml?rev=1566895&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-auth-external/src/test/resources/logback-test.xml (added)
+++ jackrabbit/oak/trunk/oak-auth-external/src/test/resources/logback-test.xml Tue Feb 11 00:28:49 2014
@@ -0,0 +1,39 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+<configuration>
+
+ <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
+ <encoder>
+ <pattern>%date{HH:mm:ss.SSS} %-5level %-40([%thread] %F:%L) %msg%n</pattern>
+ </encoder>
+ </appender>
+
+ <appender name="file" class="ch.qos.logback.core.FileAppender">
+ <file>target/unit-tests.log</file>
+ <encoder>
+ <pattern>%date{HH:mm:ss.SSS} %-5level %-40([%thread] %F:%L) %msg%n</pattern>
+ </encoder>
+ </appender>
+
+ <root level="INFO">
+ <!--
+ <appender-ref ref="console"/>
+ -->
+ <appender-ref ref="file"/>
+ </root>
+
+</configuration>
Added: jackrabbit/oak/trunk/oak-auth-external/src/test/resources/logging.properties
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-auth-external/src/test/resources/logging.properties?rev=1566895&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-auth-external/src/test/resources/logging.properties (added)
+++ jackrabbit/oak/trunk/oak-auth-external/src/test/resources/logging.properties Tue Feb 11 00:28:49 2014
@@ -0,0 +1,16 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+handlers = org.slf4j.bridge.SLF4JBridgeHandler
Modified: jackrabbit/oak/trunk/oak-auth-ldap/README.md
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-auth-ldap/README.md?rev=1566895&r1=1566894&r2=1566895&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-auth-ldap/README.md (original)
+++ jackrabbit/oak/trunk/oak-auth-ldap/README.md Tue Feb 11 00:28:49 2014
@@ -1,2 +1,25 @@
Oak LDAP Authentication Support
===============================
+
+License
+-------
+
+(see the top-level [LICENSE.txt](../LICENSE.txt) for full license details)
+
+Collective work: Copyright 2012 The Apache Software Foundation.
+
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
Modified: jackrabbit/oak/trunk/oak-auth-ldap/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-auth-ldap/pom.xml?rev=1566895&r1=1566894&r2=1566895&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-auth-ldap/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-auth-ldap/pom.xml Tue Feb 11 00:28:49 2014
@@ -131,6 +131,11 @@
<artifactId>oak-core</artifactId>
<version>${project.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.jackrabbit</groupId>
+ <artifactId>oak-auth-external</artifactId>
+ <version>${project.version}</version>
+ </dependency>
<dependency>
<groupId>org.apache.jackrabbit</groupId>
@@ -219,6 +224,13 @@
<classifier>tests</classifier>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.jackrabbit</groupId>
+ <artifactId>oak-auth-external</artifactId>
+ <version>${project.version}</version>
+ <classifier>tests</classifier>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
Modified: jackrabbit/oak/trunk/oak-core/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/pom.xml?rev=1566895&r1=1566894&r2=1566895&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-core/pom.xml Tue Feb 11 00:28:49 2014
@@ -74,7 +74,6 @@
org.apache.jackrabbit.oak.spi.security,
org.apache.jackrabbit.oak.spi.security.authentication,
org.apache.jackrabbit.oak.spi.security.authentication.callback,
- org.apache.jackrabbit.oak.spi.security.authentication.external,
org.apache.jackrabbit.oak.spi.security.authentication.token,
org.apache.jackrabbit.oak.spi.security.authorization,
org.apache.jackrabbit.oak.spi.security.authorization.permission,
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/SecurityProviderImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/SecurityProviderImpl.java?rev=1566895&r1=1566894&r2=1566895&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/SecurityProviderImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/SecurityProviderImpl.java Tue Feb 11 00:28:49 2014
@@ -16,7 +16,6 @@
*/
package org.apache.jackrabbit.oak.security;
-import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
@@ -44,10 +43,6 @@ import org.apache.jackrabbit.oak.spi.sec
import org.apache.jackrabbit.oak.spi.security.SecurityConfiguration;
import org.apache.jackrabbit.oak.spi.security.SecurityProvider;
import org.apache.jackrabbit.oak.spi.security.authentication.AuthenticationConfiguration;
-import org.apache.jackrabbit.oak.spi.security.authentication.external.ExternalIdentityProviderManager;
-import org.apache.jackrabbit.oak.spi.security.authentication.external.SyncManager;
-import org.apache.jackrabbit.oak.spi.security.authentication.external.impl.ExternalIDPManagerImpl;
-import org.apache.jackrabbit.oak.spi.security.authentication.external.impl.SyncManagerImpl;
import org.apache.jackrabbit.oak.spi.security.authentication.token.CompositeTokenConfiguration;
import org.apache.jackrabbit.oak.spi.security.authentication.token.TokenConfiguration;
import org.apache.jackrabbit.oak.spi.security.authorization.AuthorizationConfiguration;
@@ -146,10 +141,6 @@ public class SecurityProviderImpl implem
@Override
public void setWhiteboard(@Nonnull Whiteboard whiteboard) {
this.whiteboard = whiteboard;
-
- // register non-OSGi managers
- whiteboard.register(SyncManager.class, new SyncManagerImpl(whiteboard), Collections.emptyMap());
- whiteboard.register(ExternalIdentityProviderManager.class, new ExternalIDPManagerImpl(whiteboard), Collections.emptyMap());
}
@Override
Modified: jackrabbit/oak/trunk/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/pom.xml?rev=1566895&r1=1566894&r2=1566895&view=diff
==============================================================================
--- jackrabbit/oak/trunk/pom.xml (original)
+++ jackrabbit/oak/trunk/pom.xml Tue Feb 11 00:28:49 2014
@@ -49,6 +49,7 @@
<module>oak-solr-core</module>
<module>oak-solr-remote</module>
<module>oak-solr-embedded</module>
+ <module>oak-auth-external</module>
<module>oak-auth-ldap</module>
<module>oak-run</module>
<module>oak-it</module>