Exemple #1
0
        public void RequestTokens(string PIN)
        {
            string url = "https://api.imgur.com/oauth2/token";

            string responseString = string.Empty;

            using (WebClient wc = new WebClient())
            {
                //t.Headers[HttpRequestHeader.Authorization] = "Client-ID " + m_ClientID;
                try
                {
                    var values = new System.Collections.Specialized.NameValueCollection
                    {
                        {
                            "client_id", ClientID
                        },
                        {
                            "client_secret", ClientSecret
                        },
                        {
                            "grant_type", "pin"
                        },
                        {
                            "pin", PIN
                        }
                    };
                    byte[] response = wc.UploadValues(url, "POST", values);
                    responseString = System.Text.Encoding.ASCII.GetString(response);
                }
                catch (System.Net.WebException ex)
                {
                    if (ex.Response == null)
                    {
                        if (networkRequestFailed != null)
                        {
                            networkRequestFailed.Invoke();
                        }
                    }
                    else
                    {
                        System.IO.Stream stream  = ex.Response.GetResponseStream();
                        int           currByte   = -1;
                        StringBuilder strBuilder = new StringBuilder();
                        while ((currByte = stream.ReadByte()) != -1)
                        {
                            strBuilder.Append((char)currByte);
                        }
                        responseString = strBuilder.ToString();
                    }
                }
                catch (System.Exception ex)
                {
                    Log.Error("Unexpected Exception: " + ex.ToString());
                }
            }

            if (responseString == string.Empty)
            {
                return;
            }

            APIResponses.TokenResponse resp = JsonConvert.DeserializeObject <APIResponses.TokenResponse>(responseString, new JsonSerializerSettings {
                PreserveReferencesHandling = PreserveReferencesHandling.Objects
            });
            if (resp != null && resp.AccessToken != null && resp.RefreshToken != null)
            {
                StoreNewTokens(resp.ExpiresIn, resp.AccessToken, resp.RefreshToken);

                Log.Info("Received tokens from PIN");

                StartTokenThread();

                if (obtainedAuthorization != null)
                {
                    obtainedAuthorization.Invoke();
                }
            }
            else
            {
                Log.Error("Something went wrong while trying to obtain access and refresh tokens");
            }
        }
Exemple #2
0
        private bool RefreshTokens()
        {
            if (!HasBeenAuthorized())
            {
                return(false);
            }

            string url = "https://api.imgur.com/oauth2/token";

            string responseString = string.Empty;

            using (WebClient wc = new WebClient())
            {
                try
                {
                    var values = new System.Collections.Specialized.NameValueCollection
                    {
                        {
                            "client_id", ClientID
                        },
                        {
                            "client_secret", ClientSecret
                        },
                        {
                            "grant_type", "refresh_token"
                        },
                        {
                            "refresh_token", CurrentRefreshToken
                        }
                    };
                    byte[] response = wc.UploadValues(url, "POST", values);
                    responseString = System.Text.Encoding.ASCII.GetString(response);
                }
                catch (System.Net.WebException ex)
                {
                    if (ex.Response == null)
                    {
                        if (networkRequestFailed != null)
                        {
                            networkRequestFailed.Invoke();
                        }
                    }
                    else
                    {
                        System.IO.Stream stream  = ex.Response.GetResponseStream();
                        int           currByte   = -1;
                        StringBuilder strBuilder = new StringBuilder();
                        while ((currByte = stream.ReadByte()) != -1)
                        {
                            strBuilder.Append((char)currByte);
                        }
                        responseString = strBuilder.ToString();
                    }
                }
                catch (System.Exception ex)
                {
                    Log.Error("Unexpected Exception: " + ex.ToString());
                }
            }

            if (responseString == string.Empty)
            {
                return(false);
            }

            APIResponses.TokenResponse resp = null;
            try
            {
                resp = Newtonsoft.Json.JsonConvert.DeserializeObject <APIResponses.TokenResponse>(responseString, new Newtonsoft.Json.JsonSerializerSettings {
                    PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects
                });
            }
            catch (Newtonsoft.Json.JsonReaderException ex)
            {
                Log.Error("Newtonsoft.Json.JsonReaderException occurred while trying to deserialize the following string:\n" + responseString + " (Line: " + ex.LineNumber + ", Position: " + ex.LinePosition + ", Message: " + ex.Message + ")");
                resp = null;
            }
            catch (System.Exception ex)
            {
                Log.Error("Unexpected Exception: " + ex.ToString());
            }
            if (resp != null && resp.AccessToken != null && resp.RefreshToken != null)
            {
                StoreNewTokens(resp.ExpiresIn, resp.AccessToken, resp.RefreshToken);

                Log.Info("Refreshed tokens");

                if (refreshedAuthorization != null)
                {
                    refreshedAuthorization.Invoke();
                }

                return(true);
            }

            Log.Error("Something went wrong while trying to refresh access- and refresh-tokens");

            CurrentAccessToken  = null;
            CurrentRefreshToken = null;

            Properties.Settings.Default.accessToken  = null;
            Properties.Settings.Default.refreshToken = null;
            Properties.Settings.Default.Save();

            if (lostAuthorization != null)
            {
                lostAuthorization.Invoke();
            }

            return(false);
        }