import java.security.PrivilegedAction;
import javax.security.auth.Subject;
+import javax.security.auth.login.CredentialNotFoundException;
+import javax.security.auth.login.LoginContext;
+import javax.security.auth.login.LoginException;
+import javax.servlet.http.HttpServletRequest;
+import org.argeo.ArgeoException;
+import org.argeo.cms.CmsException;
import org.argeo.cms.CmsImageManager;
import org.argeo.cms.CmsView;
+import org.argeo.cms.auth.AuthConstants;
import org.argeo.cms.auth.CurrentUser;
+import org.argeo.cms.auth.HttpRequestCallbackHandler;
import org.argeo.cms.util.UserMenu;
+import org.argeo.eclipse.ui.specific.UiContext;
import org.eclipse.rap.rwt.application.EntryPoint;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.PlatformUI;
public abstract class WorkbenchLogin implements EntryPoint, CmsView {
+ // private final static Log log = LogFactory.getLog(WorkbenchLogin.class);
private final Subject subject = new Subject();
+ private LoginContext loginContext;
@Override
public int createUI() {
final Display display = PlatformUI.createDisplay();
- display.setData(CmsView.KEY, this);
- Shell shell = new Shell(display, SWT.NO_TRIM);
- shell.setMaximized(true);
- UserMenu userMenu = new UserMenu(shell, false);
- shell.open();
- while (!userMenu.getShell().isDisposed()) {
- if (!display.readAndDispatch()) {
- display.sleep();
+ UiContext.setData(CmsView.KEY, this);
+ try {
+ loginContext = new LoginContext(AuthConstants.LOGIN_CONTEXT_USER,
+ subject, new HttpRequestCallbackHandler(getRequest()));
+ loginContext.login();
+ } catch (CredentialNotFoundException e) {
+ Shell shell = new Shell(display, SWT.NO_TRIM);
+ shell.setMaximized(true);
+ //shell.setBackground(display.getSystemColor(SWT.COLOR_CYAN));
+ UserMenu userMenu = new UserMenu(shell, false);
+ shell.open();
+ while (!userMenu.getShell().isDisposed()) {
+ if (!display.readAndDispatch()) {
+ display.sleep();
+ }
}
+ } catch (LoginException e) {
+ throw new ArgeoException("Cannot log in", e);
}
//
// RUN THE WORKBENCH
} finally {
display.dispose();
}
+ // explicit workbench closing
+ logout();
return returnCode;
- // display.dispose();
- // return 0;
}
protected abstract int createAndRunWorkbench(Display display,
String username);
+ // private void fullLogout() {
+ // String username = CurrentUser.getUsername(subject);
+ // try {
+ // LoginContext loginContext = new LoginContext(
+ // AuthConstants.LOGIN_CONTEXT_USER, subject);
+ // loginContext.logout();
+ // HttpServletRequest httpRequest = getRequest();
+ // httpRequest.setAttribute(HttpContext.AUTHORIZATION, null);
+ // HttpSession httpSession = httpRequest.getSession();
+ // httpSession.setAttribute(HttpContext.AUTHORIZATION, null);
+ // httpSession.setMaxInactiveInterval(1);
+ // log.info("Logged out " + (username != null ? username : "")
+ // + " (THREAD=" + Thread.currentThread().getId() + ")");
+ // } catch (LoginException e) {
+ // log.error("Error when logging out", e);
+ // }
+ // }
+
+ protected HttpServletRequest getRequest() {
+ return UiContext.getHttpRequest();
+ }
+
@Override
public void navigateTo(String state) {
// TODO Auto-generated method stub
}
@Override
- public void authChange() {
+ public void authChange(LoginContext loginContext) {
+ this.loginContext = loginContext;
+ }
+
+ @Override
+ public void logout() {
+ if (loginContext == null)
+ throw new CmsException("Login context should not bet null");
+ try {
+ loginContext.logout();
+ } catch (LoginException e) {
+ throw new CmsException("Cannot log out", e);
+ }
}
@Override