package com.javafun.timetracking.security; import java.net.URL; import java.security.PrivilegedAction; import javax.security.auth.Subject; import javax.security.auth.login.LoginException; import javax.servlet.http.HttpSession; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.equinox.security.auth.ILoginContext; import org.eclipse.equinox.security.auth.ILoginContextListener; import org.eclipse.equinox.security.auth.LoginContextFactory; import com.javafun.timetracking.internal.Activator; public class LoginManager { private static final String JAAS_CONFIG_FILE = "/config/jaas_config.txt"; public static IStatus login(final HttpSession httpSession, int atempt) { if (atempt > 2) { return Status.CANCEL_STATUS; } int i = ++atempt; String configName = "TIMETRACKING"; Activator activator = Activator.getDefault(); URL configUrl = activator.getBundle().getEntry(JAAS_CONFIG_FILE); final ILoginContext secureContext = LoginContextFactory.createContext(configName, configUrl); ILoginContextListener listener = new ILoginContextListener() { @Override public void onLogoutStart(final Subject subject) { } @Override public void onLogoutFinish(final Subject subject, final LoginException logoutException) { } @Override public void onLoginStart(final Subject subject) { } @Override public void onLoginFinish(final Subject subject, final LoginException loginException) { httpSession.removeAttribute("status"); if (loginException != null && "Login canceled".equals(loginException.getMessage())) { httpSession.setAttribute("status", Status.CANCEL_STATUS); } } }; try { secureContext.registerListener(listener); secureContext.login(); // final IStatus status = (IStatus) // httpSession.getAttribute("status"); secureContext.unregisterListener(listener); listener = null; return Status.OK_STATUS; } catch (LoginException e) { final IStatus status = (IStatus) httpSession.getAttribute("status"); secureContext.unregisterListener(listener); listener = null; if (status != null) { return status; } // IStatus status = new Status(IStatus.ERROR, // "com.javafun.timetracking", "Login failed", e); // ErrorDialog.openError(null, "Error", // "Login failed. Incorrect Username or password", status); return login(httpSession, i); } } private static PrivilegedAction getRunAction() { return new PrivilegedAction() { public Object run() { // int result = PlatformUI.createAndRunWorkbench( display, // new ApplicationWorkbenchAdvisor() ); return new Integer(0); } }; } }