package org.argeo.cms.internal.kernel;
+import java.net.URL;
+
import javax.jcr.RepositoryException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.argeo.cms.CmsException;
+import org.argeo.cms.internal.useradmin.JcrUserAdmin;
+import org.argeo.cms.internal.useradmin.SimpleJcrSecurityModel;
+import org.argeo.cms.internal.useradmin.jackrabbit.JackrabbitUserAdminService;
import org.argeo.security.UserAdminService;
import org.argeo.security.core.InternalAuthentication;
import org.argeo.security.core.InternalAuthenticationProvider;
-import org.argeo.security.jcr.SimpleJcrSecurityModel;
-import org.argeo.security.jcr.jackrabbit.JackrabbitUserAdminService;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceRegistration;
+import org.osgi.service.useradmin.UserAdmin;
import org.springframework.security.authentication.AnonymousAuthenticationProvider;
import org.springframework.security.authentication.AnonymousAuthenticationToken;
import org.springframework.security.authentication.AuthenticationManager;
private final InternalAuthenticationProvider internalAuth;
private final AnonymousAuthenticationProvider anonymousAuth;
- private final JackrabbitUserAdminService jackrabbitUserAdmin;
+ private final JackrabbitUserAdminService userAdminService;
+ private final JcrUserAdmin userAdmin;
private ServiceRegistration<AuthenticationManager> authenticationManagerReg;
- private ServiceRegistration<UserAdminService> userAdminReg;
+ private ServiceRegistration<UserAdminService> userAdminServiceReg;
private ServiceRegistration<UserDetailsManager> userDetailsManagerReg;
+ private ServiceRegistration<UserAdmin> userAdminReg;
+
public NodeSecurity(BundleContext bundleContext, JackrabbitNode node)
throws RepositoryException {
+ URL url = getClass().getClassLoader().getResource(
+ KernelConstants.JAAS_CONFIG);
+ System.setProperty("java.security.auth.login.config",
+ url.toExternalForm());
+
this.bundleContext = bundleContext;
internalAuth = new InternalAuthenticationProvider(
- KernelConstants.DEFAULT_SECURITY_KEY);
+ Activator.getSystemKey());
anonymousAuth = new AnonymousAuthenticationProvider(
- KernelConstants.DEFAULT_SECURITY_KEY);
+ Activator.getSystemKey());
// user admin
- jackrabbitUserAdmin = new JackrabbitUserAdminService();
- jackrabbitUserAdmin.setRepository(node);
- jackrabbitUserAdmin.setSecurityModel(new SimpleJcrSecurityModel());
- jackrabbitUserAdmin.init();
+ userAdminService = new JackrabbitUserAdminService();
+ userAdminService.setRepository(node);
+ userAdminService.setSecurityModel(new SimpleJcrSecurityModel());
+ userAdminService.init();
+ userAdmin = new JcrUserAdmin(bundleContext, node);
+ userAdmin.setUserAdminService(userAdminService);
}
public void publish() {
authenticationManagerReg = bundleContext.registerService(
AuthenticationManager.class, this, null);
- userAdminReg = bundleContext.registerService(UserAdminService.class,
- jackrabbitUserAdmin, null);
+ userAdminServiceReg = bundleContext.registerService(
+ UserAdminService.class, userAdminService, null);
userDetailsManagerReg = bundleContext.registerService(
- UserDetailsManager.class, jackrabbitUserAdmin, null);
- // userAdminReg =
- // bundleContext.registerService(UserDetailsService.class,
- // jackrabbitUserAdmin, null);
+ UserDetailsManager.class, userAdminService, null);
+ userAdminReg = bundleContext.registerService(UserAdmin.class,
+ userAdmin, null);
}
void destroy() {
try {
- jackrabbitUserAdmin.destroy();
+ userAdminService.destroy();
} catch (RepositoryException e) {
log.error("Error while destroying Jackrabbit useradmin");
}
userDetailsManagerReg.unregister();
- userAdminReg.unregister();
+ userAdminServiceReg.unregister();
authenticationManagerReg.unregister();
+
+ userAdmin.destroy();
+ userAdminReg.unregister();
}
@Override
else if (authentication instanceof AnonymousAuthenticationToken)
auth = anonymousAuth.authenticate(authentication);
else if (authentication instanceof UsernamePasswordAuthenticationToken)
- auth = jackrabbitUserAdmin.authenticate(authentication);
+ auth = userAdminService.authenticate(authentication);
if (auth == null)
throw new CmsException("Could not authenticate " + authentication);
return auth;