internal static bool Validate(IGraphApiConfiguration config, DebugTokenResponse model)
        {
            DateTimeOffset expiredAtOffset = DateTimeOffset.FromUnixTimeSeconds(model.ExpiresAt);
            DateTime       expiredAtUtc    = expiredAtOffset.UtcDateTime;

            if (model.IsTokenValid && model.AppId == config.ApplicationId && DateTime.UtcNow < expiredAtUtc)
            {
                return(true);
            }

            return(false);
        }
        private async Task <bool> DebugTokenCallAsync(HttpClient client, string clientToken, string appToken)
        {
            Uri debugTokenUri            = new Uri($"{this.apiUrl}debug_token?input_token={clientToken}&access_token={appToken}");
            HttpResponseMessage response = await client.GetAsync(debugTokenUri);

            if (response.IsSuccessStatusCode)
            {
                string content = await response.Content.ReadAsStringAsync();

                DebugTokenResponse debugTokenResponse = JsonConvert.DeserializeObject <DebugTokenResponse>(content);

                return(DebugTokenValidator.Validate(this.configuration, debugTokenResponse));
            }

            throw new FacebookApiException("DebugTokenCallAsync: the response is not succeded.");
        }
Exemplo n.º 3
0
        public async Task <DebugTokenResponse> DebugTokenAsync(string strToken)
        {
            DebugTokenResponse objDebugToken = null;

            try
            {
                string              Url             = GetUrlDebugToken(strToken);
                HttpClient          client          = new HttpClient();
                HttpResponseMessage responseMessage = await client.GetAsync(Url);

                if (responseMessage.StatusCode == System.Net.HttpStatusCode.OK)
                {
                    string body = await responseMessage.Content.ReadAsStringAsync();

                    objDebugToken = JsonConvert.DeserializeObject <DebugTokenResponse>(body);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return(objDebugToken);
        }
Exemplo n.º 4
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);
        }