import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.argeo.api.NodeConstants;
+import org.argeo.api.security.CryptoKeyring;
import org.argeo.cms.CmsException;
import org.argeo.cms.internal.kernel.Activator;
import org.argeo.naming.LdapAttrs;
-import org.argeo.node.NodeConstants;
-import org.argeo.node.security.CryptoKeyring;
import org.argeo.osgi.useradmin.AuthenticatingUser;
import org.argeo.osgi.useradmin.IpaUtils;
import org.argeo.osgi.useradmin.OsUserUtils;
import org.osgi.service.useradmin.User;
import org.osgi.service.useradmin.UserAdmin;
+/** Use the {@link UserAdmin} in the OSGi registry as the basis for authentication.*/
public class UserAdminLoginModule implements LoginModule {
private final static Log log = LogFactory.getLog(UserAdminLoginModule.class);
final String username;
final char[] password;
Object certificateChain = null;
+ boolean preauth = false;
if (sharedState.containsKey(CmsAuthUtils.SHARED_STATE_NAME)
&& sharedState.containsKey(CmsAuthUtils.SHARED_STATE_PWD)) {
// NB: required by Basic http auth
username = certDn;
certificateChain = sharedState.get(CmsAuthUtils.SHARED_STATE_CERTIFICATE_CHAIN);
password = null;
+ } else if (sharedState.containsKey(CmsAuthUtils.SHARED_STATE_NAME)
+ && sharedState.containsKey(CmsAuthUtils.SHARED_STATE_REMOTE_ADDR)
+ && sharedState.containsKey(CmsAuthUtils.SHARED_STATE_REMOTE_PORT)) {// ident
+ username = (String) sharedState.get(CmsAuthUtils.SHARED_STATE_NAME);
+ password = null;
+ preauth = true;
} else if (singleUser) {
username = OsUserUtils.getOsUsername();
password = null;
// is provided
} else if (singleUser) {
// TODO verify IP address?
+ } else if (preauth) {
+ // ident
} else {
throw new CredentialNotFoundException("No credentials provided");
}
// Log and monitor new login
HttpServletRequest request = (HttpServletRequest) sharedState.get(CmsAuthUtils.SHARED_STATE_HTTP_REQUEST);
- CmsAuthUtils.addAuthorization(subject, authorization, locale, request);
+ CmsAuthUtils.addAuthorization(subject, authorization);
// Unlock keyring (underlying login to the JCR repository)
char[] password = (char[]) sharedState.get(CmsAuthUtils.SHARED_STATE_PWD);
// return null;
// }
// }
- Authorization auth = userAdmin.getAuthorization(tokenGroup);
+ String userDn = TokenUtils.userDn(tokenGroup);
+ User user = (User) userAdmin.getRole(userDn);
+ Authorization auth = userAdmin.getAuthorization(user);
return auth;
}
}