Index: DefaultSecurityProvider.java =================================================================== --- DefaultSecurityProvider.java (revision 0) +++ DefaultSecurityProvider.java (working copy) @@ -0,0 +1,136 @@ +package org.apache.jackrabbit.oak.security; + +import com.google.common.collect.Lists; +import org.apache.jackrabbit.oak.spi.security.ConfigurationBase; +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.AuthenticationConfiguration; +import org.apache.jackrabbit.oak.spi.security.authentication.token.TokenConfiguration; +import org.apache.jackrabbit.oak.spi.security.authorization.AuthorizationConfiguration; +import org.apache.jackrabbit.oak.spi.security.principal.PrincipalConfiguration; +import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConfiguration; +import org.apache.jackrabbit.oak.spi.security.user.UserConfiguration; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +class DefaultSecurityProvider implements SecurityProvider { + + private final AuthorizationConfiguration authorizationConfiguration; + + private final AuthenticationConfiguration authenticationConfiguration; + + private final PrivilegeConfiguration privilegeConfiguration; + + private final UserConfiguration userConfiguration; + + private final PrincipalConfiguration principalConfiguration; + + private final TokenConfiguration tokenConfiguration; + + DefaultSecurityProvider(DefaultSecurityProviderBuilder builder) { + authorizationConfiguration = builder.getAuthorizationConfiguration(); + authenticationConfiguration = builder.getAuthenticationConfiguration(); + privilegeConfiguration = builder.getPrivilegeConfiguration(); + userConfiguration = builder.getUserConfiguration(); + principalConfiguration = builder.getPrincipalConfiguration(); + tokenConfiguration = builder.getTokenConfiguration(); + + bindSecurityProvider(); + } + + private void bindSecurityProvider() { + bindSecurityProvider(authorizationConfiguration); + bindSecurityProvider(authenticationConfiguration); + bindSecurityProvider(privilegeConfiguration); + bindSecurityProvider(userConfiguration); + bindSecurityProvider(principalConfiguration); + bindSecurityProvider(tokenConfiguration); + } + + private void bindSecurityProvider(SecurityConfiguration configuration) { + if (configuration instanceof ConfigurationBase) { + bindSecurityProvider((ConfigurationBase) configuration); + } + } + + private void bindSecurityProvider(ConfigurationBase configuration) { + configuration.setSecurityProvider(this); + } + + @Nonnull + @Override + public ConfigurationParameters getParameters(@Nullable String name) { + if (AuthorizationConfiguration.NAME.equals(name)) { + return authorizationConfiguration.getParameters(); + } + + if (AuthenticationConfiguration.NAME.equals(name)) { + return authenticationConfiguration.getParameters(); + } + + if (PrivilegeConfiguration.NAME.equals(name)) { + return privilegeConfiguration.getParameters(); + } + + if (UserConfiguration.NAME.equals(name)) { + return userConfiguration.getParameters(); + } + + if (PrincipalConfiguration.NAME.equals(name)) { + return principalConfiguration.getParameters(); + } + + if (TokenConfiguration.NAME.equals(name)) { + return tokenConfiguration.getParameters(); + } + + return ConfigurationParameters.EMPTY; + } + + @Nonnull + @Override + public Iterable getConfigurations() { + return Lists.newArrayList( + authorizationConfiguration, + authenticationConfiguration, + privilegeConfiguration, + userConfiguration, + principalConfiguration, + tokenConfiguration + ); + } + + @Nonnull + @Override + @SuppressWarnings("unchecked") + public T getConfiguration(@Nonnull Class clazz) { + if (AuthorizationConfiguration.class == clazz) { + return (T) authorizationConfiguration; + } + + if (AuthenticationConfiguration.class == clazz) { + return (T) authenticationConfiguration; + } + + if (PrivilegeConfiguration.class == clazz) { + return (T) privilegeConfiguration; + } + + if (UserConfiguration.class == clazz) { + return (T) userConfiguration; + } + + if (PrincipalConfiguration.class == clazz) { + return (T) principalConfiguration; + } + + if (TokenConfiguration.class == clazz) { + return (T) tokenConfiguration; + } + + throw new IllegalArgumentException("Unsupported security configuration class " + clazz); + } + +} Property changes on: DefaultSecurityProvider.java ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Index: DefaultSecurityProviderBuilder.java =================================================================== --- DefaultSecurityProviderBuilder.java (revision 0) +++ DefaultSecurityProviderBuilder.java (working copy) @@ -0,0 +1,91 @@ +package org.apache.jackrabbit.oak.security; + +import org.apache.jackrabbit.oak.spi.security.authentication.AuthenticationConfiguration; +import org.apache.jackrabbit.oak.spi.security.authentication.token.TokenConfiguration; +import org.apache.jackrabbit.oak.spi.security.authorization.AuthorizationConfiguration; +import org.apache.jackrabbit.oak.spi.security.principal.PrincipalConfiguration; +import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConfiguration; +import org.apache.jackrabbit.oak.spi.security.user.UserConfiguration; + +import static com.google.common.base.Preconditions.checkNotNull; + +class DefaultSecurityProviderBuilder { + + public static DefaultSecurityProviderBuilder create() { + return new DefaultSecurityProviderBuilder(); + } + + private AuthorizationConfiguration authorizationConfiguration; + + private AuthenticationConfiguration authenticationConfiguration; + + private PrivilegeConfiguration privilegeConfiguration; + + private UserConfiguration userConfiguration; + + private PrincipalConfiguration principalConfiguration; + + private TokenConfiguration tokenConfiguration; + + private DefaultSecurityProviderBuilder() { + } + + public DefaultSecurityProviderBuilder withAuthorizationConfiguration(AuthorizationConfiguration authorizationConfiguration) { + this.authorizationConfiguration = checkNotNull(authorizationConfiguration); + return this; + } + + public DefaultSecurityProviderBuilder withAuthenticationConfiguration(AuthenticationConfiguration authenticationConfiguration) { + this.authenticationConfiguration = checkNotNull(authenticationConfiguration); + return this; + } + + public DefaultSecurityProviderBuilder withPrivilegeConfiguration(PrivilegeConfiguration privilegeConfiguration) { + this.privilegeConfiguration = checkNotNull(privilegeConfiguration); + return this; + } + + public DefaultSecurityProviderBuilder withUserConfiguration(UserConfiguration userConfiguration) { + this.userConfiguration = checkNotNull(userConfiguration); + return this; + } + + public DefaultSecurityProviderBuilder withPrincipalConfiguration(PrincipalConfiguration principalConfiguration) { + this.principalConfiguration = checkNotNull(principalConfiguration); + return this; + } + + public DefaultSecurityProviderBuilder withTokenConfiguration(TokenConfiguration tokenConfiguration) { + this.tokenConfiguration = checkNotNull(tokenConfiguration); + return this; + } + + public DefaultSecurityProvider build() { + return new DefaultSecurityProvider(this); + } + + AuthorizationConfiguration getAuthorizationConfiguration() { + return checkNotNull(authorizationConfiguration); + } + + AuthenticationConfiguration getAuthenticationConfiguration() { + return checkNotNull(authenticationConfiguration); + } + + PrivilegeConfiguration getPrivilegeConfiguration() { + return checkNotNull(privilegeConfiguration); + } + + UserConfiguration getUserConfiguration() { + return checkNotNull(userConfiguration); + } + + PrincipalConfiguration getPrincipalConfiguration() { + return checkNotNull(principalConfiguration); + } + + TokenConfiguration getTokenConfiguration() { + return checkNotNull(tokenConfiguration); + } + +} Property changes on: DefaultSecurityProviderBuilder.java ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Index: DefaultSecurityProviderRegistration.java =================================================================== --- DefaultSecurityProviderRegistration.java (revision 0) +++ DefaultSecurityProviderRegistration.java (working copy) @@ -0,0 +1,79 @@ +package org.apache.jackrabbit.oak.security; + +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.Properties; +import org.apache.felix.scr.annotations.Property; +import org.apache.felix.scr.annotations.Reference; +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.token.TokenConfiguration; +import org.apache.jackrabbit.oak.spi.security.authorization.AuthorizationConfiguration; +import org.apache.jackrabbit.oak.spi.security.principal.PrincipalConfiguration; +import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConfiguration; +import org.apache.jackrabbit.oak.spi.security.user.UserConfiguration; +import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceRegistration; + +import java.util.Map; + +@Component(immediate = true, metatype = true) +@Properties({ + @Property(name = "enabled", boolValue = true) +}) +class DefaultSecurityProviderRegistration { + + @Reference + private AuthorizationConfiguration authorizationConfiguration; + + @Reference + private AuthenticationConfiguration authenticationConfiguration; + + @Reference + private PrivilegeConfiguration privilegeConfiguration; + + @Reference + private UserConfiguration userConfiguration; + + @Reference + private PrincipalConfiguration principalConfiguration; + + @Reference + private TokenConfiguration tokenConfiguration; + + private ServiceRegistration registration; + + @Activate + public void activate(BundleContext bundleContext, Map configuration) { + Boolean activate = (Boolean) configuration.get("enabled"); + + if (activate == null || activate == Boolean.FALSE) { + return; + } + + registration = bundleContext.registerService(SecurityProvider.class.getName(), createSecurityProvider(), null); + } + + @Deactivate + public void deactivate() { + if (registration == null) { + return; + } + + registration.unregister(); + registration = null; + } + + private DefaultSecurityProvider createSecurityProvider() { + return DefaultSecurityProviderBuilder.create() + .withAuthorizationConfiguration(authorizationConfiguration) + .withAuthenticationConfiguration(authenticationConfiguration) + .withPrivilegeConfiguration(privilegeConfiguration) + .withUserConfiguration(userConfiguration) + .withPrincipalConfiguration(principalConfiguration) + .withTokenConfiguration(tokenConfiguration) + .build(); + } + +} Property changes on: DefaultSecurityProviderRegistration.java ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property