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)));
                }
            }
        }
Esempio n. 2
0
 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);
        }
Esempio n. 4
0
        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));
                }
            }
        }
Esempio n. 5
0
		//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);
        }
Esempio n. 7
0
        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);
        }