]> git.argeo.org Git - lgpl/argeo-commons.git/blob - legacy/org.argeo.cms.ui.workbench.rap/src/org/argeo/cms/ui/workbench/rap/SpnegoWorkbenchLogin.java
Remove reference to 'argeo' user.
[lgpl/argeo-commons.git] / legacy / org.argeo.cms.ui.workbench.rap / src / org / argeo / cms / ui / workbench / rap / SpnegoWorkbenchLogin.java
1 package org.argeo.cms.ui.workbench.rap;
2
3 import java.security.PrivilegedAction;
4 import java.util.Locale;
5
6 import javax.security.auth.Subject;
7 import javax.security.auth.x500.X500Principal;
8 import javax.servlet.http.HttpServletRequest;
9 import javax.servlet.http.HttpServletResponse;
10
11 import org.argeo.cms.CmsMsg;
12 import org.argeo.cms.auth.CurrentUser;
13 import org.argeo.cms.util.CmsUtils;
14 import org.argeo.cms.util.LoginEntryPoint;
15 import org.eclipse.rap.rwt.RWT;
16 import org.eclipse.rap.rwt.client.service.JavaScriptExecutor;
17 import org.eclipse.swt.SWT;
18 import org.eclipse.swt.events.SelectionListener;
19 import org.eclipse.swt.widgets.Button;
20 import org.eclipse.swt.widgets.Composite;
21 import org.eclipse.swt.widgets.Display;
22 import org.eclipse.ui.PlatformUI;
23
24 public class SpnegoWorkbenchLogin extends LoginEntryPoint {
25 // private final static Log log =
26 // LogFactory.getLog(RapWorkbenchLogin.class);
27
28 /** Override to provide an application specific workbench advisor */
29 protected RapWorkbenchAdvisor createRapWorkbenchAdvisor(String username) {
30 return new RapWorkbenchAdvisor(username);
31 }
32
33 @Override
34 public int createUI() {
35 HttpServletRequest request = RWT.getRequest();
36 String authorization = request.getHeader(HEADER_AUTHORIZATION);
37 if (authorization == null || !authorization.startsWith("Negotiate")) {
38 HttpServletResponse response = RWT.getResponse();
39 response.setStatus(401);
40 response.setHeader(HEADER_WWW_AUTHENTICATE, "Negotiate");
41 response.setDateHeader("Date", System.currentTimeMillis());
42 response.setDateHeader("Expires", System.currentTimeMillis() + (24 * 60 * 60 * 1000));
43 response.setHeader("Accept-Ranges", "bytes");
44 response.setHeader("Connection", "Keep-Alive");
45 response.setHeader("Keep-Alive", "timeout=5, max=97");
46 // response.setContentType("text/html; charset=UTF-8");
47 }
48
49 int returnCode;
50 returnCode = super.createUI();
51 return returnCode;
52 }
53
54 @Override
55 protected int postLogin() {
56 Subject subject = getSubject();
57 final Display display = Display.getCurrent();
58 if (subject.getPrincipals(X500Principal.class).isEmpty()) {
59 RWT.getClient().getService(JavaScriptExecutor.class).execute("location.reload()");
60 }
61 //
62 // RUN THE WORKBENCH
63 //
64 Integer returnCode = null;
65 try {
66 returnCode = Subject.doAs(subject, new PrivilegedAction<Integer>() {
67 public Integer run() {
68 int result = createAndRunWorkbench(display, CurrentUser.getUsername(subject));
69 return new Integer(result);
70 }
71 });
72 // explicit workbench closing
73 logout();
74 } finally {
75 display.dispose();
76 }
77 return returnCode;
78 }
79
80 protected int createAndRunWorkbench(Display display, String username) {
81 RapWorkbenchAdvisor workbenchAdvisor = createRapWorkbenchAdvisor(username);
82 return PlatformUI.createAndRunWorkbench(display, workbenchAdvisor);
83 }
84
85 @Override
86 protected void extendsCredentialsBlock(Composite credentialsBlock, Locale selectedLocale,
87 SelectionListener loginSelectionListener) {
88 // Button loginButton = new Button(credentialsBlock, SWT.PUSH);
89 // loginButton.setText(CmsMsg.login.lead(selectedLocale));
90 // loginButton.setLayoutData(CmsUtils.fillWidth());
91 // loginButton.addSelectionListener(loginSelectionListener);
92 }
93
94 @Override
95 protected Display createDisplay() {
96 return PlatformUI.createDisplay();
97 }
98
99 }