+ boolean login(Subject subject) {
+ // Subject subject = Subject.getSubject(AccessController.getContext());
+ Display display = new Display();
+ CmsView cmsView = new E4CmsView(subject);
+ CmsLoginShell loginShell = new CmsLoginShell(cmsView);
+ loginShell.setSubject(subject);
+ try {
+ // try pre-auth
+ LoginContext loginContext = new LoginContext(NodeConstants.LOGIN_CONTEXT_USER, subject, loginShell);
+ loginContext.login();
+ } catch (LoginException e) {
+ loginShell.createUi();
+ loginShell.open();
+
+ while (!loginShell.getShell().isDisposed()) {
+ if (!display.readAndDispatch())
+ display.sleep();
+ }
+ } finally {
+ display.dispose();
+ }
+ if (CurrentUser.getUsername(subject) == null)
+ return false;
+ return true;
+ }
+
+ class E4CmsView implements CmsView {
+ private LoginContext loginContext;
+ private UxContext uxContext;
+ private Subject subject;
+
+ public E4CmsView(Subject subject) {
+ this.subject = subject;
+ uxContext = new SimpleUxContext();
+ }
+
+ @Override
+ public UxContext getUxContext() {
+ return uxContext;
+ }
+
+ @Override
+ public void navigateTo(String state) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void authChange(LoginContext loginContext) {
+ if (loginContext == null)
+ throw new CmsException("Login context cannot be null");
+ // logout previous login context
+ // if (this.loginContext != null)
+ // try {
+ // this.loginContext.logout();
+ // } catch (LoginException e1) {
+ // System.err.println("Could not log out: " + e1);
+ // }
+ this.loginContext = loginContext;
+ }
+
+ @Override
+ public void logout() {
+ if (loginContext == null)
+ throw new CmsException("Login context should not bet null");
+ try {
+ CurrentUser.logoutCmsSession(loginContext.getSubject());
+ loginContext.logout();
+ } catch (LoginException e) {
+ throw new CmsException("Cannot log out", e);
+ }
+ }
+
+ @Override
+ public void exception(Throwable e) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public CmsImageManager getImageManager() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ protected Subject getSubject() {
+ return subject;
+ }
+
+ @Override
+ public boolean isAnonymous() {
+ return CurrentUser.isAnonymous(getSubject());
+ }
+ }