Author: stillalex Date: Tue Jul 24 13:18:24 2018 New Revision: 1836553 URL: http://svn.apache.org/viewvc?rev=1836553&view=rev Log: OAK-6662 Extend CredentialsSupport pluggability - tweaked the backport some more
Removed: jackrabbit/oak/branches/1.6/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/credentials/AbstractCredentials.java jackrabbit/oak/branches/1.6/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/credentials/CompositeCredentialsSupport.java jackrabbit/oak/branches/1.6/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/credentials/CompositeCredentialsSupportTest.java Modified: jackrabbit/oak/branches/1.6/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authentication/token/TokenConfigurationImpl.java jackrabbit/oak/branches/1.6/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/credentials/package-info.java Modified: jackrabbit/oak/branches/1.6/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authentication/token/TokenConfigurationImpl.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.6/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authentication/token/TokenConfigurationImpl.java?rev=1836553&r1=1836552&r2=1836553&view=diff ============================================================================== --- jackrabbit/oak/branches/1.6/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authentication/token/TokenConfigurationImpl.java (original) +++ jackrabbit/oak/branches/1.6/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authentication/token/TokenConfigurationImpl.java Tue Jul 24 13:18:24 2018 @@ -16,6 +16,9 @@ */ package org.apache.jackrabbit.oak.security.authentication.token; +import static com.google.common.collect.Maps.newHashMap; +import static com.google.common.collect.Sets.newHashSet; + import java.security.Principal; import java.util.Collection; import java.util.List; @@ -23,7 +26,9 @@ import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import javax.annotation.CheckForNull; import javax.annotation.Nonnull; +import javax.jcr.Credentials; import com.google.common.base.Supplier; import com.google.common.collect.ImmutableList; @@ -46,7 +51,6 @@ import org.apache.jackrabbit.oak.spi.sec import org.apache.jackrabbit.oak.spi.security.ConfigurationParameters; import org.apache.jackrabbit.oak.spi.security.SecurityConfiguration; import org.apache.jackrabbit.oak.spi.security.SecurityProvider; -import org.apache.jackrabbit.oak.spi.security.authentication.credentials.CompositeCredentialsSupport; import org.apache.jackrabbit.oak.spi.security.authentication.credentials.CredentialsSupport; import org.apache.jackrabbit.oak.spi.security.authentication.credentials.SimpleCredentialsSupport; import org.apache.jackrabbit.oak.spi.security.authentication.token.TokenConfiguration; @@ -160,4 +164,81 @@ public class TokenConfigurationImpl exte return SimpleCredentialsSupport.getInstance(); } } + + /** + * Composite implementation of the + * {@link org.apache.jackrabbit.oak.spi.security.authentication.credentials.CredentialsSupport} + * interface that handles multiple providers. + */ + private static class CompositeCredentialsSupport implements CredentialsSupport { + + @Nonnull + private final Supplier<Collection<CredentialsSupport>> credentialSupplier; + + private CompositeCredentialsSupport(@Nonnull Supplier<Collection<CredentialsSupport>> credentialSupplier) { + this.credentialSupplier = credentialSupplier; + } + + public static CredentialsSupport newInstance( + @Nonnull Supplier<Collection<CredentialsSupport>> credentialSupplier) { + return new CompositeCredentialsSupport(credentialSupplier); + } + + @Override + @Nonnull + public Set<Class> getCredentialClasses() { + Collection<CredentialsSupport> all = this.credentialSupplier.get(); + if (all.isEmpty()) { + return ImmutableSet.of(); + } else if (all.size() == 1) { + return all.iterator().next().getCredentialClasses(); + } else { + Set<Class> classes = newHashSet(); + for (CredentialsSupport c : all) { + classes.addAll(c.getCredentialClasses()); + } + return classes; + } + } + + @Override + @CheckForNull + public String getUserId(@Nonnull Credentials credentials) { + Collection<CredentialsSupport> all = this.credentialSupplier.get(); + for (CredentialsSupport c : all) { + String userId = c.getUserId(credentials); + if (userId != null) { + return userId; + } + } + return null; + } + + @Override + @Nonnull + public Map<String, ?> getAttributes(@Nonnull Credentials credentials) { + Collection<CredentialsSupport> all = this.credentialSupplier.get(); + if (all.isEmpty()) { + return ImmutableMap.of(); + } else if (all.size() == 1) { + return all.iterator().next().getAttributes(credentials); + } else { + Map<String, Object> attrs = newHashMap(); + for (CredentialsSupport c : all) { + attrs.putAll(c.getAttributes(credentials)); + } + return attrs; + } + } + + @Override + public boolean setAttributes(@Nonnull Credentials credentials, @Nonnull Map<String, ?> attributes) { + boolean set = false; + Collection<CredentialsSupport> all = this.credentialSupplier.get(); + for (CredentialsSupport c : all) { + set = c.setAttributes(credentials, attributes) || set; + } + return set; + } + } } \ No newline at end of file Modified: jackrabbit/oak/branches/1.6/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/credentials/package-info.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.6/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/credentials/package-info.java?rev=1836553&r1=1836552&r2=1836553&view=diff ============================================================================== --- jackrabbit/oak/branches/1.6/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/credentials/package-info.java (original) +++ jackrabbit/oak/branches/1.6/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/credentials/package-info.java Tue Jul 24 13:18:24 2018 @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -@Version("2.1.0") +@Version("2.0.0") package org.apache.jackrabbit.oak.spi.security.authentication.credentials; import aQute.bnd.annotation.Version; \ No newline at end of file