1 package org
.argeo
.cms
.ui
.workbench
.rap
;
3 import java
.security
.PrivilegedAction
;
4 import java
.util
.Locale
;
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
;
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
;
24 public class SpnegoWorkbenchLogin
extends LoginEntryPoint
{
25 // private final static Log log =
26 // LogFactory.getLog(RapWorkbenchLogin.class);
28 /** Override to provide an application specific workbench advisor */
29 protected RapWorkbenchAdvisor
createRapWorkbenchAdvisor(String username
) {
30 return new RapWorkbenchAdvisor(username
);
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");
50 returnCode
= super.createUI();
55 protected int postLogin() {
56 Subject subject
= getLoginContext().getSubject();
57 final Display display
= Display
.getCurrent();
58 if (subject
.getPrincipals(X500Principal
.class).isEmpty()) {
59 RWT
.getClient().getService(JavaScriptExecutor
.class).execute("location.reload()");
64 Integer returnCode
= null;
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
);
72 // explicit workbench closing
80 protected int createAndRunWorkbench(Display display
, String username
) {
81 RapWorkbenchAdvisor workbenchAdvisor
= createRapWorkbenchAdvisor(username
);
82 return PlatformUI
.createAndRunWorkbench(display
, workbenchAdvisor
);
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
);
95 protected Display
createDisplay() {
96 return PlatformUI
.createDisplay();