1 package org
.argeo
.cms
.util
;
3 import java
.util
.Locale
;
5 import javax
.security
.auth
.Subject
;
6 import javax
.security
.auth
.login
.CredentialNotFoundException
;
7 import javax
.security
.auth
.login
.LoginContext
;
8 import javax
.security
.auth
.login
.LoginException
;
9 import javax
.servlet
.http
.HttpServletRequest
;
11 import org
.argeo
.cms
.CmsException
;
12 import org
.argeo
.cms
.CmsImageManager
;
13 import org
.argeo
.cms
.CmsView
;
14 import org
.argeo
.cms
.UxContext
;
15 import org
.argeo
.cms
.auth
.AuthConstants
;
16 import org
.argeo
.cms
.auth
.CurrentUser
;
17 import org
.argeo
.cms
.auth
.HttpRequestCallbackHandler
;
18 import org
.argeo
.cms
.widgets
.auth
.CmsLogin
;
19 import org
.argeo
.cms
.widgets
.auth
.CmsLoginShell
;
20 import org
.argeo
.eclipse
.ui
.specific
.UiContext
;
21 import org
.argeo
.node
.NodeAuthenticated
;
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 // private final static Log log = LogFactory.getLog(WorkbenchLogin.class);
30 private final Subject subject
= new Subject();
31 private LoginContext loginContext
;
32 private UxContext uxContext
= null;
35 public int createUI() {
36 final Display display
= createDisplay();
37 UiContext
.setData(NodeAuthenticated
.KEY
, this);
40 loginContext
= new LoginContext(AuthConstants
.LOGIN_CONTEXT_USER
,
41 subject
, new HttpRequestCallbackHandler(getRequest()));
43 } catch (CredentialNotFoundException e
) {
44 CmsLoginShell loginShell
= createCmsLoginShell();
46 while (!loginShell
.getShell().isDisposed()) {
48 if (!display
.readAndDispatch())
50 // } catch (Exception e1) {
52 // Thread.sleep(3000);
53 // } catch (InterruptedException e2) {
56 // ErrorFeedback.show("Login failed", e1);
60 } catch (LoginException e
) {
61 throw new CmsException("Cannot log in", e
);
64 if (CurrentUser
.getUsername() == null)
66 uxContext
= new SimpleUxContext();
70 protected Display
createDisplay() {
74 protected int postLogin() {
78 protected HttpServletRequest
getRequest() {
79 return RWT
.getRequest();
82 protected CmsLoginShell
createCmsLoginShell() {
83 return new CmsLoginShell(this) {
86 public void createContents(Composite parent
) {
87 LoginEntryPoint
.this.createLoginPage(parent
, this);
91 protected void extendsCredentialsBlock(Composite credentialsBlock
,
92 Locale selectedLocale
,
93 SelectionListener loginSelectionListener
) {
94 LoginEntryPoint
.this.extendsCredentialsBlock(credentialsBlock
,
95 selectedLocale
, loginSelectionListener
);
102 * To be overridden. CmsLogin#createCredentialsBlock() should be called at
103 * some point in order to create the credentials composite. In order to use
104 * the default layout, call CmsLogin#defaultCreateContents() but <b>not</b>
105 * CmsLogin#createContent(), since it would lead to a stack overflow.
107 protected void createLoginPage(Composite parent
, CmsLogin login
) {
108 login
.defaultCreateContents(parent
);
111 protected void extendsCredentialsBlock(Composite credentialsBlock
,
112 Locale selectedLocale
, SelectionListener loginSelectionListener
) {
117 public void navigateTo(String state
) {
118 // TODO Auto-generated method stub
123 public void authChange(LoginContext loginContext
) {
124 this.loginContext
= loginContext
;
128 public void logout() {
129 if (loginContext
== null)
130 throw new CmsException("Login context should not bet null");
132 loginContext
.logout();
133 } catch (LoginException e
) {
134 throw new CmsException("Cannot log out", e
);
139 public final Subject
getSubject() {
144 public void exception(Throwable e
) {
145 // TODO Auto-generated method stub
150 public CmsImageManager
getImageManager() {
151 // TODO Auto-generated method stub
156 public UxContext
getUxContext() {