]> git.argeo.org Git - lgpl/argeo-commons.git/blob - CmsLoginLifecycle.java
6872906260209d51588a0c4833e721ccb2795aa1
[lgpl/argeo-commons.git] / CmsLoginLifecycle.java
1 package org.argeo.cms.e4.rap;
2
3 import java.security.AccessController;
4
5 import javax.security.auth.Subject;
6 import javax.security.auth.login.LoginContext;
7 import javax.security.auth.login.LoginException;
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.util.SimpleUxContext;
15 import org.argeo.cms.widgets.auth.CmsLoginShell;
16 import org.argeo.node.NodeConstants;
17 import org.eclipse.e4.ui.workbench.lifecycle.PostContextCreate;
18 import org.eclipse.swt.widgets.Display;
19
20 @SuppressWarnings("restriction")
21 public class CmsLoginLifecycle implements CmsView {
22 private UxContext uxContext;
23 private LoginContext loginContext;
24
25 @PostContextCreate
26 boolean login(Display d) {
27 Subject subject = Subject.getSubject(AccessController.getContext());
28 Display display = Display.getCurrent();
29 CmsLoginShell loginShell = new CmsLoginShell(this);
30 loginShell.setSubject(subject);
31 try {
32 // try pre-auth
33 loginContext = new LoginContext(NodeConstants.LOGIN_CONTEXT_USER, subject, loginShell);
34 loginContext.login();
35 } catch (LoginException e) {
36 loginShell.createUi();
37 loginShell.open();
38
39 while (!loginShell.getShell().isDisposed()) {
40 if (!display.readAndDispatch())
41 display.sleep();
42 }
43 }
44 if (CurrentUser.getUsername(getSubject()) == null)
45 return false;
46 uxContext = new SimpleUxContext();
47 return true;
48 }
49
50 @Override
51 public UxContext getUxContext() {
52 return uxContext;
53 }
54
55 @Override
56 public void navigateTo(String state) {
57 // TODO Auto-generated method stub
58
59 }
60
61 @Override
62 public void authChange(LoginContext loginContext) {
63 if (loginContext == null)
64 throw new CmsException("Login context cannot be null");
65 // logout previous login context
66 // if (this.loginContext != null)
67 // try {
68 // this.loginContext.logout();
69 // } catch (LoginException e1) {
70 // System.err.println("Could not log out: " + e1);
71 // }
72 this.loginContext = loginContext;
73 }
74
75 @Override
76 public void logout() {
77 if (loginContext == null)
78 throw new CmsException("Login context should not bet null");
79 try {
80 CurrentUser.logoutCmsSession(loginContext.getSubject());
81 loginContext.logout();
82 } catch (LoginException e) {
83 throw new CmsException("Cannot log out", e);
84 }
85 }
86
87 @Override
88 public void exception(Throwable e) {
89 // TODO Auto-generated method stub
90
91 }
92
93 @Override
94 public CmsImageManager getImageManager() {
95 // TODO Auto-generated method stub
96 return null;
97 }
98
99 protected Subject getSubject() {
100 return loginContext.getSubject();
101 }
102
103 @Override
104 public boolean isAnonymous() {
105 return CurrentUser.isAnonymous(getSubject());
106 }
107
108 }