Esempio n. 1
0
        public async Task <PlayerOutVM> CreatePlayer(PlayerInVM playerIn)
        {
            using var transaction = await _transactionManager.BeginTransactionAsync();

            var existingPlayer = await _context.Players.Where(p => p.Username == playerIn.Username).AnyAsync();

            if (existingPlayer)
            {
                throw new ValidationException("Player with given name already exists");
            }
            var salt   = Guid.NewGuid().ToString();
            var player = new Player
            {
                Username       = playerIn.Username,
                HashedPassword = _passwordService.HashPassword(playerIn.Password, salt),
                Salt           = salt
            };
            await _context.AddAsync(player);

            await _context.SaveChangesAsync();

            await transaction.CommitAsync();

            return(new PlayerOutVM {
                ID = player.ID,
                Username = player.Username
            });
        }
Esempio n. 2
0
        public async Task <IActionResult> SignUp([FromBody] PlayerInVM player)
        {
            var result = await _playerService.CreatePlayer(player);

            return(Ok(new
            {
                User = result.Username,
                ID = result.ID,
                Token = _jwtService.CreateToken(result.Username, result.ID)
            }));
        }
Esempio n. 3
0
        public async Task <IActionResult> SignIn([FromBody] PlayerInVM player)
        {
            var userID = await _playerService.CheckLogin(player);

            if (userID == null)
            {
                return(BadRequest(new { error = "Wrong credentials" }));
            }
            return(Ok(new
            {
                User = player.Username,
                ID = userID.Value,
                Token = _jwtService.CreateToken(player.Username, userID.Value)
            }));
        }
Esempio n. 4
0
        public async Task <int?> CheckLogin(PlayerInVM playerIn)
        {
            using var transaction = await _transactionManager.BeginTransactionAsync();

            var userData = await _context
                           .Players
                           .FirstOrDefaultAsync(p => p.Username == playerIn.Username);

            if (userData == null)
            {
                return(null);
            }
            var hashedPassword = _passwordService.HashPassword(playerIn.Password, userData.Salt);
            await transaction.CommitAsync();

            return(hashedPassword == userData.HashedPassword ? userData.ID : (int?)null);
        }
Esempio n. 5
0
        public async Task <PlayerOutVM> CreatePlayer(PlayerInVM playerIn)
        {
            var player = await _playerService.CreatePlayer(playerIn);

            return(player);
        }