import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.argeo.cms.CmsException;
+import org.argeo.cms.internal.kernel.Activator;
import org.argeo.naming.LdapAttrs;
import org.argeo.osgi.useradmin.AuthenticatingUser;
import org.argeo.osgi.useradmin.IpaUtils;
+import org.argeo.osgi.useradmin.OsUserUtils;
import org.osgi.framework.BundleContext;
import org.osgi.framework.FrameworkUtil;
import org.osgi.service.useradmin.Authorization;
private Authorization bindAuthorization = null;
+ private boolean singleUser = Activator.isSingleUser();
+
@SuppressWarnings("unchecked")
@Override
public void initialize(Subject subject, CallbackHandler callbackHandler, Map<String, ?> sharedState,
username = (String) sharedState.get(CmsAuthUtils.SHARED_STATE_NAME);
certificateChain = (X509Certificate[]) sharedState.get(CmsAuthUtils.SHARED_STATE_CERTIFICATE_CHAIN);
password = null;
+ } else if (singleUser) {
+ username = OsUserUtils.getOsUsername();
+ password = null;
} else {
+
// ask for username and password
NameCallback nameCallback = new NameCallback("User");
PasswordCallback passwordCallback = new PasswordCallback("Password", false);
}
} else if (certificateChain != null) {
// TODO check CRLs/OSCP validity?
- // NB: authorization in commit() will work only if an LDAP connection password is provided
- }else {
+ // NB: authorization in commit() will work only if an LDAP connection password
+ // is provided
+ } else if (singleUser) {
+ // TODO verify IP address?
+ } else {
throw new CredentialNotFoundException("No credentials provided");
}
@Override
public boolean commit() throws LoginException {
+ if (singleUser) {
+ OsUserUtils.loginAsSystemUser(subject);
+ }
UserAdmin userAdmin = bc.getService(bc.getServiceReference(UserAdmin.class));
Authorization authorization;
if (callbackHandler == null) {// anonymous