Esempio n. 1
0
        private RestRequest RefreshAccessToken(RestRequest restRequest)
        {
            RestClient  keyCli = new RestClient("https://www.reddit.com");
            RestRequest keyReq = new RestRequest("/api/v1/access_token", Method.POST);

            keyReq.AddHeader("Authorization", "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes(AppId + ":" + AppSecret)));
            keyReq.AddHeader("Content-Type", "application/x-www-form-urlencoded");

            if (!string.IsNullOrEmpty(RefreshToken))
            {
                keyReq.AddParameter("grant_type", "refresh_token");
                keyReq.AddParameter("refresh_token", RefreshToken);
            }
            else if (!string.IsNullOrEmpty(DeviceId))
            {
                keyReq.AddParameter("grant_type", "https://oauth.reddit.com/grants/installed_client");
                keyReq.AddParameter("device_id", DeviceId);
            }
            else
            {
                throw new RedditException("Either a refresh token or device ID is required for authentication.");
            }

            IRestResponse keyRes = keyCli.Execute(keyReq);

            if (keyRes != null && keyRes.IsSuccessful)
            {
                AccessToken = JsonConvert.DeserializeObject <JObject>(keyRes.Content).GetValue("access_token").ToString();

                TokenUpdateEventArgs args = new TokenUpdateEventArgs
                {
                    AccessToken = AccessToken
                };
                OnTokenUpdated(args);

                string contentType = "application/x-www-form-urlencoded";
                foreach (Parameter param in restRequest.Parameters)
                {
                    if (param.Name.Equals("content-type", StringComparison.OrdinalIgnoreCase) ||
                        param.Name.Equals("contenttype", StringComparison.OrdinalIgnoreCase))
                    {
                        contentType = param.Value.ToString();
                        break;
                    }
                }

                return(PrepareRequest(restRequest.Resource, restRequest.Method, restRequest.Parameters, restRequest.Files, contentType));
            }
            else
            {
                return(restRequest);
            }
        }
Esempio n. 2
0
 public void C_TokenUpdated(object sender, TokenUpdateEventArgs e)
 {
     Account.UpdateAccessToken(e.AccessToken);
     Captcha.UpdateAccessToken(e.AccessToken);
     Emoji.UpdateAccessToken(e.AccessToken);
     Flair.UpdateAccessToken(e.AccessToken);
     LinksAndComments.UpdateAccessToken(e.AccessToken);
     Listings.UpdateAccessToken(e.AccessToken);
     LiveThreads.UpdateAccessToken(e.AccessToken);
     Misc.UpdateAccessToken(e.AccessToken);
     Moderation.UpdateAccessToken(e.AccessToken);
     Modmail.UpdateAccessToken(e.AccessToken);
     Multis.UpdateAccessToken(e.AccessToken);
     PrivateMessages.UpdateAccessToken(e.AccessToken);
     RedditGold.UpdateAccessToken(e.AccessToken);
     Search.UpdateAccessToken(e.AccessToken);
     Subreddits.UpdateAccessToken(e.AccessToken);
     Users.UpdateAccessToken(e.AccessToken);
     Widgets.UpdateAccessToken(e.AccessToken);
     Wiki.UpdateAccessToken(e.AccessToken);
 }
Esempio n. 3
0
 protected virtual void OnTokenUpdated(TokenUpdateEventArgs e)
 {
     TokenUpdated?.Invoke(this, e);
 }