package org.argeo.cms.auth;
import static org.argeo.naming.LdapAttrs.cn;
-import static org.argeo.naming.LdapAttrs.description;
import java.io.IOException;
import java.security.PrivilegedAction;
-import java.time.Instant;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import org.argeo.cms.CmsException;
import org.argeo.cms.internal.kernel.Activator;
import org.argeo.naming.LdapAttrs;
-import org.argeo.naming.NamingUtils;
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.argeo.osgi.useradmin.TokenUtils;
import org.osgi.framework.BundleContext;
import org.osgi.framework.FrameworkUtil;
import org.osgi.framework.ServiceReference;
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);
}
protected Authorization getAuthorizationFromToken(UserAdmin userAdmin, Group tokenGroup) {
- String expiryDateStr = (String) tokenGroup.getProperties().get(description.name());
- if (expiryDateStr != null) {
- Instant expiryDate = NamingUtils.ldapDateToInstant(expiryDateStr);
- if (expiryDate.isBefore(Instant.now())) {
- if (log.isDebugEnabled())
- log.debug("Token " + tokenGroup.getName() + " has expired.");
- return null;
- }
- }
+ if (TokenUtils.isExpired(tokenGroup))
+ return null;
+// String expiryDateStr = (String) tokenGroup.getProperties().get(description.name());
+// if (expiryDateStr != null) {
+// Instant expiryDate = NamingUtils.ldapDateToInstant(expiryDateStr);
+// if (expiryDate.isBefore(Instant.now())) {
+// if (log.isDebugEnabled())
+// log.debug("Token " + tokenGroup.getName() + " has expired.");
+// return null;
+// }
+// }
Authorization auth = userAdmin.getAuthorization(tokenGroup);
return auth;
}