]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms/src/org/argeo/cms/util/LoginEntryPoint.java
Continue framework clean up.
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / util / LoginEntryPoint.java
1 package org.argeo.cms.util;
2
3 import java.util.Locale;
4
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;
10
11 import org.argeo.ArgeoException;
12 import org.argeo.cms.CmsException;
13 import org.argeo.cms.CmsImageManager;
14 import org.argeo.cms.CmsView;
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.ui.UxContext;
19 import org.argeo.cms.widgets.auth.CmsLogin;
20 import org.argeo.cms.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;
27
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;
33
34 @Override
35 public int createUI() {
36 final Display display = createDisplay();
37 UiContext.setData(CmsView.KEY, this);
38 try {
39 // try pre-auth
40 loginContext = new LoginContext(AuthConstants.LOGIN_CONTEXT_USER,
41 subject, new HttpRequestCallbackHandler(getRequest()));
42 loginContext.login();
43 } catch (CredentialNotFoundException e) {
44 CmsLoginShell loginShell = createCmsLoginShell();
45 loginShell.open();
46 while (!loginShell.getShell().isDisposed()) {
47 // try {
48 if (!display.readAndDispatch())
49 display.sleep();
50 // } catch (Exception e1) {
51 // try {
52 // Thread.sleep(3000);
53 // } catch (InterruptedException e2) {
54 // // silent
55 // }
56 // ErrorFeedback.show("Login failed", e1);
57 // return -1;
58 // }
59 }
60 } catch (LoginException e) {
61 throw new ArgeoException("Cannot log in", e);
62 }
63
64 if (CurrentUser.getUsername() == null)
65 return -1;
66 uxContext = new SimpleUxContext();
67 return postLogin();
68 }
69
70 protected Display createDisplay() {
71 return new Display();
72 }
73
74 protected int postLogin() {
75 return 0;
76 }
77
78 protected HttpServletRequest getRequest() {
79 return RWT.getRequest();
80 }
81
82 protected CmsLoginShell createCmsLoginShell() {
83 return new CmsLoginShell(this) {
84
85 @Override
86 public void createContents(Composite parent) {
87 LoginEntryPoint.this.createLoginPage(parent, this);
88 }
89
90 @Override
91 protected void extendsCredentialsBlock(Composite credentialsBlock,
92 Locale selectedLocale,
93 SelectionListener loginSelectionListener) {
94 LoginEntryPoint.this.extendsCredentialsBlock(credentialsBlock,
95 selectedLocale, loginSelectionListener);
96 }
97
98 };
99 }
100
101 /**
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.
106 */
107 protected void createLoginPage(Composite parent, CmsLogin login) {
108 login.defaultCreateContents(parent);
109 }
110
111 protected void extendsCredentialsBlock(Composite credentialsBlock,
112 Locale selectedLocale, SelectionListener loginSelectionListener) {
113
114 }
115
116 @Override
117 public void navigateTo(String state) {
118 // TODO Auto-generated method stub
119
120 }
121
122 @Override
123 public void authChange(LoginContext loginContext) {
124 this.loginContext = loginContext;
125 }
126
127 @Override
128 public void logout() {
129 if (loginContext == null)
130 throw new CmsException("Login context should not bet null");
131 try {
132 loginContext.logout();
133 } catch (LoginException e) {
134 throw new CmsException("Cannot log out", e);
135 }
136 }
137
138 @Override
139 public final Subject getSubject() {
140 return subject;
141 }
142
143 @Override
144 public void exception(Throwable e) {
145 // TODO Auto-generated method stub
146
147 }
148
149 @Override
150 public CmsImageManager getImageManager() {
151 // TODO Auto-generated method stub
152 return null;
153 }
154
155 @Override
156 public UxContext getUxContext() {
157 return uxContext;
158 }
159
160 }