Example #1
0
        //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."));
                }
            }
        }
Example #2
0
        /// <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)."));
                }
            }
        }
Example #3
0
        //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."));
                }
            }
        }
Example #4
0
        /// <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)."));
                }
            }
        }