]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - org.argeo.security.ui/src/org/argeo/security/ui/login/WorkbenchLogin.java
Make CMS login UI more extensible
[lgpl/argeo-commons.git] / org.argeo.security.ui / src / org / argeo / security / ui / login / WorkbenchLogin.java
index 0eee6745cbd4cf11380e55cb1061d2d1c521fec3..2baedaf7731a24210d057814e381b85079cac889 100644 (file)
@@ -15,12 +15,10 @@ 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.util.UserMenu;
+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.SWT;
 import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.PlatformUI;
 
 public abstract class WorkbenchLogin implements EntryPoint, CmsView {
@@ -33,16 +31,14 @@ public abstract class WorkbenchLogin implements EntryPoint, CmsView {
                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) {
-                       Shell shell = new Shell(display, SWT.NO_TRIM);
-                       shell.setMaximized(true);
-                       //shell.setBackground(display.getSystemColor(SWT.COLOR_CYAN));
-                       UserMenu userMenu = new UserMenu(shell, false);
-                       shell.open();
-                       while (!userMenu.getShell().isDisposed()) {
+                       CmsLoginShell loginShell = createCmsLoginShell();
+                       loginShell.open();
+                       while (!loginShell.getShell().isDisposed()) {
                                if (!display.readAndDispatch()) {
                                        display.sleep();
                                }
@@ -62,39 +58,25 @@ public abstract class WorkbenchLogin implements EntryPoint, CmsView {
                                        return new Integer(result);
                                }
                        });
+                       // explicit workbench closing
+                       logout();
                } finally {
                        display.dispose();
                }
-               // explicit workbench closing
-               logout();
                return returnCode;
        }
 
        protected abstract int createAndRunWorkbench(Display display,
                        String username);
 
-       // private void fullLogout() {
-       // String username = CurrentUser.getUsername(subject);
-       // try {
-       // LoginContext loginContext = new LoginContext(
-       // AuthConstants.LOGIN_CONTEXT_USER, subject);
-       // loginContext.logout();
-       // HttpServletRequest httpRequest = getRequest();
-       // httpRequest.setAttribute(HttpContext.AUTHORIZATION, null);
-       // HttpSession httpSession = httpRequest.getSession();
-       // httpSession.setAttribute(HttpContext.AUTHORIZATION, null);
-       // httpSession.setMaxInactiveInterval(1);
-       // log.info("Logged out " + (username != null ? username : "")
-       // + " (THREAD=" + Thread.currentThread().getId() + ")");
-       // } catch (LoginException e) {
-       // log.error("Error when logging out", e);
-       // }
-       // }
-
        protected HttpServletRequest getRequest() {
                return UiContext.getHttpRequest();
        }
 
+       protected CmsLoginShell createCmsLoginShell() {
+               return new CmsLoginShell(this);
+       }
+
        @Override
        public void navigateTo(String state) {
                // TODO Auto-generated method stub
@@ -133,5 +115,4 @@ public abstract class WorkbenchLogin implements EntryPoint, CmsView {
                // TODO Auto-generated method stub
                return null;
        }
-
 }