Exemplo n.º 1
0
        public void CreateValidTeamPass(TeamRegisterPost request)
        {
            // Arrange DI of objects
            var _context = new ApiGatewayContext();
            var teamRegistrationService = new TeamRegistrationService(_context);
            var urlValidationService    = new UrlValidationService(_context);

            var teamRegistrationManager = new TeamRegistrationManager(teamRegistrationService, urlValidationService);

            // Act create a valid team
            var creatTeamStatus = teamRegistrationManager.CreateTeamAccount(request);

            // Assert that team creation is successfull
            Assert.IsTrue(creatTeamStatus.TeamCreate);

            // Cleanup the team

            var createdTeam = _context.Team.
                              Where(t => request.Username == t.Username).
                              FirstOrDefault();

            if (createdTeam == null)
            {
                // Failed to delete
                Assert.IsTrue(false);
            }
            _context.Team.Remove(createdTeam);
            _context.SaveChanges();
        }
Exemplo n.º 2
0
 public IActionResult RegisterTeam(TeamRegisterPost postInfo)
 {
     try
     {
         return(Ok(_teamRegistrationManager.CreateTeamAccount(postInfo)));
     }
     catch
     {
         return(StatusCode(StatusCodes.Status500InternalServerError));
     }
 }
Exemplo n.º 3
0
        public void CreateInvalidTeamInvalidUrlFail(TeamRegisterPost request)
        {
            // Arrange DI of objects
            var _context = new ApiGatewayContext();
            var teamRegistrationService = new TeamRegistrationService(_context);
            var urlValidationService    = new UrlValidationService(_context);

            var teamRegistrationManager = new TeamRegistrationManager(teamRegistrationService, urlValidationService);

            // Act create a valid team
            var creatTeamStatus = teamRegistrationManager.CreateTeamAccount(request);

            // Assert that team creation is successfull
            Assert.IsFalse(creatTeamStatus.TeamCreate);
        }
        /// <summary>
        /// Create a team in the data store
        /// </summary>
        /// <param name="postInfo">Json request object for creating team</param>
        /// <param name="clientId">Client id for team to create</param>
        /// <param name="digest">Digest to store for the team</param>
        /// <param name="clientDigest">Client digest used for Oauth flow</param>
        /// <returns></returns>
        public bool CreateTeam(TeamRegisterPost postInfo, string clientId, byte[] digest, byte[] clientDigest)
        {
            try
            {
                // Create team model.
                var newTeam = new Team()
                {
                    ClientId = clientId, Secret = Convert.ToBase64String(clientDigest), WebsiteUrl = postInfo.WebsiteUrl, Digest = Convert.ToBase64String(digest), CallbackUrl = postInfo.CallbackUrl, Username = postInfo.Username
                };

                // Save team.
                _context.Team.Add(newTeam);
                _context.SaveChanges();
                return(true);
            }
            catch
            {
                return(false);
            }
        }
        public void InvalidTeamLoginWrongUsernameFail(TeamRegisterPost teamRegisterPost, TeamLoginPost teamLoginPost)
        {
            // Arrange DI of objects
            var _context = new ApiGatewayContext();
            var teamRegistrationService = new TeamRegistrationService(_context);
            var urlValidationService    = new UrlValidationService(_context);

            var teamRegistrationManager = new TeamRegistrationManager(teamRegistrationService, urlValidationService);

            var creatTeamStatus = teamRegistrationManager.CreateTeamAccount(teamRegisterPost);

            // Assert that team creation is successfull
            Assert.IsTrue(creatTeamStatus.TeamCreate);

            // DI of team login
            var teamLoginService = new TeamLoginService(_context);
            var jwtService       = new JWTService();

            var teamLoginManager = new TeamLoginManager(teamLoginService, jwtService);

            // Act login for the registered user.
            var loginresp = teamLoginManager.TeamLogin(teamLoginPost);

            // Assert that login fail
            Assert.IsFalse(loginresp.Status);

            // Cleanup the team
            var createdTeam = _context.Team.
                              Where(t => teamRegisterPost.Username == t.Username).
                              FirstOrDefault();

            if (createdTeam == null)
            {
                // Failed to delete
                Assert.IsTrue(false);
            }
            _context.Team.Remove(createdTeam);
            _context.SaveChanges();
        }
        /// <summary>
        /// Create team accounts for the web api.
        /// </summary>
        /// <param name="postInfo">Json object to represent post request</param>
        /// <returns>Json response object</returns>
        public TeamRegisterResp CreateTeamAccount(TeamRegisterPost postInfo)
        {
            // Check If Username is Taken.
            var nameResult = _teamRegistrationService.IsUsernameValid(postInfo.Username);

            // Check password strength.
            var passwordResult = _teamRegistrationService.IsPasswordValid(postInfo.Password);

            // Check that passwords and repeat passwords are equal.
            passwordResult &= postInfo.Password == postInfo.RepeatPassword;

            // Check If Website url is taken. Then Check if valid, if its alive and its https.
            var websiteUrl   = _urlValidationService.IsWebsiteURLUnique(postInfo.WebsiteUrl);
            var websiteValid = _urlValidationService.IsUrlValid(postInfo.WebsiteUrl);

            websiteValid &= _urlValidationService.IsUrlHttps(postInfo.WebsiteUrl);

            var websiteAlive = false;

            if (websiteValid)
            {
                websiteAlive = _urlValidationService.IsUrlAlive(postInfo.WebsiteUrl);
            }


            // Check if  callback url is taken. Then Check if valid, if its alive and its https.
            var callBackurl   = _urlValidationService.IsCallBackURLUnique(postInfo.CallbackUrl);
            var callbackValid = _urlValidationService.IsUrlValid(postInfo.CallbackUrl);

            callbackValid &= _urlValidationService.IsUrlHttps(postInfo.CallbackUrl);

            var callbackAlive = false;

            if (callbackValid)
            {
                callbackAlive = _urlValidationService.IsUrlAlive(postInfo.CallbackUrl);
            }

            // If any of the above flags are false return json Object containing error info.
            if (!(nameResult && passwordResult && websiteUrl && websiteValid && websiteAlive && callBackurl && callbackValid && callbackAlive))
            {
                return(new TeamRegisterResp(nameResult, passwordResult, websiteUrl, websiteValid, websiteAlive, callBackurl, callbackValid, callbackAlive, false));
            }
            else
            {
                // Create team if we pass all requirements.
                // generate salt for teams password.
                var salt = _teamRegistrationService.GenerateSalt(Constants.saltLength);

                // Create digest with salt.
                var digest = _teamRegistrationService.HashPassword(postInfo.Password, Constants.HashIteration, salt, KeyDerivationPrf.HMACSHA256);

                // Create Guid ClientId.
                var id = _teamRegistrationService.GenerateClientId();

                // Create Client Secret, client salt, and hash it.
                var clientSalt   = _teamRegistrationService.GenerateSalt(Constants.SaltLength);
                var clientSecret = _teamRegistrationService.GenerateClientSecret();

                var clientDigest = _teamRegistrationService.HashPassword(clientSecret, Constants.HashIteration, clientSalt, KeyDerivationPrf.HMACSHA256);

                // Save the team in storage.
                var teamCreateResult = _teamRegistrationService.CreateTeam(postInfo, id, digest, clientDigest);

                // Return response with all flags corresponding flags.
                return(new TeamRegisterResp(nameResult, passwordResult, websiteUrl, websiteValid, websiteAlive, callBackurl, callbackValid, callbackAlive, teamCreateResult, id, clientSecret));
            }
        }