Beispiel #1
0
        public async Task <JsonResult> OnGetAsync(string url = "")
        {
            var user = HttpContext.Session.Get <OAuthResponse>(Strings.SessionKey);

            if (user != null)
            {
                Media content;
                if (string.IsNullOrWhiteSpace(url))
                {
                    _logger.LogInformation("[{me}] is calling url[{url}]", nameof(OnGetAsync), url);
                    content = await _api.GetMediaListAsync(user.AccessToken, user.User.Id).ConfigureAwait(false);
                }
                else
                {
                    url = WebUtility.UrlDecode(url);
                    _logger.LogInformation("[{me}] is calling url[{url}]", nameof(OnGetAsync), url);
                    content = await _api.GetMediaListAsync(url).ConfigureAwait(false);
                }

                return(new JsonResult(content));
            }
            else
            {
                return(new JsonResult(new { error = $"{Strings.SessionKey} is NULL from HttpContext.Session" }));
            }
        }
        public async Task <IActionResult> OnGetAsync()
        {
            _logger.LogInformation("MediaList/Index called");

            var response = HttpContext.Session.Get <OAuthResponse>(Strings.SessionKey);

            if (response == null)
            {
                return(RedirectToLoginPage());
            }

            var media = await _api.GetMediaListAsync(response).ConfigureAwait(false);

            _logger.LogInformation("Initial media response returned with [{count}] records ", media.Data.Count);

            Media.Add(media);

            while (!string.IsNullOrWhiteSpace(media?.Paging?.Next))
            {
                var next  = media?.Paging?.Next;
                var count = media?.Data?.Count;
                _logger.LogInformation("Getting next page [{next}]", next);

                media = await _api.GetMediaListAsync(next).ConfigureAwait(false);

                _logger.LogInformation("next media response returned with [{count}] records ", count);

                Media.Add(media);
            }

            return(Page());
        }
        public async Task GetMediaListAsync_Returns_MediaList()
        {
            // Arrange
            var credentials         = MockInstagramCredentials();
            var options             = Options.Create(credentials);
            var logger              = Mock.Of <ILogger <InstagramApi> >();
            var mockFactory         = MockHttpClientFactory_For_GetMediaList();
            var instagramHttpClient = new InstagramHttpClient(options, mockFactory.Object, logger);
            var oAuthResponse       = new OAuthResponse
            {
                AccessToken = "123",
                User        = new UserInfo
                {
                    Id       = "123",
                    Username = "******"
                }
            };

            // Act
            var api      = new InstagramApi(options, logger, instagramHttpClient);
            var response = await api.GetMediaListAsync(oAuthResponse).ConfigureAwait(false);

            // Assert
            Assert.NotNull(api);
            Assert.NotNull(response);
            Assert.NotNull(response.Paging);
            Assert.NotNull(response.Data);
            Assert.Equal("Carousel", response.Data[0].Caption);
            Assert.Equal("CAROUSEL_ALBUM", response.Data[0].MediaType);
            Assert.Equal("18081199675165936", response.Data[0].Id);
            Assert.Equal("producer_journey", response.Data[0].Username);
            Assert.Equal(25, response.Data.Count); // unless you page through its 25 items per request
        }
        public async Task <IActionResult> OnGetAsync(string code, string state)
        {
            _logger.LogInformation("Auth/OAuth for state [{state}] returned the code [{code}]", state, code);

            try
            {
                var response = HttpContext.Session.Get <OAuthResponse>(Strings.SessionKey) ?? await _api.AuthenticateAsync(code, state).ConfigureAwait(false);

                if (response == null)
                {
                    Message = "OAutResponse is null. Redirecting to login page";
                    return(RedirectToLoginPage());
                }

                var media = await _api.GetMediaListAsync(response).ConfigureAwait(false);

                _logger.LogInformation("Initial media response returned with [{count}] records ", media.Data.Count);
                Media.Add(media);

                //
                //  TODO: toggle the following boolean for a quick and dirty way of getting all a user's media.
                //
                if (true)
                {
                    while (!string.IsNullOrWhiteSpace(media?.Paging?.Next))
                    {
                        var next  = media?.Paging?.Next;
                        var count = media?.Data?.Count;
                        _logger.LogInformation("Getting next page [{next}]", next);

                        media = await _api.GetMediaListAsync(next).ConfigureAwait(false);

                        _logger.LogInformation("next media response returned with [{count}] records ", count);

                        Media.Add(media);
                    }
                }

                Code     = code;
                State    = state;
                UserInfo = response.User;
                HttpContext.Session.Set(Strings.SessionKey, response);

                Message = $"{UserInfo.Username} has connected to Instagram successfully.";
            }
            catch (InstagramOAuthException ex)
            {
                Message = $"InstagramOAuthException! {ex.Message} ";
                _logger.LogError(ex, "Instagram OAuth error - instagram response message : [{message}] error_type : [{type}] error_code : [{code}] fb_trace [{fbTrace}]", ex.Message, ex.ErrorType, ex.ErrorCode, ex.FbTraceId);
            }
            catch (InstagramApiException ex)
            {
                Message = $"InstagramApiException! {ex.Message} ";
                _logger.LogError(ex, "Instagram API error - instagram response message : [{message}] error_type : [{type}] error_code : [{code}] error_sub_code : [{subCode}] fb_trace [{fbTrace}]", ex.Message, ex, ex.StackTrace, ex.Message, ex.ErrorType, ex.ErrorCode, ex.ErrorSubcode, ex.FbTraceId);
            }
            catch (InstagramException ex)
            {
                Message = $"InstagramException! {ex.Message} ";
                _logger.LogError(ex, "General Instagram error - instagram response message : [{message}] error_type : [{type}] error_code : [{code}] fb_trace [{fbTrace}]", ex.Message, ex, ex.StackTrace, ex.Message, ex.ErrorType, ex.ErrorCode, ex.FbTraceId);
            }
            catch (Exception ex)
            {
                Message = $"Exception! {ex.Message} ";
                _logger.LogError(ex, "Unknown exception calling with message [{message}] and exception [{ex}] and stack [{stack}]", ex.Message, ex, ex.StackTrace);
            }

            return(Page());
        }