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 }); }
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) })); }
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) })); }
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); }
public async Task <PlayerOutVM> CreatePlayer(PlayerInVM playerIn) { var player = await _playerService.CreatePlayer(playerIn); return(player); }