X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=security%2Fplugins%2Forg.argeo.security.equinox%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fsecurity%2Fequinox%2FSpringLoginModule.java;h=71ce5715bc937f5d6a4d310d913aa24af8c3da71;hb=484dcb1507e4e35cc282e50522ea7eac7e99a7f9;hp=ad6390d367a13333fc9f459a0199b7cc78bd121e;hpb=528580a33f630f79c61caa1378b581cc13b2b8ed;p=lgpl%2Fargeo-commons.git diff --git a/security/plugins/org.argeo.security.equinox/src/main/java/org/argeo/security/equinox/SpringLoginModule.java b/security/plugins/org.argeo.security.equinox/src/main/java/org/argeo/security/equinox/SpringLoginModule.java index ad6390d36..71ce5715b 100644 --- a/security/plugins/org.argeo.security.equinox/src/main/java/org/argeo/security/equinox/SpringLoginModule.java +++ b/security/plugins/org.argeo.security.equinox/src/main/java/org/argeo/security/equinox/SpringLoginModule.java @@ -7,12 +7,11 @@ import javax.security.auth.callback.Callback; import javax.security.auth.callback.CallbackHandler; import javax.security.auth.callback.NameCallback; import javax.security.auth.callback.PasswordCallback; -import javax.security.auth.callback.TextOutputCallback; import javax.security.auth.login.LoginException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.argeo.security.SiteAuthenticationToken; +import org.argeo.security.NodeAuthenticationToken; import org.springframework.security.Authentication; import org.springframework.security.AuthenticationManager; import org.springframework.security.BadCredentialsException; @@ -21,6 +20,8 @@ import org.springframework.security.providers.jaas.SecurityContextLoginModule; /** Login module which caches one subject per thread. */ public class SpringLoginModule extends SecurityContextLoginModule { + final static String NODE_REPO_URI = "argeo.node.repo.uri"; + private final static Log log = LogFactory.getLog(SpringLoginModule.class); private AuthenticationManager authenticationManager; @@ -28,8 +29,10 @@ public class SpringLoginModule extends SecurityContextLoginModule { private CallbackHandler callbackHandler; private Subject subject; - - private Long waitBetweenFailedLoginAttempts = 5*1000l; + + private Long waitBetweenFailedLoginAttempts = 5 * 1000l; + + private Boolean remote = false; public SpringLoginModule() { @@ -60,21 +63,30 @@ public class SpringLoginModule extends SecurityContextLoginModule { if (subject.getPublicCredentials() != null) subject.getPublicCredentials().clear(); + if (callbackHandler == null) + throw new LoginException("No call back handler available"); + // ask for username and password - Callback label = new TextOutputCallback( - TextOutputCallback.INFORMATION, "Required login"); NameCallback nameCallback = new NameCallback("User"); PasswordCallback passwordCallback = new PasswordCallback( "Password", false); - - // NameCallback urlCallback = new NameCallback("Site URL"); - - if (callbackHandler == null) - throw new LoginException("No call back handler available"); - callbackHandler.handle(new Callback[] { label, nameCallback, - passwordCallback }); - - // Set user name and password + final String defaultNodeUrl = "http://localhost:7070/org.argeo.jcr.webapp/remoting/node"; + final String defaultSecurityWorkspace = "security"; + NameCallback urlCallback = new NameCallback("Site URL", + defaultNodeUrl); + NameCallback securityWorkspaceCallback = new NameCallback( + "Security Workspace", defaultSecurityWorkspace); + + // handle callbacks + if (remote) + callbackHandler.handle(new Callback[] { nameCallback, + passwordCallback, urlCallback, + securityWorkspaceCallback }); + else + callbackHandler.handle(new Callback[] { nameCallback, + passwordCallback }); + + // create credentials String username = nameCallback.getName(); if (username == null || username.trim().equals("")) return false; @@ -83,12 +95,15 @@ public class SpringLoginModule extends SecurityContextLoginModule { if (passwordCallback.getPassword() != null) password = String.valueOf(passwordCallback.getPassword()); - // String url = urlCallback.getName(); - // TODO: set it via system properties - String workspace = null; - - SiteAuthenticationToken credentials = new SiteAuthenticationToken( - username, password, null, workspace); + NodeAuthenticationToken credentials; + if (remote) { + String url = urlCallback.getName(); + String workspace = securityWorkspaceCallback.getName(); + credentials = new NodeAuthenticationToken(username, password, + url, workspace); + } else { + credentials = new NodeAuthenticationToken(username, password); + } Authentication authentication; try { @@ -138,4 +153,8 @@ public class SpringLoginModule extends SecurityContextLoginModule { AuthenticationManager authenticationManager) { this.authenticationManager = authenticationManager; } + + public void setRemote(Boolean remote) { + this.remote = remote; + } }