]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms.ui/src/org/argeo/cms/util/LoginEntryPoint.java
[maven-release-plugin] prepare release argeo-commons-2.1.54
[lgpl/argeo-commons.git] / org.argeo.cms.ui / 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.login.LoginContext;
6 import javax.security.auth.login.LoginException;
7 import javax.servlet.http.HttpServletRequest;
8
9 import org.argeo.cms.CmsException;
10 import org.argeo.cms.auth.CurrentUser;
11 import org.argeo.cms.ui.CmsImageManager;
12 import org.argeo.cms.ui.CmsView;
13 import org.argeo.cms.ui.UxContext;
14 import org.argeo.cms.widgets.auth.CmsLogin;
15 import org.argeo.cms.widgets.auth.CmsLoginShell;
16 import org.argeo.eclipse.ui.specific.UiContext;
17 import org.argeo.node.NodeConstants;
18 import org.argeo.node.security.NodeAuthenticated;
19 import org.eclipse.rap.rwt.RWT;
20 import org.eclipse.rap.rwt.application.EntryPoint;
21 import org.eclipse.swt.events.SelectionListener;
22 import org.eclipse.swt.widgets.Composite;
23 import org.eclipse.swt.widgets.Display;
24
25 public class LoginEntryPoint implements EntryPoint, CmsView {
26 // private final static Log log = LogFactory.getLog(WorkbenchLogin.class);
27 // private final Subject subject = new Subject();
28 private LoginContext loginContext;
29 private UxContext uxContext = null;
30
31 @Override
32 public int createUI() {
33 final Display display = createDisplay();
34 UiContext.setData(NodeAuthenticated.KEY, this);
35 CmsLoginShell loginShell = createCmsLoginShell();
36 try {
37 // try pre-auth
38 loginContext = new LoginContext(NodeConstants.LOGIN_CONTEXT_USER, loginShell);
39 loginContext.login();
40 } catch (LoginException e) {
41 loginShell.createUi();
42 loginShell.open();
43 while (!loginShell.getShell().isDisposed()) {
44 if (!display.readAndDispatch())
45 display.sleep();
46 }
47 }
48
49 if (CurrentUser.getUsername() == null)
50 return -1;
51 uxContext = new SimpleUxContext();
52 return postLogin();
53 }
54
55 protected Display createDisplay() {
56 return new Display();
57 }
58
59 protected int postLogin() {
60 return 0;
61 }
62
63 protected HttpServletRequest getRequest() {
64 return RWT.getRequest();
65 }
66
67 protected CmsLoginShell createCmsLoginShell() {
68 return new CmsLoginShell(this) {
69
70 @Override
71 public void createContents(Composite parent) {
72 LoginEntryPoint.this.createLoginPage(parent, this);
73 }
74
75 @Override
76 protected void extendsCredentialsBlock(Composite credentialsBlock, Locale selectedLocale,
77 SelectionListener loginSelectionListener) {
78 LoginEntryPoint.this.extendsCredentialsBlock(credentialsBlock, selectedLocale, loginSelectionListener);
79 }
80
81 };
82 }
83
84 /**
85 * To be overridden. CmsLogin#createCredentialsBlock() should be called at
86 * some point in order to create the credentials composite. In order to use
87 * the default layout, call CmsLogin#defaultCreateContents() but <b>not</b>
88 * CmsLogin#createContent(), since it would lead to a stack overflow.
89 */
90 protected void createLoginPage(Composite parent, CmsLogin login) {
91 login.defaultCreateContents(parent);
92 }
93
94 protected void extendsCredentialsBlock(Composite credentialsBlock, Locale selectedLocale,
95 SelectionListener loginSelectionListener) {
96
97 }
98
99 @Override
100 public void navigateTo(String state) {
101 // TODO Auto-generated method stub
102
103 }
104
105 @Override
106 public void authChange(LoginContext loginContext) {
107 this.loginContext = loginContext;
108 }
109
110 @Override
111 public void logout() {
112 if (loginContext == null)
113 throw new CmsException("Login context should not bet null");
114 try {
115 loginContext.logout();
116 } catch (LoginException e) {
117 throw new CmsException("Cannot log out", e);
118 }
119 }
120
121 @Override
122 public void exception(Throwable e) {
123 // TODO Auto-generated method stub
124
125 }
126
127 @Override
128 public LoginContext getLoginContext() {
129 return loginContext;
130 }
131
132 @Override
133 public CmsImageManager getImageManager() {
134 // TODO Auto-generated method stub
135 return null;
136 }
137
138 @Override
139 public UxContext getUxContext() {
140 return uxContext;
141 }
142 }