]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.security.ui/src/org/argeo/security/ui/login/WorkbenchLogin.java
Simplify authentication
[lgpl/argeo-commons.git] / org.argeo.security.ui / src / org / argeo / security / ui / login / WorkbenchLogin.java
1 package org.argeo.security.ui.login;
2
3 import java.security.PrivilegedAction;
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.util.UserMenu;
19 import org.argeo.eclipse.ui.specific.UiContext;
20 import org.eclipse.rap.rwt.application.EntryPoint;
21 import org.eclipse.swt.SWT;
22 import org.eclipse.swt.widgets.Display;
23 import org.eclipse.swt.widgets.Shell;
24 import org.eclipse.ui.PlatformUI;
25
26 public abstract class WorkbenchLogin implements EntryPoint, CmsView {
27 // private final static Log log = LogFactory.getLog(WorkbenchLogin.class);
28 private final Subject subject = new Subject();
29 private LoginContext loginContext;
30
31 @Override
32 public int createUI() {
33 final Display display = PlatformUI.createDisplay();
34 UiContext.setData(CmsView.KEY, this);
35 try {
36 loginContext = new LoginContext(AuthConstants.LOGIN_CONTEXT_USER,
37 subject, new HttpRequestCallbackHandler(getRequest()));
38 loginContext.login();
39 } catch (CredentialNotFoundException e) {
40 Shell shell = new Shell(display, SWT.NO_TRIM);
41 shell.setMaximized(true);
42 //shell.setBackground(display.getSystemColor(SWT.COLOR_CYAN));
43 UserMenu userMenu = new UserMenu(shell, false);
44 shell.open();
45 while (!userMenu.getShell().isDisposed()) {
46 if (!display.readAndDispatch()) {
47 display.sleep();
48 }
49 }
50 } catch (LoginException e) {
51 throw new ArgeoException("Cannot log in", e);
52 }
53 //
54 // RUN THE WORKBENCH
55 //
56 Integer returnCode = null;
57 try {
58 returnCode = Subject.doAs(subject, new PrivilegedAction<Integer>() {
59 public Integer run() {
60 int result = createAndRunWorkbench(display,
61 CurrentUser.getUsername(subject));
62 return new Integer(result);
63 }
64 });
65 } finally {
66 display.dispose();
67 }
68 // explicit workbench closing
69 logout();
70 return returnCode;
71 }
72
73 protected abstract int createAndRunWorkbench(Display display,
74 String username);
75
76 // private void fullLogout() {
77 // String username = CurrentUser.getUsername(subject);
78 // try {
79 // LoginContext loginContext = new LoginContext(
80 // AuthConstants.LOGIN_CONTEXT_USER, subject);
81 // loginContext.logout();
82 // HttpServletRequest httpRequest = getRequest();
83 // httpRequest.setAttribute(HttpContext.AUTHORIZATION, null);
84 // HttpSession httpSession = httpRequest.getSession();
85 // httpSession.setAttribute(HttpContext.AUTHORIZATION, null);
86 // httpSession.setMaxInactiveInterval(1);
87 // log.info("Logged out " + (username != null ? username : "")
88 // + " (THREAD=" + Thread.currentThread().getId() + ")");
89 // } catch (LoginException e) {
90 // log.error("Error when logging out", e);
91 // }
92 // }
93
94 protected HttpServletRequest getRequest() {
95 return UiContext.getHttpRequest();
96 }
97
98 @Override
99 public void navigateTo(String state) {
100 // TODO Auto-generated method stub
101
102 }
103
104 @Override
105 public void authChange(LoginContext loginContext) {
106 this.loginContext = loginContext;
107 }
108
109 @Override
110 public void logout() {
111 if (loginContext == null)
112 throw new CmsException("Login context should not bet null");
113 try {
114 loginContext.logout();
115 } catch (LoginException e) {
116 throw new CmsException("Cannot log out", e);
117 }
118 }
119
120 @Override
121 public final Subject getSubject() {
122 return subject;
123 }
124
125 @Override
126 public void exception(Throwable e) {
127 // TODO Auto-generated method stub
128
129 }
130
131 @Override
132 public CmsImageManager getImageManager() {
133 // TODO Auto-generated method stub
134 return null;
135 }
136
137 }