X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms.ui%2Fsrc%2Forg%2Fargeo%2Fcms%2Fui%2FAbstractCmsEntryPoint.java;h=030b4104cda738f7607d7e1c4e33a2080226dea6;hb=7e333073d07b780efe681306a1842a750cbea83c;hp=4729c5b75d200dc07d3f87536f54af956821eee8;hpb=c5fa035468228d1f87ab5431a3fad17403eee1c3;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms.ui/src/org/argeo/cms/ui/AbstractCmsEntryPoint.java b/org.argeo.cms.ui/src/org/argeo/cms/ui/AbstractCmsEntryPoint.java index 4729c5b75..030b4104c 100644 --- a/org.argeo.cms.ui/src/org/argeo/cms/ui/AbstractCmsEntryPoint.java +++ b/org.argeo.cms.ui/src/org/argeo/cms/ui/AbstractCmsEntryPoint.java @@ -20,11 +20,11 @@ import javax.servlet.http.HttpServletRequest; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.argeo.cms.CmsException; -import org.argeo.cms.auth.AuthConstants; 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; @@ -38,9 +38,11 @@ import org.eclipse.swt.widgets.Shell; /** Manages history and navigation */ public abstract class AbstractCmsEntryPoint extends AbstractEntryPoint implements CmsView { + private static final long serialVersionUID = 906558779562569784L; + private final Log log = LogFactory.getLog(AbstractCmsEntryPoint.class); - private final Subject subject; + // private final Subject subject; private LoginContext loginContext; private final Repository repository; @@ -66,16 +68,16 @@ public abstract class AbstractCmsEntryPoint extends AbstractEntryPoint implement this.workspace = workspace; this.defaultPath = defaultPath; this.factoryProperties = new HashMap(factoryProperties); - subject = new Subject(); + // subject = new Subject(); // Initial login try { - loginContext = new LoginContext(AuthConstants.LOGIN_CONTEXT_USER, subject, + loginContext = new LoginContext(NodeConstants.LOGIN_CONTEXT_USER, new HttpRequestCallbackHandler(UiContext.getHttpRequest())); loginContext.login(); } catch (CredentialNotFoundException e) { try { - loginContext = new LoginContext(AuthConstants.LOGIN_CONTEXT_ANONYMOUS, subject); + loginContext = new LoginContext(NodeConstants.LOGIN_CONTEXT_ANONYMOUS); loginContext.login(); } catch (LoginException e1) { throw new CmsException("Cannot log as anonymous", e); @@ -110,7 +112,7 @@ public abstract class AbstractCmsEntryPoint extends AbstractEntryPoint implement @Override protected final void createContents(final Composite parent) { UiContext.setData(NodeAuthenticated.KEY, this); - Subject.doAs(subject, new PrivilegedAction() { + Subject.doAs(loginContext.getSubject(), new PrivilegedAction() { @Override public Void run() { try { @@ -135,7 +137,8 @@ public abstract class AbstractCmsEntryPoint extends AbstractEntryPoint implement */ protected Node getDefaultNode(Session session) throws RepositoryException { if (!session.hasPermission(defaultPath, "read")) { - if (session.getUserID().equals(AuthConstants.ROLE_ANONYMOUS)) + String userId = session.getUserID(); + if (userId.equals(NodeConstants.ROLE_ANONYMOUS)) // TODO throw a special exception throw new CmsException("Login required"); else @@ -156,9 +159,14 @@ public abstract class AbstractCmsEntryPoint extends AbstractEntryPoint implement browserNavigation.pushState(state, title); } + // @Override + // public synchronized Subject getSubject() { + // return subject; + // } + @Override - public synchronized Subject getSubject() { - return subject; + public LoginContext getLoginContext() { + return loginContext; } @Override @@ -167,7 +175,7 @@ public abstract class AbstractCmsEntryPoint extends AbstractEntryPoint implement throw new CmsException("Login context should not be null"); try { loginContext.logout(); - LoginContext anonymousLc = new LoginContext(AuthConstants.LOGIN_CONTEXT_ANONYMOUS, subject); + LoginContext anonymousLc = new LoginContext(NodeConstants.LOGIN_CONTEXT_ANONYMOUS); anonymousLc.login(); authChange(anonymousLc); } catch (LoginException e) { @@ -191,10 +199,7 @@ public abstract class AbstractCmsEntryPoint extends AbstractEntryPoint implement try { node = session.getNode(nodePath); } catch (PathNotFoundException e) { - // logout(); - // session = repository.login(workspace); navigateTo("~"); - // throw e; } // refresh UI @@ -217,7 +222,7 @@ public abstract class AbstractCmsEntryPoint extends AbstractEntryPoint implement } protected synchronized void doRefresh() { - Subject.doAs(subject, new PrivilegedAction() { + Subject.doAs(loginContext.getSubject(), new PrivilegedAction() { @Override public Void run() { refresh(); @@ -239,10 +244,7 @@ public abstract class AbstractCmsEntryPoint extends AbstractEntryPoint implement try { int firstSlash = state.indexOf('/'); if (firstSlash == 0) { - if (session.nodeExists(state)) - node = session.getNode(state); - else - throw new CmsException("Data " + state + " does not exist"); + node = session.getNode(state); page = ""; } else if (firstSlash > 0) { String prefix = state.substring(0, firstSlash); @@ -265,6 +267,8 @@ public abstract class AbstractCmsEntryPoint extends AbstractEntryPoint implement return title; } catch (Exception e) { log.error("Cannot set state '" + state + "'", e); + if (state.equals("") || newState.equals("~") || newState.equals(previousState)) + return "Unrecoverable exception : " + e.getClass().getSimpleName(); if (previousState.equals("")) previousState = "~"; navigateTo(previousState);