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); } }
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); }
protected virtual void OnTokenUpdated(TokenUpdateEventArgs e) { TokenUpdated?.Invoke(this, e); }