return CurrentUser.isAnonymous(cmsView.getSubject());
}
- protected void createContents(Composite parent) {
+ public void createContents(Composite parent) {
+ defaultCreateContents(parent);
+ }
+
+ public final void defaultCreateContents(Composite parent) {
parent.setLayout(CmsUtils.noSpaceGridLayout());
Composite credentialsBlock = createCredentialsBlock(parent);
if (parent instanceof Shell) {
}
}
- protected final Composite createCredentialsBlock(Composite parent) {
+ public final Composite createCredentialsBlock(Composite parent) {
if (isAnonymous()) {
return anonymousUi(parent);
} else {
<artifactId>org.argeo.eclipse.ui</artifactId>
<version>2.1.29-SNAPSHOT</version>
</dependency>
- <dependency>
- <groupId>org.argeo.commons</groupId>
- <artifactId>org.argeo.eclipse.ui.rap</artifactId>
- <version>2.1.29-SNAPSHOT</version>
- <scope>provided</scope>
- </dependency>
</dependencies>
</project>
\ No newline at end of file
</entrypoint>
<entrypoint
brandingId="org.argeo.security.ui.rap.defaultBranding"
- class="org.argeo.security.ui.rap.RapLoginEntryPoint"
+ class="org.argeo.security.ui.rap.RapWorkbenchLogin"
id="org.argeo.security.ui.rap.secureEntryPoint"
path="/login">
</entrypoint>
+++ /dev/null
-package org.argeo.security.ui.rap;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.argeo.security.ui.login.WorkbenchLogin;
-import org.eclipse.rap.rwt.RWT;
-import org.eclipse.rap.rwt.client.service.JavaScriptExecutor;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.ui.PlatformUI;
-
-public class RapLoginEntryPoint extends WorkbenchLogin {
-
- @Override
- protected int createAndRunWorkbench(Display display, String username) {
- RapWorkbenchAdvisor workbenchAdvisor = createRapWorkbenchAdvisor(username);
- return PlatformUI.createAndRunWorkbench(display, workbenchAdvisor);
- }
-
- /** Override to provide an application specific workbench advisor */
- protected RapWorkbenchAdvisor createRapWorkbenchAdvisor(String username) {
- return new RapWorkbenchAdvisor(username);
- }
-
- protected HttpServletRequest getRequest() {
- return RWT.getRequest();
- }
-
- @Override
- public int createUI() {
- JavaScriptExecutor jsExecutor = RWT.getClient().getService(
- JavaScriptExecutor.class);
- int returnCode = super.createUI();
- jsExecutor.execute("location.reload()");
- return returnCode;
- }
-
-}
--- /dev/null
+package org.argeo.security.ui.rap;
+
+import org.eclipse.rap.rwt.RWT;
+import org.eclipse.rap.rwt.client.service.JavaScriptExecutor;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.PlatformUI;
+
+public class RapWorkbenchLogin extends WorkbenchLogin {
+
+ @Override
+ protected int createAndRunWorkbench(Display display, String username) {
+ RapWorkbenchAdvisor workbenchAdvisor = createRapWorkbenchAdvisor(username);
+ return PlatformUI.createAndRunWorkbench(display, workbenchAdvisor);
+ }
+
+ /** Override to provide an application specific workbench advisor */
+ protected RapWorkbenchAdvisor createRapWorkbenchAdvisor(String username) {
+ return new RapWorkbenchAdvisor(username);
+ }
+
+ @Override
+ public int createUI() {
+ JavaScriptExecutor jsExecutor = RWT.getClient().getService(
+ JavaScriptExecutor.class);
+ int returnCode = super.createUI();
+ jsExecutor.execute("location.reload()");
+ return returnCode;
+ }
+
+}
--- /dev/null
+package org.argeo.security.ui.rap;
+
+import java.security.PrivilegedAction;
+
+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.ArgeoException;
+import org.argeo.cms.CmsException;
+import org.argeo.cms.CmsImageManager;
+import org.argeo.cms.CmsView;
+import org.argeo.cms.auth.AuthConstants;
+import org.argeo.cms.auth.CurrentUser;
+import org.argeo.cms.auth.HttpRequestCallbackHandler;
+import org.argeo.cms.widgets.auth.CmsLogin;
+import org.argeo.cms.widgets.auth.CmsLoginShell;
+import org.argeo.eclipse.ui.specific.UiContext;
+import org.eclipse.rap.rwt.RWT;
+import org.eclipse.rap.rwt.application.EntryPoint;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.PlatformUI;
+
+abstract class WorkbenchLogin implements EntryPoint, CmsView {
+ // private final static Log log = LogFactory.getLog(WorkbenchLogin.class);
+ private final Subject subject = new Subject();
+ private LoginContext loginContext;
+
+ @Override
+ public int createUI() {
+ final Display display = PlatformUI.createDisplay();
+ UiContext.setData(CmsView.KEY, this);
+ try {
+ // try pre-auth
+ loginContext = new LoginContext(AuthConstants.LOGIN_CONTEXT_USER,
+ subject, new HttpRequestCallbackHandler(getRequest()));
+ loginContext.login();
+ } catch (CredentialNotFoundException e) {
+ CmsLoginShell loginShell = createCmsLoginShell();
+ loginShell.open();
+ while (!loginShell.getShell().isDisposed()) {
+ if (!display.readAndDispatch()) {
+ display.sleep();
+ }
+ }
+ } catch (LoginException e) {
+ throw new ArgeoException("Cannot log in", e);
+ }
+ //
+ // RUN THE WORKBENCH
+ //
+ Integer returnCode = null;
+ try {
+ returnCode = Subject.doAs(subject, new PrivilegedAction<Integer>() {
+ public Integer run() {
+ int result = createAndRunWorkbench(display,
+ CurrentUser.getUsername(subject));
+ return new Integer(result);
+ }
+ });
+ // explicit workbench closing
+ logout();
+ } finally {
+ display.dispose();
+ }
+ return returnCode;
+ }
+
+ protected abstract int createAndRunWorkbench(Display display,
+ String username);
+
+ protected HttpServletRequest getRequest() {
+ return RWT.getRequest();
+ }
+
+ protected CmsLoginShell createCmsLoginShell() {
+ return new CmsLoginShell(this) {
+
+ @Override
+ public void createContents(Composite parent) {
+ createLoginPage(parent, this);
+ }
+ };
+ }
+
+ /**
+ * To be overridden. CmsLogin#createCredentialsBlock() should be called at
+ * some point in order to create the credentials composite. In order to use
+ * the default layout, call CmsLogin#defaultCreateContents() but <b>not</b>
+ * CmsLogin#createContent(), since it would lead to a stack overflow.
+ */
+ protected void createLoginPage(Composite parent, CmsLogin login) {
+ login.defaultCreateContents(parent);
+ }
+
+ @Override
+ public void navigateTo(String state) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void authChange(LoginContext loginContext) {
+ this.loginContext = loginContext;
+ }
+
+ @Override
+ public void logout() {
+ if (loginContext == null)
+ throw new CmsException("Login context should not bet null");
+ try {
+ loginContext.logout();
+ } catch (LoginException e) {
+ throw new CmsException("Cannot log out", e);
+ }
+ }
+
+ @Override
+ public final Subject getSubject() {
+ return subject;
+ }
+
+ @Override
+ public void exception(Throwable e) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public CmsImageManager getImageManager() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+}
+++ /dev/null
-package org.argeo.security.ui.login;
-
-import java.security.PrivilegedAction;
-
-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.ArgeoException;
-import org.argeo.cms.CmsException;
-import org.argeo.cms.CmsImageManager;
-import org.argeo.cms.CmsView;
-import org.argeo.cms.auth.AuthConstants;
-import org.argeo.cms.auth.CurrentUser;
-import org.argeo.cms.auth.HttpRequestCallbackHandler;
-import org.argeo.cms.widgets.auth.CmsLoginShell;
-import org.argeo.eclipse.ui.specific.UiContext;
-import org.eclipse.rap.rwt.application.EntryPoint;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.ui.PlatformUI;
-
-public abstract class WorkbenchLogin implements EntryPoint, CmsView {
- // private final static Log log = LogFactory.getLog(WorkbenchLogin.class);
- private final Subject subject = new Subject();
- private LoginContext loginContext;
-
- @Override
- public int createUI() {
- final Display display = PlatformUI.createDisplay();
- UiContext.setData(CmsView.KEY, this);
- try {
- // try pre-auth
- loginContext = new LoginContext(AuthConstants.LOGIN_CONTEXT_USER,
- subject, new HttpRequestCallbackHandler(getRequest()));
- loginContext.login();
- } catch (CredentialNotFoundException e) {
- CmsLoginShell loginShell = createCmsLoginShell();
- loginShell.open();
- while (!loginShell.getShell().isDisposed()) {
- if (!display.readAndDispatch()) {
- display.sleep();
- }
- }
- } catch (LoginException e) {
- throw new ArgeoException("Cannot log in", e);
- }
- //
- // RUN THE WORKBENCH
- //
- Integer returnCode = null;
- try {
- returnCode = Subject.doAs(subject, new PrivilegedAction<Integer>() {
- public Integer run() {
- int result = createAndRunWorkbench(display,
- CurrentUser.getUsername(subject));
- return new Integer(result);
- }
- });
- // explicit workbench closing
- logout();
- } finally {
- display.dispose();
- }
- return returnCode;
- }
-
- protected abstract int createAndRunWorkbench(Display display,
- String username);
-
- protected HttpServletRequest getRequest() {
- return UiContext.getHttpRequest();
- }
-
- protected CmsLoginShell createCmsLoginShell() {
- return new CmsLoginShell(this);
- }
-
- @Override
- public void navigateTo(String state) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void authChange(LoginContext loginContext) {
- this.loginContext = loginContext;
- }
-
- @Override
- public void logout() {
- if (loginContext == null)
- throw new CmsException("Login context should not bet null");
- try {
- loginContext.logout();
- } catch (LoginException e) {
- throw new CmsException("Cannot log out", e);
- }
- }
-
- @Override
- public final Subject getSubject() {
- return subject;
- }
-
- @Override
- public void exception(Throwable e) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public CmsImageManager getImageManager() {
- // TODO Auto-generated method stub
- return null;
- }
-}