1 package org
.argeo
.cms
.ui
.util
;
3 import java
.util
.Locale
;
6 import javax
.security
.auth
.Subject
;
7 import javax
.security
.auth
.login
.LoginContext
;
8 import javax
.security
.auth
.login
.LoginException
;
9 import javax
.servlet
.http
.HttpServletRequest
;
11 import org
.apache
.commons
.logging
.Log
;
12 import org
.apache
.commons
.logging
.LogFactory
;
13 import org
.argeo
.api
.NodeConstants
;
14 import org
.argeo
.cms
.CmsException
;
15 import org
.argeo
.cms
.auth
.CurrentUser
;
16 import org
.argeo
.cms
.ui
.CmsImageManager
;
17 import org
.argeo
.cms
.ui
.CmsView
;
18 import org
.argeo
.cms
.ui
.UxContext
;
19 import org
.argeo
.cms
.ui
.widgets
.auth
.CmsLogin
;
20 import org
.argeo
.cms
.ui
.widgets
.auth
.CmsLoginShell
;
21 import org
.argeo
.eclipse
.ui
.specific
.UiContext
;
22 import org
.eclipse
.rap
.rwt
.RWT
;
23 import org
.eclipse
.rap
.rwt
.application
.EntryPoint
;
24 import org
.eclipse
.swt
.events
.SelectionListener
;
25 import org
.eclipse
.swt
.widgets
.Composite
;
26 import org
.eclipse
.swt
.widgets
.Display
;
28 public class LoginEntryPoint
implements EntryPoint
, CmsView
{
29 protected final static String HEADER_WWW_AUTHENTICATE
= "WWW-Authenticate";
30 protected final static String HEADER_AUTHORIZATION
= "Authorization";
31 private final static Log log
= LogFactory
.getLog(LoginEntryPoint
.class);
32 private LoginContext loginContext
;
33 private UxContext uxContext
= null;
37 public int createUI() {
38 uid
= UUID
.randomUUID().toString();
39 final Display display
= createDisplay();
40 // UiContext.setData(CmsView.KEY, this);
42 CmsLoginShell loginShell
= createCmsLoginShell();
43 CmsView
.registerCmsView(loginShell
.getShell(), this);
46 loginContext
= new LoginContext(NodeConstants
.LOGIN_CONTEXT_USER
, loginShell
);
48 } catch (LoginException e
) {
49 loginShell
.createUi();
52 // HttpServletRequest request = RWT.getRequest();
53 // String authorization = request.getHeader(HEADER_AUTHORIZATION);
54 // if (authorization == null ||
55 // !authorization.startsWith("Negotiate")) {
56 // HttpServletResponse response = RWT.getResponse();
57 // response.setStatus(401);
58 // response.setHeader(HEADER_WWW_AUTHENTICATE, "Negotiate");
59 // response.setDateHeader("Date", System.currentTimeMillis());
60 // response.setDateHeader("Expires", System.currentTimeMillis() +
61 // (24 * 60 * 60 * 1000));
62 // response.setHeader("Accept-Ranges", "bytes");
63 // response.setHeader("Connection", "Keep-Alive");
64 // response.setHeader("Keep-Alive", "timeout=5, max=97");
65 // // response.setContentType("text/html; charset=UTF-8");
68 while (!loginShell
.getShell().isDisposed()) {
69 if (!display
.readAndDispatch())
74 if (CurrentUser
.getUsername(getSubject()) == null)
76 uxContext
= new SimpleUxContext();
80 protected Display
createDisplay() {
84 protected int postLogin() {
88 protected HttpServletRequest
getRequest() {
89 return RWT
.getRequest();
92 protected CmsLoginShell
createCmsLoginShell() {
93 return new CmsLoginShell(this) {
96 public void createContents(Composite parent
) {
97 LoginEntryPoint
.this.createLoginPage(parent
, this);
101 protected void extendsCredentialsBlock(Composite credentialsBlock
, Locale selectedLocale
,
102 SelectionListener loginSelectionListener
) {
103 LoginEntryPoint
.this.extendsCredentialsBlock(credentialsBlock
, selectedLocale
, loginSelectionListener
);
110 * To be overridden. CmsLogin#createCredentialsBlock() should be called at some
111 * point in order to create the credentials composite. In order to use the
112 * default layout, call CmsLogin#defaultCreateContents() but <b>not</b>
113 * CmsLogin#createContent(), since it would lead to a stack overflow.
115 protected void createLoginPage(Composite parent
, CmsLogin login
) {
116 login
.defaultCreateContents(parent
);
119 protected void extendsCredentialsBlock(Composite credentialsBlock
, Locale selectedLocale
,
120 SelectionListener loginSelectionListener
) {
125 public String
getUid() {
130 public void navigateTo(String state
) {
131 // TODO Auto-generated method stub
136 public void authChange(LoginContext loginContext
) {
137 if (loginContext
== null)
138 throw new CmsException("Login context cannot be null");
139 // logout previous login context
140 if (this.loginContext
!= null)
142 this.loginContext
.logout();
143 } catch (LoginException e1
) {
144 log
.warn("Could not log out: " + e1
);
146 this.loginContext
= loginContext
;
150 public void logout() {
151 if (loginContext
== null)
152 throw new CmsException("Login context should not bet null");
154 CurrentUser
.logoutCmsSession(loginContext
.getSubject());
155 loginContext
.logout();
156 } catch (LoginException e
) {
157 throw new CmsException("Cannot log out", e
);
162 public void exception(Throwable e
) {
163 // TODO Auto-generated method stub
168 // public LoginContext getLoginContext() {
169 // return loginContext;
172 protected Subject
getSubject() {
173 return loginContext
.getSubject();
177 public boolean isAnonymous() {
178 return CurrentUser
.isAnonymous(getSubject());
182 public CmsImageManager
getImageManager() {
183 // TODO Auto-generated method stub
188 public UxContext
getUxContext() {