X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms.e4.rap%2Fsrc%2Forg%2Fargeo%2Fcms%2Fe4%2Frap%2FCmsE4EntryPointFactory.java;h=05eb7c3d03fb64fddf4366ea186ee67ab42cf077;hb=06ec86e90b88db589d8928b80cbc236f1ea3b230;hp=6b974770eb7d03eabfa4de6d572644e13fac2e22;hpb=24b7848c0ea9f129caf96101cd13ab280bff884e;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms.e4.rap/src/org/argeo/cms/e4/rap/CmsE4EntryPointFactory.java b/org.argeo.cms.e4.rap/src/org/argeo/cms/e4/rap/CmsE4EntryPointFactory.java index 6b974770e..05eb7c3d0 100644 --- a/org.argeo.cms.e4.rap/src/org/argeo/cms/e4/rap/CmsE4EntryPointFactory.java +++ b/org.argeo.cms.e4.rap/src/org/argeo/cms/e4/rap/CmsE4EntryPointFactory.java @@ -3,17 +3,26 @@ package org.argeo.cms.e4.rap; import java.security.PrivilegedAction; import javax.security.auth.Subject; +import javax.security.auth.login.LoginContext; +import javax.security.auth.login.LoginException; +import org.argeo.cms.CmsException; +import org.argeo.cms.auth.CurrentUser; +import org.argeo.cms.ui.CmsImageManager; +import org.argeo.cms.ui.CmsView; +import org.argeo.cms.ui.UxContext; +import org.argeo.cms.util.SimpleUxContext; +import org.argeo.cms.widgets.auth.CmsLoginShell; +import org.argeo.node.NodeConstants; import org.eclipse.rap.e4.E4ApplicationConfig; import org.eclipse.rap.e4.E4EntryPointFactory; import org.eclipse.rap.rwt.application.EntryPoint; +import org.eclipse.swt.widgets.Display; public class CmsE4EntryPointFactory extends E4EntryPointFactory { - private Subject subject; - public CmsE4EntryPointFactory(Subject subject, E4ApplicationConfig config) { + public CmsE4EntryPointFactory(E4ApplicationConfig config) { super(config); - this.subject = subject; } @Override @@ -24,14 +33,21 @@ public class CmsE4EntryPointFactory extends E4EntryPointFactory { @Override public int createUI() { - return Subject.doAs(subject, new PrivilegedAction() { + Subject subject = new Subject(); +// boolean success = login(subject); +// if (success) + return Subject.doAs(subject, new PrivilegedAction() { - @Override - public Integer run() { - return ep.createUI(); - } + @Override + public Integer run() { +// RWT.setLocale(Locale.FRENCH); + System.out.println("createUI"); + return ep.createUI(); + } - }); + }); +// else +// return 1; } }; return authEp; @@ -41,4 +57,98 @@ public class CmsE4EntryPointFactory extends E4EntryPointFactory { return super.create(); } + boolean login(Subject subject) { + // Subject subject = Subject.getSubject(AccessController.getContext()); + Display display = new Display(); + CmsView cmsView = new E4CmsView(subject); + CmsLoginShell loginShell = new CmsLoginShell(cmsView); + loginShell.setSubject(subject); + try { + // try pre-auth + LoginContext loginContext = new LoginContext(NodeConstants.LOGIN_CONTEXT_USER, subject, loginShell); + loginContext.login(); + } catch (LoginException e) { + loginShell.createUi(); + loginShell.open(); + + while (!loginShell.getShell().isDisposed()) { + if (!display.readAndDispatch()) + display.sleep(); + } + } finally { + display.dispose(); + } + if (CurrentUser.getUsername(subject) == null) + return false; + return true; + } + + class E4CmsView implements CmsView { + private LoginContext loginContext; + private UxContext uxContext; + private Subject subject; + + public E4CmsView(Subject subject) { + this.subject = subject; + uxContext = new SimpleUxContext(); + } + + @Override + public UxContext getUxContext() { + return uxContext; + } + + @Override + public void navigateTo(String state) { + // TODO Auto-generated method stub + + } + + @Override + public void authChange(LoginContext loginContext) { + if (loginContext == null) + throw new CmsException("Login context cannot be null"); + // logout previous login context + // if (this.loginContext != null) + // try { + // this.loginContext.logout(); + // } catch (LoginException e1) { + // System.err.println("Could not log out: " + e1); + // } + this.loginContext = loginContext; + } + + @Override + public void logout() { + if (loginContext == null) + throw new CmsException("Login context should not bet null"); + try { + CurrentUser.logoutCmsSession(loginContext.getSubject()); + loginContext.logout(); + } catch (LoginException e) { + throw new CmsException("Cannot log out", e); + } + } + + @Override + public void exception(Throwable e) { + // TODO Auto-generated method stub + + } + + @Override + public CmsImageManager getImageManager() { + // TODO Auto-generated method stub + return null; + } + + protected Subject getSubject() { + return subject; + } + + @Override + public boolean isAnonymous() { + return CurrentUser.isAnonymous(getSubject()); + } + } }