public async Task <IActionResult> ListRepositories([FromServices] IGitHubUserModelService gitHubUserModelService)
        {
            _telemetryService.TrackPageView(Pages.ListRepositories);

            var listRepositoriesViewModel = await BuildListRepositoriesViewModel(gitHubUserModelService);

            return(View(listRepositoriesViewModel));
        }
        public async Task <IActionResult> CreateToken([FromServices] IGitHubUserModelService gitHubUserModelService, [FromQuery] long gitHubRepositoryId)
        {
            _telemetryService.CreateToken(User.FindFirst(CustomClaims.GithubLogin).Value);

            var jsonWebToken = await _accessTokenService.CreateTokenAsync(gitHubRepositoryId);

            var listRepositoriesViewModel = await BuildListRepositoriesViewModel(gitHubUserModelService, gitHubRepositoryId, jsonWebToken);

            return(View("ListRepositories", listRepositoriesViewModel));
        }
 public AccessTokenService(IOptions <AuthOptions> optionsAccessor,
                           IAccessTokenRepository tokenRepository,
                           IGitHubUserModelService gitHubUserModelService,
                           IHttpContextAccessor contextAccessor)
 {
     _optionsAccessor        = optionsAccessor;
     _tokenRepository        = tokenRepository;
     _gitHubUserModelService = gitHubUserModelService;
     _contextAccessor        = contextAccessor;
 }
        private async Task <ListRepositoriesViewModel> BuildListRepositoriesViewModel(IGitHubUserModelService gitHubUserModelService, long gitHubRepositoryId, string jsonWebToken)
        {
            var buildListRepositoriesViewModel = await BuildListRepositoriesViewModel(gitHubUserModelService);

            buildListRepositoriesViewModel.CreatedToken       = jsonWebToken;
            buildListRepositoriesViewModel.CreatedTokenRepoId = gitHubRepositoryId;
            return(buildListRepositoriesViewModel);
        }
        private async Task <ListRepositoriesViewModel> BuildListRepositoriesViewModel(IGitHubUserModelService gitHubUserModelService)
        {
            var installations = await gitHubUserModelService.GetInstallationsAsync();

            var repositoriesByOwner = installations
                                      .SelectMany(installation => installation.Repositories)
                                      .GroupBy(repository => repository.Owner)
                                      .OrderBy(grouping => grouping.Key)
                                      .ToArray();

            var issuedAccessTokens = await _accessTokenService.GetTokensForUserRepositoriesAsync();

            var tokenLookup = issuedAccessTokens.ToLookup(t => t.GitHubRepositoryId, r => r);

            return(new ListRepositoriesViewModel
            {
                TokenLookup = tokenLookup,
                RepositoriesByOwner = repositoriesByOwner
            });
        }