Move Eclipse 3 components to legacy.
[lgpl/argeo-commons.git] / legacy / org.argeo.cms.ui.workbench.rap / src / org / argeo / cms / ui / workbench / rap / SpnegoWorkbenchLogin.java
diff --git a/legacy/org.argeo.cms.ui.workbench.rap/src/org/argeo/cms/ui/workbench/rap/SpnegoWorkbenchLogin.java b/legacy/org.argeo.cms.ui.workbench.rap/src/org/argeo/cms/ui/workbench/rap/SpnegoWorkbenchLogin.java
new file mode 100644 (file)
index 0000000..412fecf
--- /dev/null
@@ -0,0 +1,99 @@
+package org.argeo.cms.ui.workbench.rap;
+
+import java.security.PrivilegedAction;
+import java.util.Locale;
+
+import javax.security.auth.Subject;
+import javax.security.auth.x500.X500Principal;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.argeo.cms.CmsMsg;
+import org.argeo.cms.auth.CurrentUser;
+import org.argeo.cms.util.CmsUtils;
+import org.argeo.cms.util.LoginEntryPoint;
+import org.eclipse.rap.rwt.RWT;
+import org.eclipse.rap.rwt.client.service.JavaScriptExecutor;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.PlatformUI;
+
+public class SpnegoWorkbenchLogin extends LoginEntryPoint {
+       // private final static Log log =
+       // LogFactory.getLog(RapWorkbenchLogin.class);
+
+       /** Override to provide an application specific workbench advisor */
+       protected RapWorkbenchAdvisor createRapWorkbenchAdvisor(String username) {
+               return new RapWorkbenchAdvisor(username);
+       }
+
+       @Override
+       public int createUI() {
+               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");
+               }
+
+               int returnCode;
+               returnCode = super.createUI();
+               return returnCode;
+       }
+
+       @Override
+       protected int postLogin() {
+               Subject subject = getSubject();
+               final Display display = Display.getCurrent();
+               if (subject.getPrincipals(X500Principal.class).isEmpty()) {
+                       RWT.getClient().getService(JavaScriptExecutor.class).execute("location.reload()");
+               }
+               //
+               // 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 int createAndRunWorkbench(Display display, String username) {
+               RapWorkbenchAdvisor workbenchAdvisor = createRapWorkbenchAdvisor(username);
+               return PlatformUI.createAndRunWorkbench(display, workbenchAdvisor);
+       }
+
+       @Override
+       protected void extendsCredentialsBlock(Composite credentialsBlock, Locale selectedLocale,
+                       SelectionListener loginSelectionListener) {
+//             Button loginButton = new Button(credentialsBlock, SWT.PUSH);
+//             loginButton.setText(CmsMsg.login.lead(selectedLocale));
+//             loginButton.setLayoutData(CmsUtils.fillWidth());
+//             loginButton.addSelectionListener(loginSelectionListener);
+       }
+
+       @Override
+       protected Display createDisplay() {
+               return PlatformUI.createDisplay();
+       }
+
+}