import javax.jcr.Session;
import javax.jcr.nodetype.NodeType;
import javax.security.auth.Subject;
-import javax.security.auth.login.CredentialNotFoundException;
import javax.security.auth.login.LoginContext;
import javax.security.auth.login.LoginException;
import javax.servlet.http.HttpServletRequest;
import org.argeo.cms.auth.HttpRequestCallbackHandler;
import org.argeo.eclipse.ui.specific.UiContext;
import org.argeo.jcr.JcrUtils;
-import org.argeo.node.NodeAuthenticated;
import org.argeo.node.NodeConstants;
+import org.argeo.node.security.NodeAuthenticated;
import org.eclipse.rap.rwt.RWT;
import org.eclipse.rap.rwt.application.AbstractEntryPoint;
import org.eclipse.rap.rwt.client.WebClient;
private final Log log = LogFactory.getLog(AbstractCmsEntryPoint.class);
- private final Subject subject;
+ // private final Subject subject;
private LoginContext loginContext;
private final Repository repository;
this.workspace = workspace;
this.defaultPath = defaultPath;
this.factoryProperties = new HashMap<String, String>(factoryProperties);
- subject = new Subject();
+ // subject = new Subject();
// Initial login
try {
- loginContext = new LoginContext(NodeConstants.LOGIN_CONTEXT_USER, subject,
- new HttpRequestCallbackHandler(UiContext.getHttpRequest()));
+ loginContext = new LoginContext(NodeConstants.LOGIN_CONTEXT_USER,
+ new HttpRequestCallbackHandler(UiContext.getHttpRequest(), UiContext.getHttpResponse()));
loginContext.login();
- } catch (CredentialNotFoundException e) {
+ } catch (LoginException e) {
try {
- loginContext = new LoginContext(NodeConstants.LOGIN_CONTEXT_ANONYMOUS, subject);
+ loginContext = new LoginContext(NodeConstants.LOGIN_CONTEXT_USER);
loginContext.login();
} catch (LoginException e1) {
- throw new CmsException("Cannot log as anonymous", e);
+ throw new CmsException("Cannot log in as anonymous", e1);
}
- } catch (LoginException e) {
- throw new CmsException("Cannot initialize subject", e);
}
authChange(loginContext);
@Override
protected final void createContents(final Composite parent) {
UiContext.setData(NodeAuthenticated.KEY, this);
- Subject.doAs(subject, new PrivilegedAction<Void>() {
+ Subject.doAs(loginContext.getSubject(), new PrivilegedAction<Void>() {
@Override
public Void run() {
try {
*/
protected Node getDefaultNode(Session session) throws RepositoryException {
if (!session.hasPermission(defaultPath, "read")) {
- if (session.getUserID().equals(NodeConstants.ROLE_ANONYMOUS))
+ String userId = session.getUserID();
+ if (userId.equals(NodeConstants.ROLE_ANONYMOUS))
// TODO throw a special exception
throw new CmsException("Login required");
else
browserNavigation.pushState(state, title);
}
+ // @Override
+ // public synchronized Subject getSubject() {
+ // return subject;
+ // }
+
@Override
- public synchronized Subject getSubject() {
- return subject;
+ public LoginContext getLoginContext() {
+ return loginContext;
}
@Override
throw new CmsException("Login context should not be null");
try {
loginContext.logout();
- LoginContext anonymousLc = new LoginContext(NodeConstants.LOGIN_CONTEXT_ANONYMOUS, subject);
+ LoginContext anonymousLc = new LoginContext(NodeConstants.LOGIN_CONTEXT_USER);
anonymousLc.login();
authChange(anonymousLc);
} catch (LoginException e) {
- throw new CmsException("Cannot logout", e);
+ log.error("Cannot logout", e);
}
}
}
protected synchronized void doRefresh() {
- Subject.doAs(subject, new PrivilegedAction<Void>() {
+ Subject.doAs(loginContext.getSubject(), new PrivilegedAction<Void>() {
@Override
public Void run() {
refresh();