]> git.argeo.org Git - lgpl/argeo-commons.git/blob - security/plugins/org.argeo.security.ui.rap/src/main/java/org/argeo/security/ui/rap/SecureEntryPoint.java
Remove old interfaces
[lgpl/argeo-commons.git] / security / plugins / org.argeo.security.ui.rap / src / main / java / org / argeo / security / ui / rap / SecureEntryPoint.java
1 package org.argeo.security.ui.rap;
2
3 import java.security.PrivilegedAction;
4
5 import javax.security.auth.Subject;
6 import javax.security.auth.login.LoginException;
7
8 import org.apache.commons.logging.Log;
9 import org.apache.commons.logging.LogFactory;
10 import org.argeo.eclipse.ui.dialogs.Error;
11 import org.eclipse.rwt.lifecycle.IEntryPoint;
12 import org.eclipse.rwt.service.SessionStoreEvent;
13 import org.eclipse.rwt.service.SessionStoreListener;
14 import org.eclipse.swt.widgets.Display;
15 import org.eclipse.ui.PlatformUI;
16 import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
17 import org.eclipse.ui.application.WorkbenchAdvisor;
18 import org.eclipse.ui.application.WorkbenchWindowAdvisor;
19
20 public class SecureEntryPoint implements IEntryPoint, SessionStoreListener {
21 private Log log = LogFactory.getLog(SecureEntryPoint.class);
22
23 @Override
24 public int createUI() {
25 // log.debug("THREAD=" + Thread.currentThread().getId()
26 // + ", RWT.getSessionStore().getId()="
27 // + RWT.getSessionStore().getId());
28
29 Integer returnCode = null;
30 Display display = PlatformUI.createDisplay();
31 try {
32 Subject subject = null;
33 Boolean retry = true;
34 while (retry) {
35 try {
36 // force login in order to give Spring Security a chance to
37 // load
38 SecureRapActivator.getLoginContext().login();
39 subject = SecureRapActivator.getLoginContext().getSubject();
40 retry = false;
41 } catch (LoginException e) {
42 Error.show("Cannot login", e);
43 retry = true;
44 } catch (Exception e) {
45 Error.show("Unexpected exception while trying to login", e);
46 retry = false;
47 }
48 }
49
50 if (subject != null) {
51 returnCode = (Integer) Subject.doAs(subject,
52 getRunAction(display));
53 SecureRapActivator.getLoginContext().logout();
54 return processReturnCode(returnCode);
55 } else {
56 return -1;
57 }
58 } catch (Exception e) {
59 log.error("Unexpected error",e);
60 return -1;
61 }
62 // finally {
63 // display.dispose();
64 // }
65 }
66
67 @SuppressWarnings("rawtypes")
68 private PrivilegedAction getRunAction(final Display display) {
69 return new PrivilegedAction() {
70 public Object run() {
71 int result = createAndRunWorkbench(display);
72 return new Integer(result);
73 }
74 };
75 }
76
77 protected Integer createAndRunWorkbench(Display display) {
78 return PlatformUI.createAndRunWorkbench(display,
79 createWorkbenchAdvisor());
80 }
81
82 protected Integer processReturnCode(Integer returnCode) {
83 return returnCode;
84 }
85
86 protected WorkbenchAdvisor createWorkbenchAdvisor() {
87 return new SecureWorkbenchAdvisor() {
88 public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor(
89 IWorkbenchWindowConfigurer configurer) {
90 return new RapSecureWorkbenchWindowAdvisor(configurer);
91 }
92
93 };
94 }
95
96 @Override
97 public void beforeDestroy(SessionStoreEvent event) {
98 if (log.isDebugEnabled())
99 log.debug("RWT session " + event.getSessionStore().getId()
100 + " about to be destroyed. THREAD="
101 + Thread.currentThread().getId());
102
103 }
104
105 }