public async Task <User> FindOrCreateUser(IGitHubUser gitHubUser, CancellationToken cancellationToken)
        {
            var user = _context.Users
                       .FirstOrDefault(u => u.GitHubLogin.ToLower() == gitHubUser.login.ToLower());

            if (user == null)
            {
                var submitted = _context.UserStatusTypes.FirstOrDefault(s => s.Name == "Submitted");
                user = new User
                {
                    GitHubLogin      = gitHubUser.login,
                    UserStatusTypeID = submitted.ID
                };
                _context.Users.Add(user);
                await _context.SaveChangesAsync(cancellationToken);
            }

            return(user);
        }
        public async Task <IApplicationUser> AuthorizeUser(IGitHubUser gitHubUser, IAccessToken gitHubAccessToken, CancellationToken cancellationToken)
        {
            var user = await FindOrCreateUser(gitHubUser, cancellationToken);

            return(new ApplicationUser(IssueJWTToken(user, gitHubAccessToken.access_token), user.GitHubLogin));
        }