import javax.security.auth.x500.X500Principal;
import org.argeo.cms.CmsException;
-import org.argeo.cms.CmsView;
-import org.argeo.cms.util.CmsUtils;
+import org.argeo.eclipse.ui.specific.UiContext;
+import org.argeo.node.NodeConstants;
+import org.argeo.node.security.NodeAuthenticated;
import org.osgi.service.useradmin.Authorization;
/** Static utilities */
public final class CurrentUser {
+
/**
* @return the authenticated username or null if not authenticated /
* anonymous
return isAnonymous(currentSubject());
}
+ public static boolean isRegistered() {
+ return !isAnonymous();
+ }
+
public static boolean isAnonymous(Subject subject) {
+ if (subject == null)
+ return true;
String username = getUsername(subject);
return username == null
- || username.equalsIgnoreCase(AuthConstants.ROLE_ANONYMOUS);
+ || username.equalsIgnoreCase(NodeConstants.ROLE_ANONYMOUS);
}
- private static Subject currentSubject() {
- CmsView cmsView = CmsUtils.getCmsView();
- if (cmsView != null)
- return cmsView.getSubject();
- Subject subject = Subject.getSubject(AccessController.getContext());
- if (subject != null)
- return subject;
- throw new CmsException("Cannot find related subject");
+ /**
+ * The node authenticated component (typically a CMS view) related to this
+ * display, or null if none is available from this call.
+ */
+ public static NodeAuthenticated getNodeAuthenticated() {
+ return UiContext.getData(NodeAuthenticated.KEY);
}
public final static String getUsername(Subject subject) {
- // Subject subject = Subject.getSubject(AccessController.getContext());
- // if (subject == null)
- // return null;
+ if (subject == null)
+ throw new CmsException("Subject cannot be null");
if (subject.getPrincipals(X500Principal.class).size() != 1)
- return null;
+ return NodeConstants.ROLE_ANONYMOUS;
Principal principal = subject.getPrincipals(X500Principal.class)
.iterator().next();
return principal.getName();
-
}
public final static String getDisplayName(Subject subject) {
return roles(currentSubject());
}
+ private static Subject currentSubject() {
+ NodeAuthenticated cmsView = getNodeAuthenticated();
+ if (cmsView != null)
+ return cmsView.getLoginContext().getSubject();
+ Subject subject = Subject.getSubject(AccessController.getContext());
+ if (subject != null)
+ return subject;
+ throw new CmsException("Cannot find related subject");
+ }
+
+ /** Returns true if the current user is in the specified role */
+ public static boolean isInRole(String role) {
+ Set<String> roles = roles();
+ return roles.contains(role);
+ }
+
public final static Set<String> roles(Subject subject) {
Set<String> roles = new HashSet<String>();
- X500Principal userPrincipal = subject
- .getPrincipals(X500Principal.class).iterator().next();
- roles.add(userPrincipal.getName());
+ roles.add(getUsername(subject));
for (Principal group : subject.getPrincipals(Group.class)) {
roles.add(group.getName());
}