package com.aptana.ide.server.jetty.portal;
import java.io.IOException;
import java.net.URL;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;
import org.eclipse.swt.widgets.Display;
import com.aptana.ide.core.IdeLog;
import com.aptana.ide.core.db.EventLogger;
import com.aptana.ide.core.model.RESTServiceProvider;
import com.aptana.ide.core.model.user.AptanaUser;
import com.aptana.ide.core.model.user.User;
import com.aptana.ide.core.model.user.UserRequestBuilder;
import com.aptana.ide.core.ui.CoreUIUtils;
import com.aptana.ide.server.jetty.JettyPlugin;
/**
* Used by the new web based deployment wizard to exceute commands e.g. trackevent, signin, signout.
*
* @author Sandip Chitale
*/
public class CommandFilter implements Filter
{
private static String PARAMETER_COMMAND = "command"; //$NON-NLS-1$
private static String VALUE_TRACK_EVENT = "trackevent"; //$NON-NLS-1$
private static String PARAMETER_CODE = "code"; //$NON-NLS-1$
private static String PARAMETER_DATA = "data"; //$NON-NLS-1$
private static String VALUE_SIGNIN = "signin"; //$NON-NLS-1$
private static String PARAMETER_USERNAME = "username"; //$NON-NLS-1$
private static String PARAMETER_PASSWORD = "password"; //$NON-NLS-1$
private static String VALUE_SIGNOUT = "signout"; //$NON-NLS-1$
private static String VALUE_OPENURL = "openurl"; //$NON-NLS-1$
private static String PARAMETER_URL = "url"; //$NON-NLS-1$
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException
{
chain.doFilter(request, response);
HttpServletResponse resp = (HttpServletResponse)response;
String command = request.getParameter(PARAMETER_COMMAND);
if(command != null) {
if (VALUE_SIGNIN.equals(command)) {
String username = request.getParameter(PARAMETER_USERNAME);
String password = request.getParameter(PARAMETER_PASSWORD);
if (username != null && password != null) {
boolean shouldSignIn = true;
User user = AptanaUser.getSignedInUser();
if (user != null && user.hasCredentials()) {
if (username.equals(user.getUsername()) && password.equals(user.getPassword())) {
// the specified user is already signed in, no
// need to do anything
shouldSignIn = false;
} else {
// signs the current user out first
AptanaUser.signOut();
}
}
if (shouldSignIn) {
// signs the new user in
final User newUser = new User(username, password, null, null,
null, null, null);
newUser.setDefaultLocation(new URL(AptanaUser.LOGINS));
newUser.setServiceProvider(new RESTServiceProvider());
newUser.setRequestBuilder(new UserRequestBuilder());
// gets the user location
newUser.update();
if (newUser.hasLocation()) {
// gets the user model
newUser.update();
// signs in the user in the UI thread to avoid issue
// http://support.aptana.com/asap/browse/STU-4438
Display.getDefault().syncExec(new Runnable()
{
public void run()
{
AptanaUser.signIn(newUser.getUsername(),
newUser.getPassword(), newUser
.getLocation(), newUser
.getId());
}
});
}
}
} else {
IdeLog.logImportant(JettyPlugin.getDefault(),
VALUE_SIGNIN + " command did not required parameters " + PARAMETER_USERNAME + " and " + PARAMETER_PASSWORD); //$NON-NLS-1$ //$NON-NLS-2$
}
} else if (VALUE_SIGNOUT.equals(command)) {
User user = AptanaUser.getSignedInUser();
if (user != null && user.hasCredentials()) {
AptanaUser.signOut();
}
} else if (VALUE_OPENURL.equals(command)) {
String url = request.getParameter(PARAMETER_URL);
if (url != null) {
CoreUIUtils.openBrowserURL(url);
}
} else if (VALUE_TRACK_EVENT.equals(command)) {
String eventCode = request.getParameter(PARAMETER_CODE);
String eventData = request.getParameter(PARAMETER_DATA);
if(eventCode != null && eventCode.length() > 0)
{
EventLogger.getInstance().logEvent(eventCode, eventData);
}
else
{
IdeLog.logImportant(JettyPlugin.getDefault(),
"Got null or empty event code from event tracking filter."); //$NON-NLS-1$
}
}
}
resp.setHeader("Cache-Control","no-store, no-cache, must-revalidate, post-check=0, pre-check=0"); //HTTP 1.1 //$NON-NLS-1$ //$NON-NLS-2$
resp.setHeader("Pragma","no-cache"); //HTTP 1.0 //$NON-NLS-1$ //$NON-NLS-2$
resp.setDateHeader ("Expires", 0); //prevents caching at the proxy server //$NON-NLS-1$
}
public void init(FilterConfig arg0) throws ServletException {}
public void destroy() {}
}