예제 #1
0
        private bool HandleAsExpiredToken(FacebookOAuthException OAuth_ex)
        {
            bool _HandleAsExpiredToken = false;

            if (OAuth_ex.ErrorCode == 190) //OAuthException
            {
                switch (OAuth_ex.ErrorSubcode)
                {
                case 458:     //App Not Installed
                    _HandleAsExpiredToken = true;
                    break;

                case 459:     //User Checkpointed
                    _HandleAsExpiredToken = true;
                    break;

                case 460:     //Password Changed
                    _HandleAsExpiredToken = true;
                    break;

                case 463:     //Expired
                    _HandleAsExpiredToken = true;
                    break;

                case 464:     //Unconfirmed User
                    _HandleAsExpiredToken = true;
                    break;

                case 467:     //Invalid access token
                    _HandleAsExpiredToken = true;
                    break;

                default:
                    _HandleAsExpiredToken = false;
                    break;
                }
            }
            else if (OAuth_ex.ErrorCode == 102)
            {
                //API Session. Login status or access token has expired,
                //been revoked, or is otherwise invalid
                _HandleAsExpiredToken = true;
            }
            else if (OAuth_ex.ErrorCode == 10)
            {
                //API Permission Denied. Permission is either not granted or has been removed -
                //Handle the missing permissions
                _HandleAsExpiredToken = false;
            }
            else if (OAuth_ex.ErrorCode >= 200 && OAuth_ex.ErrorCode <= 299)
            {
                //API Permission (Multiple values depending on permission).
                //Permission is either not granted or has been removed - Handle the missing permissions
                _HandleAsExpiredToken = false;
            }
            return(_HandleAsExpiredToken);
        }
예제 #2
0
        private static void HandleException(string url, Exception e, out Exception resultException)
        {
            resultException = null;
            string         message    = null;
            HttpStatusCode statusCode = HttpStatusCode.OK;
            string         type       = null;

            if (e is WebException)
            {
                WebException    webException = (WebException)e;
                HttpWebResponse response     = (HttpWebResponse)webException.Response;

                message    = response.GetBody();
                statusCode = response.StatusCode;

                dynamic jsonResult = JsonConvert.DeserializeObject(message);
                if (jsonResult != null && jsonResult.error != null)
                {
                    if (jsonResult.error.type != null)
                    {
                        type = jsonResult.error.type;
                    }
                    else
                    {
                        type = jsonResult.error;
                    }
                }

                switch (type)
                {
                case "OAuthException":
                case "190":
                    resultException = new FacebookOAuthException(type, message);
                    break;

                default:
                    resultException = new FacebookApiException(type, message);
                    break;
                }
            }
            else
            {
                message = e.Message;
            }

            // replacing ; character since it's our delimiter
            url     = url.Replace(";", "%3b");
            message = message.Replace(";", "%3b");

            StringBuilder sb = new StringBuilder();

            sb.AppendFormat("{0};{1};{2};{3}", (int)statusCode, statusCode, url, message);

            Logger.Current.Error("GraphAPI.HandleException", sb.ToString(), e);
        }
예제 #3
0
 protected override void OnException(ExceptionContext filterContext)
 {
     if (filterContext.Exception is FacebookApiLimitException)
     {
         //Status message banner notifying user to try again later
         filterContext.ExceptionHandled = true;
         ViewBag.GlobalStatusMessage    = "Facebook Graph API limit reached, Please try again later...";
     }
     else if (filterContext.Exception is FacebookOAuthException)
     {
         FacebookOAuthException OAuth_ex = (FacebookOAuthException)filterContext.Exception;
         if (OAuth_ex.ErrorCode == 190 || OAuth_ex.ErrorSubcode > 0)
         {
             filterContext.ExceptionHandled = true;
             filterContext.Result           = GetFacebookLoginURL();
         }
         else
         {
             //redirect to Facebook Custom Error Page
             ViewBag.ErrorMessage           = filterContext.Exception.Message;
             filterContext.ExceptionHandled = true;
             filterContext.Result           = RedirectToAction("Index", "Error");
         }
     }
     else if (filterContext.Exception is FacebookApiException)
     {
         //redirect to Facebook Custom Error Page
         ViewBag.ErrorMessage           = filterContext.Exception.Message;
         filterContext.ExceptionHandled = true;
         filterContext.Result           = RedirectToAction("Index", "Error");
     }
     else
     {
         base.OnException(filterContext);
     }
 }
예제 #4
0
 public static ExceptionWithCode FacebookOauthException(FacebookOAuthException fbOauthException)
 {
     return(new ExceptionWithCode(40001, fbOauthException.Message, fbOauthException));
 }