public static async Task <RedditClient> CreateAsync(RedditOptions options) { var client = new RedditClient(); var accessToken = await client.Authorize(options); client._httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("bearer", accessToken); client._httpClient.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue(AppName, AppVersion)); return(client); }
private async Task <string> Authorize(RedditOptions options) { var request = new HttpRequestMessage(HttpMethod.Post, "https://www.reddit.com/api/v1/access_token"); var bodyContent = new List <KeyValuePair <string, string> > { new KeyValuePair <string, string>("grant_type", "password"), new KeyValuePair <string, string>("username", options.Username), new KeyValuePair <string, string>("password", options.Password) }; request.Content = new FormUrlEncodedContent(bodyContent); request.Headers.Authorization = new AuthenticationHeaderValue("basic", Convert.ToBase64String( Encoding.UTF8.GetBytes($"{options.ClientId}:{options.ClientSecret}"))); var response = await Enqueue(() => _httpClient.SendAsync(request)); response.EnsureSuccessStatusCode(); var content = await response.Content.ReadAsStringAsync(); using var auth = JsonDocument.Parse(content); return(auth.RootElement.GetProperty("access_token").GetString()); }