private async Task <Tuple <string, T> > InvokeRequest <T>(string url, OauthResponse tokens) where T : class, new() { using (var httpClient = new HttpClient()) { httpClient.DefaultRequestHeaders.Clear(); httpClient.DefaultRequestHeaders.Add("Authorization", tokens.token_type + " " + tokens.access_token); var response = await httpClient.GetAsync(url); var str = await response.Content.ReadAsStringAsync(); ErrorResponse error = null; try { error = Serialization.FromJson <ErrorResponse>(str); } catch { } if (error != null && !string.IsNullOrEmpty(error.errorCode)) { throw new TokenException(error.errorCode); } else { return(new Tuple <string, T>(str, Serialization.FromJson <T>(str))); } } }
public void RefreshToken() { LogUtil.Log("Getting Twitch token."); using (var Client = new WebClient()) { Auth = Client.UploadString($"https://id.twitch.tv/oauth2/token?client_id={ClientId}&client_secret=r70is99w7xa5d4m3qnvrd5eoekhk1d&grant_type=client_credentials", "").FromJson <OauthResponse>(); LogUtil.Log($"Refreshed token: {Auth.access_token}"); } }
//Thanks you facebook for making your token exchange a get... protected override async Task <OAuthAccount> GetAccountFromAuthCode(WebAuthenticator authenticator, string identifier) { var auth = authenticator as FacebookAuthenticator; OauthResponse result; if (IsUsingNative) { result = new OauthResponse { ExpiresIn = auth.Expiration, TokenType = "Bearer", AccessToken = auth.AuthCode, RefreshToken = auth.AuthCode, }; } else { var postData = await authenticator.GetTokenPostData(ClientSecret); if (string.IsNullOrWhiteSpace(TokenUrl)) { throw new Exception("Invalid TokenURL"); } var url = new Uri(TokenUrl).AddParameters(postData); var reply = await Client.GetAsync(url); var resp = await reply.Content.ReadAsStringAsync(); result = Deserialize <OauthResponse>(resp); if (!string.IsNullOrEmpty(result.Error)) { throw new Exception($"{result.Error} : {result.ErrorDescription}"); } } var account = new OAuthAccount() { ExpiresIn = result.ExpiresIn, Created = DateTime.UtcNow, RefreshToken = result.RefreshToken, Scope = authenticator.Scope?.ToArray(), TokenType = result.TokenType, Token = result.AccessToken, ClientId = ClientId, Identifier = identifier, IdToken = result.Id, }; return(account); }
private async Task <T> invokeRequest <T>(string url, OauthResponse tokens) where T : class { using (var httpClient = new HttpClient()) { httpClient.DefaultRequestHeaders.Clear(); httpClient.DefaultRequestHeaders.Add("Authorization", tokens.token_type + " " + tokens.access_token); var response = await httpClient.GetAsync(url); var str = await response.Content.ReadAsStringAsync(); if (Serialization.TryFromJson <ErrorResponse>(str, out var error) && !string.IsNullOrEmpty(error.errorCode)) { throw new TokenException(error.errorCode); } else { return(Serialization.FromJson <T>(str)); } } }
//Thanks you facebook for making your token exchange a get... protected override async Task<OAuthAccount> GetAccountFromAuthCode(WebAuthenticator authenticator, string identifier) { var auth = authenticator as FacebookAuthenticator; OauthResponse result; if (IsUsingNative) { result = new OauthResponse { ExpiresIn = auth.Expiration, TokenType = "Bearer", AccessToken = auth.AuthCode, RefreshToken = auth.AuthCode, }; } else { var postData = await authenticator.GetTokenPostData(ClientSecret); if (string.IsNullOrWhiteSpace(TokenUrl)) throw new Exception("Invalid TokenURL"); var url = new Uri(TokenUrl).AddParameters(postData); var reply = await Client.GetAsync(url); var resp = await reply.Content.ReadAsStringAsync(); result = Deserialize<OauthResponse>(resp); if (!string.IsNullOrEmpty(result.Error)) throw new Exception(result.ErrorDescription); } var account = new OAuthAccount() { ExpiresIn = result.ExpiresIn, Created = DateTime.UtcNow, RefreshToken = result.RefreshToken, Scope = authenticator.Scope?.ToArray(), TokenType = result.TokenType, Token = result.AccessToken, ClientId = ClientId, Identifier = identifier, }; return account; }
public async Task <OauthResponse> OauthAsync(string strCode) { OauthResponse tokenResponse = null; try { string Url = GetUrlUserToken("840201613381836", "https://lequocdien.tk/api/oauth/fb-login", "c4c199b3b77b551bed31d26de9995efc", strCode); HttpClient client = new HttpClient(); HttpResponseMessage responseMessage = await client.GetAsync(Url); if (responseMessage.StatusCode == System.Net.HttpStatusCode.OK) { string body = await responseMessage.Content.ReadAsStringAsync(); tokenResponse = JsonConvert.DeserializeObject <OauthResponse>(body); } } catch (Exception ex) { throw ex; } return(tokenResponse); }
public async Task <bool> OauthPiplineAsync(string strCode, string username) { if (String.IsNullOrEmpty(username) || String.IsNullOrEmpty(strCode)) { return(false); } try { PageInfoResponse objPageInfo; List <UserTokenModel> lstUserToken = new List <UserTokenModel>(); List <PageTokenModel> lstPageToken = new List <PageTokenModel>(); List <PageModel> lstPageInfo = new List <PageModel>(); // 1. USER Token OauthResponse objUserToken = await _facebookApi.OauthAsync(strCode); // 1.1. USER Token Debug DebugTokenResponse objUserDebugToken = await _facebookApi.DebugTokenAsync(objUserToken.AccessToken); lstUserToken.Add(new UserTokenModel() { AppId = objUserDebugToken.Data.AppId, UserId = objUserDebugToken.Data.UserId, Application = objUserDebugToken.Data.Application, AccessToken = objUserToken.AccessToken, IsValid = objUserDebugToken.Data.IsValid, ExpiresAt = objUserDebugToken.Data.ExpiresAt, IssuedAt = objUserDebugToken.Data.IssuedAt, Scopes = objUserDebugToken.Data.Scopes }); // 2. PAGE Token PageTokenResponse objPageDebugToken = await _facebookApi.GetPageTokenAsync(objUserToken.AccessToken); foreach (var item in objPageDebugToken.Data) { // 2.1. PAGE Token Debug var pageDebugToken = await _facebookApi.DebugTokenAsync(item.AccessToken); lstPageToken.Add(new PageTokenModel() { AppId = pageDebugToken.Data.AppId, UserId = pageDebugToken.Data.UserId, Application = pageDebugToken.Data.Application, ProfileId = pageDebugToken.Data.ProfileId, AccessToken = item.AccessToken, IsValid = pageDebugToken.Data.IsValid, ExpiresAt = pageDebugToken.Data.ExpiresAt, IssuedAt = pageDebugToken.Data.IssuedAt, Scopes = pageDebugToken.Data.Scopes }); // 2.2. Subscribe live_videos webhook await _facebookApi.SubscribeLiveVideoAsync(item.AccessToken); // 2.3. PAGE Info objPageInfo = await _facebookApi.GetPageInfoAsync(item.AccessToken); if (objPageInfo != null) { var lstCategory = new List <CategoryModel>(); foreach (var catergory in objPageInfo.Categories) { lstCategory.Add(new CategoryModel() { CategoryId = catergory.CategoryId, CategoryName = catergory.CategoryName }); } lstPageInfo.Add(new PageModel() { PageId = objPageInfo.PageId, PageName = objPageInfo.PageName, Categories = lstCategory, About = objPageInfo.About, Address = objPageInfo.Address, Link = objPageInfo.Link, Emails = objPageInfo.Emails, Website = objPageInfo.Website, FanCount = objPageInfo.FanCount, CheckinCount = objPageInfo.CheckinCount, CanCheckin = objPageInfo.CanCheckin, NewLikeCount = objPageInfo.NewLikeCount, CanPost = objPageInfo.CanPost, //Videos = new List<VideoModel>() }); } } // 3. Insert Or Update Data AccountModel accountModel = new AccountModel(); accountModel.UserTokens = lstUserToken; accountModel.PageTokens = lstPageToken; await _accountRepo.UpdateOneAsync(() => Builders <AccountModel> .Filter.Eq("Username", username), () => Builders <AccountModel> .Update.Set("UserTokens", accountModel.UserTokens).Set("PageTokens", accountModel.PageTokens)); foreach (var item in lstPageInfo) { var pageModel = _pageRepository.FindAsync(() => Builders <PageModel> .Filter.Eq("PageId", item.PageId)).Result.FirstOrDefault(); if (pageModel == null) { await _pageRepository.InsertOneAsync(item); } else { var update = Builders <PageModel> .Update .Set("PageName", item.PageName) .Set("Categories", item.Categories) .Set("About", item.About) .Set("Address", item.Address) .Set("Link", item.Link) .Set("Emails", item.Emails) .Set("FanCount", item.FanCount) .Set("NewLikeCount", item.NewLikeCount) .Set("CheckinCount", item.CheckinCount) .Set("CanCheckin", item.CanCheckin) .Set("CanPost", item.CanPost) .Set("CreatedTime", item.CreatedTime); await _pageRepository.UpdateOneAsync(() => Builders <PageModel> .Filter.Eq("PageId", item.PageId), () => update); } } } catch (Exception ex) { return(false); } return(true); }