X-Git-Url: https://git.argeo.org/?p=gpl%2Fargeo-suite.git;a=blobdiff_plain;f=org.argeo.suite.e4.rap%2Fsrc%2Forg%2Fargeo%2Fsuite%2Fe4%2Frap%2FArgeoSuiteLoginLifecycle.java;fp=org.argeo.suite.e4.rap%2Fsrc%2Forg%2Fargeo%2Fsuite%2Fe4%2Frap%2FArgeoSuiteLoginLifecycle.java;h=32623110eae8006d672cfc07e5988758057a594a;hp=0000000000000000000000000000000000000000;hb=91ba500dcfe75cde313a513e341b7f9f57d64d75;hpb=64087c5f0f528e7cba3f3e53f22b2868ed63fc13 diff --git a/org.argeo.suite.e4.rap/src/org/argeo/suite/e4/rap/ArgeoSuiteLoginLifecycle.java b/org.argeo.suite.e4.rap/src/org/argeo/suite/e4/rap/ArgeoSuiteLoginLifecycle.java new file mode 100644 index 0000000..3262311 --- /dev/null +++ b/org.argeo.suite.e4.rap/src/org/argeo/suite/e4/rap/ArgeoSuiteLoginLifecycle.java @@ -0,0 +1,66 @@ +package org.argeo.suite.e4.rap; + +import java.security.PrivilegedActionException; +import java.security.PrivilegedExceptionAction; + +import javax.inject.Inject; +import javax.jcr.Node; +import javax.jcr.Repository; +import javax.jcr.RepositoryException; +import javax.jcr.Session; +import javax.security.auth.Subject; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.argeo.cms.e4.rap.CmsLoginLifecycle; +import org.argeo.connect.ui.SystemWorkbenchService; +import org.argeo.jcr.JcrUtils; + +public class ArgeoSuiteLoginLifecycle extends CmsLoginLifecycle { + private final static Log log = LogFactory.getLog(ArgeoSuiteLoginLifecycle.class); + @Inject + SystemWorkbenchService systemWorkbenchService; + + @Inject + Repository repository; + + @Override + protected void startupComplete() { + loadState(); + } + + @Override + protected void stateChanged() { + loadState(); + } + + private void loadState() { + String state = getState(); + if (state != null && state.startsWith("/")) { + Session session = null; + try { + Subject subject = getSubject(); + session = Subject.doAs(subject, new PrivilegedExceptionAction() { + + @Override + public Session run() throws PrivilegedActionException { + try { + return repository.login(); + } catch (RepositoryException e) { + throw new PrivilegedActionException(e); + } + } + + }); + if (state.startsWith("/")) { + Node node = session.getNode(state); + systemWorkbenchService.openEntityEditor(node); + } + } catch (RepositoryException | PrivilegedActionException e) { + log.error("Cannot load state " + state, e); + } finally { + JcrUtils.logoutQuietly(session); + } + } + } +}