예제 #1
0
        private async Task <bool> IsValidAccessToken(string accessToken)
        {
            var profileResponse = await _laDanseRestClient.GetAsync <Profile>(_ladanseUrlBuilder.ProfileUrl(), accessToken);

            return(profileResponse.IsSuccess && profileResponse.Body != null &&
                   profileResponse.Body.GetType() == typeof(Profile));
        }
예제 #2
0
        public async Task <EventPage> GetEvents()
        {
            try
            {
                var discordSiteResponse = await _laDanseRestClient.GetAsync <EventPage>(_laDanseUrlBuilder.QueryEventsUrl(), null);

                var eventsPage = discordSiteResponse.Body;

                return(eventsPage);
            }
            catch (Exception e)
            {
                _logger.LogError("Failed to get events", e.StackTrace);
                _logger.LogError(e.ToString());
            }

            return(null);
        }
예제 #3
0
        public IActionResult Website(string authCode)
        {
            _logger.LogTrace("ConnectController - " + authCode);

            #region FetchAccessToken

            var discordSiteResponse = _laDanseRestClient
                                      .GetAsync <AccessTokenResponse>(_laDanseUrlBuilder.DiscordGrantUrl(authCode))
                                      .GetAwaiter().GetResult();

            if (!discordSiteResponse.IsSuccess)
            {
                _logger.LogTrace("Failed - GetAsync");
                return(View("Failure"));
            }

            var accessTokenResponse = discordSiteResponse.Body;

            #endregion

            #region Fetch AuthSession

            var authSessions = _dbContext.AuthSessions
                               .Include(a => a.DiscordUser)
                               .Where(a => a.Nonce == accessTokenResponse.Nonce)
                               .ToList();

            if (authSessions.Count != 1)
            {
                _logger.LogTrace("Failed - no matching AuthSession");
                return(View("Failure"));
            }

            var authSession = authSessions[0];

            #endregion

            #region CleanUpAccessTokenMappings

            var accessTokenMappings = _dbContext.AccessTokenMappings
                                      .Where(a => a.DiscordUser == authSession.DiscordUser)
                                      .ToList();

            foreach (var accessTokenMapping in accessTokenMappings)
            {
                if (accessTokenMapping.State == AccessTokenState.Active)
                {
                    accessTokenMapping.State = AccessTokenState.Removed;
                }
            }

            #endregion

            #region CreateAccessTokenMapping

            var newAccessTokenMapping = new AccessTokenMapping
            {
                AccessToken = accessTokenResponse.AccessToken,
                CreatedOn   = 0,
                DiscordUser = authSession.DiscordUser,
                State       = AccessTokenState.Active
            };

            _dbContext.AccessTokenMappings.Add(newAccessTokenMapping);

            authSession.State = AuthSessionState.Consumed;

            #endregion

            _dbContext.SaveChanges();

            return(View("Success"));
        }