Example #1
0
        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);
        }
Example #2
0
        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());
        }