package com.aelitis.azureus.ui.swt.browser.listener;
import java.net.URLDecoder;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.browser.LocationEvent;
import org.eclipse.swt.browser.LocationListener;
import org.eclipse.swt.browser.ProgressEvent;
import org.eclipse.swt.browser.ProgressListener;
import org.eclipse.swt.browser.StatusTextEvent;
import org.eclipse.swt.browser.StatusTextListener;
import com.aelitis.azureus.ui.swt.browser.BrowserWrapper;
import com.aelitis.azureus.ui.swt.browser.CookiesListener;
public class ExternalLoginCookieListener
implements StatusTextListener,LocationListener,ProgressListener
{
private static final String AZCOOKIEMSG = "AZCOOKIEMSG;";
private CookiesListener listener;
private BrowserWrapper browser;
private final static String getCookiesCode =
//"{" +
"try {" +
"var cookies = encodeURIComponent(document.cookie);" +
"window.status = '" + AZCOOKIEMSG + "' + cookies;" +
"//alert(window.status);\n" +
"window.status = '';" +
"} catch(e) {" +
"}" ;
//"}";
public ExternalLoginCookieListener(CookiesListener _listener,BrowserWrapper browser) {
this.listener = _listener;
this.browser = browser;
browser.addStatusTextListener(this);
}
public void changed(StatusTextEvent event) {
if(event.text.startsWith(AZCOOKIEMSG)) {
String uriEncodedCookies =event.text.substring(AZCOOKIEMSG.length());
try {
String cookies = URLDecoder.decode(uriEncodedCookies, "UTF-8");
if(listener != null) {
listener.cookiesFound(cookies);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
public void getCookies() {
if(browser != null) {
browser.execute(getCookiesCode);
}
}
public void stopListening() {
browser.removeStatusTextListener(this);
}
public void hookOnPageLoaded() {
browser.addProgressListener(this);
}
public void hookOnPageChanged() {
browser.addLocationListener(this);
}
public void hook() {
hookOnPageChanged();
hookOnPageLoaded();
}
public void unHook() {
}
public void changed(ProgressEvent arg0) {
}
public void completed(ProgressEvent arg0) {
getCookies();
}
public void changed(LocationEvent arg0) {
getCookies();
}
public void changing(LocationEvent arg0) {
}
}