//it clears cookies by posting logout form inside html. A synchronous way would be much better private static void clearFacebookCookies(Action <Boolean, Exception> callback) { try { bool isFirstCallback = true; Popup popup = new Popup(); LoginUserControl control = new LoginUserControl(); control.Visibility = Visibility.Collapsed; control.webBrowser.Loaded += new RoutedEventHandler((o, e) => { control.webBrowser.Navigate(new Uri("http://www.facebook.com/logout.php")); }); control.webBrowser.LoadCompleted += new LoadCompletedEventHandler((s, e) => { String html = control.webBrowser.SaveToString(); if (popup.Visibility == Visibility.Visible && html.Contains("id=\"logout_form\"")) { control.webBrowser.InvokeScript("eval", "document.forms['logout_form'].submit();"); popup.IsOpen = false; popup.IsOpen = true; } else { if (isFirstCallback) { isFirstCallback = false; if (callback != null) { callback(true, null); } } } }); popup.Child = control; popup.IsOpen = true; } catch (Exception) { if (callback != null) { callback(false, new NetmeraException(NetmeraException.ErrorCode.EC_FB_ERROR, "Error occured while clearing facebook cookies.")); } } }
/// <summary> /// Login with Twitter account /// </summary> /// <param name="callback">Method to be called when login operation finishes</param> public static void login(Action <NetmeraUser, Exception> callback) { String securityToken = NetmeraClient.getSecurityToken(); if (securityToken != null && securityToken.Trim() != "") { Popup popup = new Popup(); LoginUserControl control = new LoginUserControl(); control.webBrowser.Source = null; control.btnCancel.Click += new RoutedEventHandler((s, e) => { if (callback != null) { callback(null, null); } }); try { NetmeraUser.clearSocialSessions((logout, ex) => { if (logout && ex == null) { control.webBrowser.Loaded += new RoutedEventHandler((s, e) => { twitter.getTwitterLoginUri((loginUri, ex1) => { if (loginUri != null && ex1 == null) { Deployment.Current.Dispatcher.BeginInvoke(() => { control.webBrowser.Navigate(loginUri); }); } else { if (callback != null) { callback(null, ex1); } } }); }); control.webBrowser.LoadCompleted += new LoadCompletedEventHandler((s, e) => { if (e.Uri.AbsoluteUri == Twitter.AuthorizeUrl) { String pinHtml = control.webBrowser.SaveToString(); twitter.getTwitterPin(pinHtml, (pin, ex1) => { if (!String.IsNullOrEmpty(pin)) { twitter.getTwitterAccessToken(e.Uri, (accessToken, ex2) => { Deployment.Current.Dispatcher.BeginInvoke(() => { popup.IsOpen = false; if (ex2 != null) { if (callback != null) { callback(null, ex2); } } else { if (!String.IsNullOrEmpty(accessToken)) { getTwitterUser((user, exc) => { if (user != null && exc == null) { TwitterSession.save(twitter); } callback(user, exc); }); } else { login(callback); } } }); }); } }); } }); Deployment.Current.Dispatcher.BeginInvoke(() => { popup.Child = control; popup.IsOpen = true; }); } else { if (callback != null) { callback(null, ex); } } }); } catch (Exception e) { if (callback != null) { callback(null, e); } } } else { if (callback != null) { callback(null, new NetmeraException(NetmeraException.ErrorCode.EC_API_KEY_NOT_FOUND, "You didn't set your api key. Please use NetmeraClient.init(apiKey).")); } } }
//it clears cookies by posting logout form inside html. A synchronous way would be much better private static void clearTwitterCookies(Action <Boolean, Exception> callback) { bool newUri = true; try { Popup popup = new Popup(); LoginUserControl control = new LoginUserControl(); control.Visibility = Visibility.Collapsed; control.webBrowser.Loaded += new RoutedEventHandler((o, e) => { twitter.getTwitterLoginUri((loginUri, ex) => { newUri = true; if (loginUri != null && ex == null) { Deployment.Current.Dispatcher.BeginInvoke(() => { control.webBrowser.Navigate(loginUri); }); } else { if (callback != null) { callback(false, new NetmeraException(NetmeraException.ErrorCode.EC_TW_ERROR, "Error occured while clearing twitter cookies.")); } } }); }); control.webBrowser.LoadCompleted += new LoadCompletedEventHandler((s, e) => { if (newUri) { if (popup.Visibility == Visibility.Visible && control.webBrowser.SaveToString().Contains("signout")) { control.webBrowser.InvokeScript("eval", "var formsArray = document.getElementsByTagName('form'); for (i=0; i<formsArray.length; i++) {if(formsArray[i].getAttribute('action')== '/intent/session'){formsArray[i].submit();} }"); popup.IsOpen = false; popup.IsOpen = true; newUri = false; } else { popup.IsOpen = false; if (callback != null) { callback(true, null); } } } }); popup.Child = control; popup.IsOpen = true; } catch (Exception) { if (callback != null) { callback(false, new NetmeraException(NetmeraException.ErrorCode.EC_TW_ERROR, "Error occured while clearing twitter cookies.")); } } }
/// <summary> /// Logs a user into the registered application with Facebook account with Facebook permissions. /// </summary> /// <param name="permissionArray">Permission array</param> /// <param name="callback">Method to be called when login operation finishes</param> public static void login(String[] permissionArray, Action <NetmeraUser, Exception> callback) { String securityToken = NetmeraClient.getSecurityToken(); if (securityToken != null && securityToken.Trim() != "") { Popup popup = new Popup(); LoginUserControl control = new LoginUserControl(); control.btnCancel.Click += new RoutedEventHandler((s, e) => { NetmeraUser user = null; user = NetmeraUser.getCurrentUser(); if (callback != null) { callback(user, null); } }); try { NetmeraUser.clearSocialSessions((logout, ex) => { if (logout && ex == null) { control.webBrowser.Loaded += new RoutedEventHandler((s, e) => { facebook.getFacebookLoginUri(permissionArray, (loginUri, ex1) => { if (loginUri != null && ex1 == null) { Deployment.Current.Dispatcher.BeginInvoke(() => { control.webBrowser.Navigate(loginUri); }); } else { if (callback != null) { callback(null, ex1); } } }); }); control.webBrowser.LoadCompleted += new LoadCompletedEventHandler((s, e) => { String ss = control.webBrowser.SaveToString(); facebook.getFacebookAccessToken(e.Uri, (accessToken, ex2) => { if (!String.IsNullOrEmpty(accessToken)) { Deployment.Current.Dispatcher.BeginInvoke(() => { popup.IsOpen = false; getFacebookUser((user, ex3) => { if (user != null && ex3 == null) { FacebookSession.save(facebook); } callback(user, ex3); }); }); } else if (ex2 != null) { Deployment.Current.Dispatcher.BeginInvoke(() => { popup.IsOpen = false; if (callback != null) { callback(null, ex2); } }); } }); }); Deployment.Current.Dispatcher.BeginInvoke(() => { popup.Child = control; popup.IsOpen = true; }); } else { if (callback != null) { callback(null, ex); } } }); } catch (Exception) { if (callback != null) { callback(null, new NetmeraException(NetmeraException.ErrorCode.EC_FB_ERROR, "Error occured while logging in facebook.")); } } } else { if (callback != null) { callback(null, new NetmeraException(NetmeraException.ErrorCode.EC_API_KEY_NOT_FOUND, "You didn't set your api key. Please use NetmeraClient.init(apiKey).")); } } }