Remove unused package.
[lgpl/argeo-commons.git] / org.argeo.cms.ui / src / org / argeo / cms / util / LoginEntryPoint.java
index 424b8b23c68c7686837348bfe79de5fde716d5e6..b7bf9103ab7ce2f0bd9398a596e2012cbba4d936 100644 (file)
@@ -3,22 +3,21 @@ package org.argeo.cms.util;
 import java.util.Locale;
 
 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.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.CurrentUser;
-import org.argeo.cms.auth.HttpRequestCallbackHandler;
 import org.argeo.cms.ui.CmsImageManager;
 import org.argeo.cms.ui.CmsView;
 import org.argeo.cms.ui.UxContext;
 import org.argeo.cms.widgets.auth.CmsLogin;
 import org.argeo.cms.widgets.auth.CmsLoginShell;
 import org.argeo.eclipse.ui.specific.UiContext;
-import org.argeo.node.NodeAuthenticated;
+import org.argeo.node.NodeConstants;
 import org.eclipse.rap.rwt.RWT;
 import org.eclipse.rap.rwt.application.EntryPoint;
 import org.eclipse.swt.events.SelectionListener;
@@ -26,42 +25,48 @@ import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Display;
 
 public class LoginEntryPoint implements EntryPoint, CmsView {
-       // private final static Log log = LogFactory.getLog(WorkbenchLogin.class);
-       private final Subject subject = new Subject();
+       protected final static String HEADER_WWW_AUTHENTICATE = "WWW-Authenticate";
+       protected final static String HEADER_AUTHORIZATION = "Authorization";
+       private final static Log log = LogFactory.getLog(LoginEntryPoint.class);
        private LoginContext loginContext;
        private UxContext uxContext = null;
 
        @Override
        public int createUI() {
                final Display display = createDisplay();
-               UiContext.setData(NodeAuthenticated.KEY, this);
+               UiContext.setData(CmsView.KEY, this);
+               CmsLoginShell loginShell = createCmsLoginShell();
                try {
                        // try pre-auth
-                       loginContext = new LoginContext(AuthConstants.LOGIN_CONTEXT_USER,
-                                       subject, new HttpRequestCallbackHandler(getRequest()));
+                       loginContext = new LoginContext(NodeConstants.LOGIN_CONTEXT_USER, loginShell);
                        loginContext.login();
-               } catch (CredentialNotFoundException e) {
-                       CmsLoginShell loginShell = createCmsLoginShell();
+               } catch (LoginException e) {
+                       loginShell.createUi();
                        loginShell.open();
+
+                       // HttpServletRequest request = RWT.getRequest();
+                       // String authorization = request.getHeader(HEADER_AUTHORIZATION);
+                       // if (authorization == null ||
+                       // !authorization.startsWith("Negotiate")) {
+                       // HttpServletResponse response = RWT.getResponse();
+                       // response.setStatus(401);
+                       // response.setHeader(HEADER_WWW_AUTHENTICATE, "Negotiate");
+                       // response.setDateHeader("Date", System.currentTimeMillis());
+                       // response.setDateHeader("Expires", System.currentTimeMillis() +
+                       // (24 * 60 * 60 * 1000));
+                       // response.setHeader("Accept-Ranges", "bytes");
+                       // response.setHeader("Connection", "Keep-Alive");
+                       // response.setHeader("Keep-Alive", "timeout=5, max=97");
+                       // // response.setContentType("text/html; charset=UTF-8");
+                       // }
+
                        while (!loginShell.getShell().isDisposed()) {
-                               // try {
                                if (!display.readAndDispatch())
                                        display.sleep();
-                               // } catch (Exception e1) {
-                               // try {
-                               // Thread.sleep(3000);
-                               // } catch (InterruptedException e2) {
-                               // // silent
-                               // }
-                               // ErrorFeedback.show("Login failed", e1);
-                               // return -1;
-                               // }
                        }
-               } catch (LoginException e) {
-                       throw new CmsException("Cannot log in", e);
                }
 
-               if (CurrentUser.getUsername() == null)
+               if (CurrentUser.getUsername(getSubject()) == null)
                        return -1;
                uxContext = new SimpleUxContext();
                return postLogin();
@@ -88,11 +93,9 @@ public class LoginEntryPoint implements EntryPoint, CmsView {
                        }
 
                        @Override
-                       protected void extendsCredentialsBlock(Composite credentialsBlock,
-                                       Locale selectedLocale,
+                       protected void extendsCredentialsBlock(Composite credentialsBlock, Locale selectedLocale,
                                        SelectionListener loginSelectionListener) {
-                               LoginEntryPoint.this.extendsCredentialsBlock(credentialsBlock,
-                                               selectedLocale, loginSelectionListener);
+                               LoginEntryPoint.this.extendsCredentialsBlock(credentialsBlock, selectedLocale, loginSelectionListener);
                        }
 
                };
@@ -108,8 +111,8 @@ public class LoginEntryPoint implements EntryPoint, CmsView {
                login.defaultCreateContents(parent);
        }
 
-       protected void extendsCredentialsBlock(Composite credentialsBlock,
-                       Locale selectedLocale, SelectionListener loginSelectionListener) {
+       protected void extendsCredentialsBlock(Composite credentialsBlock, Locale selectedLocale,
+                       SelectionListener loginSelectionListener) {
 
        }
 
@@ -121,6 +124,15 @@ public class LoginEntryPoint implements EntryPoint, CmsView {
 
        @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) {
+                               log.warn("Could not log out: " + e1);
+                       }
                this.loginContext = loginContext;
        }
 
@@ -129,23 +141,33 @@ public class LoginEntryPoint implements EntryPoint, CmsView {
                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 final Subject getSubject() {
-               return subject;
-       }
-
        @Override
        public void exception(Throwable e) {
                // TODO Auto-generated method stub
 
        }
 
+       // @Override
+       // public LoginContext getLoginContext() {
+       // return loginContext;
+       // }
+
+       protected Subject getSubject() {
+               return loginContext.getSubject();
+       }
+
+       @Override
+       public boolean isAnonymous() {
+               return CurrentUser.isAnonymous(getSubject());
+       }
+
        @Override
        public CmsImageManager getImageManager() {
                // TODO Auto-generated method stub
@@ -156,5 +178,4 @@ public class LoginEntryPoint implements EntryPoint, CmsView {
        public UxContext getUxContext() {
                return uxContext;
        }
-
-}
+}
\ No newline at end of file