import java.util.Locale;
import java.util.Set;
import java.util.UUID;
+import java.util.concurrent.Callable;
+import java.util.concurrent.CompletionException;
import javax.security.auth.Subject;
import javax.security.auth.x500.X500Principal;
-import org.argeo.api.NodeConstants;
+import org.argeo.api.cms.CmsConstants;
+import org.argeo.api.cms.CmsSession;
+import org.argeo.api.cms.CmsSessionId;
import org.argeo.cms.internal.auth.CmsSessionImpl;
import org.argeo.cms.internal.auth.ImpliedByPrincipal;
-import org.argeo.cms.internal.kernel.Activator;
+import org.argeo.cms.internal.runtime.CmsContextImpl;
import org.osgi.service.useradmin.Authorization;
/**
if (subject == null)
throw new IllegalArgumentException("Subject cannot be null");
if (subject.getPrincipals(X500Principal.class).size() != 1)
- return NodeConstants.ROLE_ANONYMOUS;
+ return CmsConstants.ROLE_ANONYMOUS;
Principal principal = subject.getPrincipals(X500Principal.class).iterator().next();
return principal.getName();
}
public final static Locale locale(Subject subject) {
Set<Locale> locales = subject.getPublicCredentials(Locale.class);
if (locales.isEmpty()) {
- Locale defaultLocale = Activator.getNodeState().getDefaultLocale();
+ Locale defaultLocale = CmsContextImpl.getCmsContext().getDefaultLocale();
return defaultLocale;
} else
return locales.iterator().next();
if (subject == null)
return true;
String username = getUsername(subject);
- return username == null || username.equalsIgnoreCase(NodeConstants.ROLE_ANONYMOUS);
+ return username == null || username.equalsIgnoreCase(CmsConstants.ROLE_ANONYMOUS);
}
- public CmsSession getCmsSession() {
+ public static CmsSession getCmsSession() {
Subject subject = currentSubject();
CmsSessionId cmsSessionId = subject.getPrivateCredentials(CmsSessionId.class).iterator().next();
- return CmsSessionImpl.getByUuid(cmsSessionId.getUuid());
+ return CmsContextImpl.getCmsContext().getCmsSessionByUuid(cmsSessionId.getUuid());
}
/*
nodeSessionId = subject.getPrivateCredentials(CmsSessionId.class).iterator().next().getUuid();
else
return false;
- CmsSessionImpl cmsSession = CmsSessionImpl.getByUuid(nodeSessionId.toString());
-
+ CmsSessionImpl cmsSession = CmsContextImpl.getCmsContext().getCmsSessionByUuid(nodeSessionId);
+
// FIXME logout all views
// TODO check why it is sometimes null
if (cmsSession != null)
return true;
}
+ /*
+ * PREPARE EVOLUTION OF JAVA APIs INTRODUCED IN JDK 18
+ * The following static methods will be added to Subject
+ */
+ public Subject current() {
+ return currentSubject();
+ }
+
+ public static <T> T callAs(Subject subject, Callable<T> action) {
+ try {
+ return Subject.doAs(subject, new PrivilegedExceptionAction<T>() {
+
+ @Override
+ public T run() throws Exception {
+ return action.call();
+ }
+
+ });
+ } catch (PrivilegedActionException e) {
+ throw new CompletionException("Failed to execute action for " + subject, e.getCause());
+ }
+ }
+
private CurrentUser() {
}
}