]> git.argeo.org Git - lgpl/argeo-commons.git/blob - CmsLoginLifecycle.java
8b437a0e7988889b0cc77ac381c81e2989bc0d9b
[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) {// , IEclipseContext eclipseContext) {
27 // RepositoryFactory repositoryFactory =
28 // eclipseContext.get(RepositoryFactory.class);
29 // Map<String, String> params = new HashMap<>();
30 // params.put("cn", "home");
31 // Repository homeRepository;
32 // try {
33 // homeRepository = repositoryFactory.getRepository(params);
34 // } catch (RepositoryException e1) {
35 // throw new CmsException("Cannot get home repository", e1);
36 // }
37 // eclipseContext.set("(cn=home)", homeRepository);
38
39 Subject subject = Subject.getSubject(AccessController.getContext());
40 Display display = Display.getCurrent();
41 CmsLoginShell loginShell = new CmsLoginShell(this);
42 loginShell.setSubject(subject);
43 try {
44 // try pre-auth
45 loginContext = new LoginContext(NodeConstants.LOGIN_CONTEXT_USER, subject, loginShell);
46 loginContext.login();
47 } catch (LoginException e) {
48 loginShell.createUi();
49 loginShell.open();
50
51 while (!loginShell.getShell().isDisposed()) {
52 if (!display.readAndDispatch())
53 display.sleep();
54 }
55 }
56 if (CurrentUser.getUsername(getSubject()) == null)
57 return false;
58 uxContext = new SimpleUxContext();
59 return true;
60 }
61
62 @Override
63 public UxContext getUxContext() {
64 return uxContext;
65 }
66
67 @Override
68 public void navigateTo(String state) {
69 // TODO Auto-generated method stub
70
71 }
72
73 @Override
74 public void authChange(LoginContext loginContext) {
75 if (loginContext == null)
76 throw new CmsException("Login context cannot be null");
77 // logout previous login context
78 // if (this.loginContext != null)
79 // try {
80 // this.loginContext.logout();
81 // } catch (LoginException e1) {
82 // System.err.println("Could not log out: " + e1);
83 // }
84 this.loginContext = loginContext;
85 }
86
87 @Override
88 public void logout() {
89 if (loginContext == null)
90 throw new CmsException("Login context should not bet null");
91 try {
92 CurrentUser.logoutCmsSession(loginContext.getSubject());
93 loginContext.logout();
94 } catch (LoginException e) {
95 throw new CmsException("Cannot log out", e);
96 }
97 }
98
99 @Override
100 public void exception(Throwable e) {
101 // TODO Auto-generated method stub
102
103 }
104
105 @Override
106 public CmsImageManager getImageManager() {
107 // TODO Auto-generated method stub
108 return null;
109 }
110
111 protected Subject getSubject() {
112 return loginContext.getSubject();
113 }
114
115 @Override
116 public boolean isAnonymous() {
117 return CurrentUser.isAnonymous(getSubject());
118 }
119
120 }