using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Threading.Tasks; using Flurl; namespace Sony.Filtr.YouTube.Api { public class GoogleOAuth2Api { //private readonly string _redirectUrl; private const string ClientID = "496029115583-2gm32qtrt13t9om4ufuh23rlmvo4fj5b.apps.googleusercontent.com"; private const string ClientSecret = "yIu9_L4xi11aWqT5H1uuE7jb"; //public GoogleOAuth2Api(string redirectUrl) //{ // _redirectUrl = redirectUrl; //} //public async Task PostTokenAsync(string code) //{ // var url = new Url("https://www.googleapis.com/oauth2/v3/token"); // url.SetQueryParam("code", code); // url.SetQueryParam("client_id", ClientID); // url.SetQueryParam("client_secret", ClientSecret); // url.SetQueryParam("redirect_uri", _redirectUrl); // url.SetQueryParam("grant_type", "authorization_code"); // var client = new HttpClient(); // var response = await client.PostAsync(url, new StringContent(string.Empty)); // var accessTokenResponse = await response.Content.ReadAsAsync(); // return accessTokenResponse; //} public async Task RequestRefreshedAccessTokenAsync(string refreshToken) { var url = new Url("https://accounts.google.com/o/oauth2/token"); Dictionary requestParams = new Dictionary() { { "client_id", ClientID }, { "client_secret", ClientSecret }, { "refresh_token", refreshToken }, { "grant_type", "refresh_token" }, }; var client = new HttpClient(); var response = await client.PostAsync(url, new FormUrlEncodedContent(requestParams)); var accessTokenResponse = await response.Content.ReadAsAsync(); return accessTokenResponse; } public async Task GetMe(AccessTokenResponse accessToken) { var client = new HttpClient(); var url = new Url("https://www.googleapis.com/oauth2/v1/tokeninfo"); url.SetQueryParam("access_token", accessToken.access_token); var response = await client.GetAsync(url); var accessTokenInfo = await response.Content.ReadAsAsync(); return accessTokenInfo; } public async Task GetUserInfo(AccessTokenResponse accessToken) { var client = new HttpClient(); var url = new Url("https://www.googleapis.com/oauth2/v1/userinfo"); url.SetQueryParam("access_token", accessToken.access_token); var response = await client.GetAsync(url); var userInfo = await response.Content.ReadAsAsync(); return userInfo; } public class AccessTokenResponse { public string access_token { get; set; } public string token_type { get; set; } public string expires_in { get; set; } public string refresh_token { get; set; } } public class AccessTokenInfoResponse { public string audience { get; set; } public string user_id { get; set; } public string scope { get; set; } public string expires_in { get; set; } } public class UserInfoResponse { public string id { get; set; } public string name { get; set; } public string given_name { get; set; } public string family_name { get; set; } public string link { get; set; } public string picture { get; set; } public string gender { get; set; } public string locale { get; set; } } //public string GetRedirectUrl() //{ // var authUrl = new Url("https://accounts.google.com/o/oauth2/auth"); // authUrl.SetQueryParam("client_id", ClientID); // authUrl.SetQueryParam("redirect_uri", _redirectUrl); // authUrl.SetQueryParam("scope", "profile https://www.googleapis.com/auth/youtube https://www.googleapis.com/auth/userinfo.profile"); // authUrl.SetQueryParam("response_type", "code"); // authUrl.SetQueryParam("access_type", "offline"); // authUrl.SetQueryParam("approval_prompt", "force"); // return authUrl; //} } }