public ActionResult Join([Bind(Include = "GameID")] RefreshDTO dto) { var name = User.Identity.Name; int id = dto.GameID; Room currentRoom = _roomsManager.GetRoomById(id); if (currentRoom == null) { return(new HttpStatusCodeResult(HttpStatusCode.NotFound)); } currentRoom.MarkUserAsActive(new User() { Name = name }); var currentGame = currentRoom.Game; lock (currentGame) { GameVM vm = GameVM.From(currentGame, currentRoom.Owner.Name); _roomsManager.AddUserToRoom(new User() { Name = name }, id); currentRoom.TryStartGame(); return(Refresh(dto)); } }
public ActionResult Refresh([Bind(Include = "GameID")] RefreshDTO dto) { var name = User.Identity.Name; int id = dto.GameID; Room currentRoom = _roomsManager.GetRoomById(id); if (currentRoom == null) { return(new HttpStatusCodeResult(HttpStatusCode.NotFound)); } currentRoom.MarkUserAsActive(new User() { Name = name }); var currentGame = currentRoom.Game; lock (currentGame) { GameVM vm = GameVM.From(currentGame, currentRoom.Owner.Name); if (currentGame.CurrentPlayer != null) { vm.IsPlayerTurn = currentGame.CurrentPlayer.Name == name; } JsonResult result = new JsonResult { Data = JsonConvert.SerializeObject(vm) }; return(result); } }
public ActionResult Quit([Bind(Include = "GameID")] RefreshDTO dto) { if (_roomsManager.RemoveUserFromRoom(new User() { Name = User.Identity.Name }, dto.GameID)) { var currentRoom = _roomsManager.GetRoomById(dto.GameID); currentRoom.RestartGame(); } return(Refresh(dto)); }
public async Task <IActionResult> Renovar(RefreshDTO refreshDTO) { // Recupera o token, o refreshtoken e as claims var token = refreshDTO.AccessToken; var refresh = refreshDTO.RefreshToken; var principal = _geradorDeToken.ObterClaimPrincipal(token); // Recupera o ID do usuário... if (!int.TryParse(principal.Identity.Name, out var idUsuario)) { return(BadRequest("Token inválido")); } // ... e busca do banco de dados var usuario = await _context.Usuarios.FindAsync(idUsuario); // Determina que tudo está ok com o refresh token informado if (usuario == null || usuario.RefreshToken != refresh || usuario.DataExpiracao < DateTime.Now) { return(BadRequest("É necessário realizar uma nova autenticação")); } // Gera novos tokens token = _geradorDeToken.GerarToken(principal.Claims); refresh = _geradorDeToken.GerarRefreshToken(); // Atualiza a tabela de usuários com o novo refresh token + data de expiração await AtualizarUsuario( usuario, refresh, DateTime.Now.AddDays(_config.DaysToRefresh) ); // Determina data de criação e expiração do token e ... var dataCriacao = DateTime.Now; var dataExpiracao = dataCriacao.AddMinutes(_config.MinutesToExpire); // ... retorna o um novo DTO atualizado com tudo OK var resultado = GerarTokenDTO( token, refresh, dataCriacao, dataExpiracao); return(Ok(resultado)); }
public ActionResult Restart([Bind(Include = "GameID")] RefreshDTO dto) { Room currentRoom = _roomsManager.GetRoomById(dto.GameID); var name = User.Identity.Name; if (!currentRoom.IsUserPlayingInRoom(new User() { Name = name })) { return(HttpNotFound()); } if (currentRoom.Game.GameState == Game.State.Game) { return(HttpNotFound()); } currentRoom.RestartGame(); return(Refresh(dto)); }
public async Task <GenericResponseDTO <AccessKeysDTO> > Refresh(RefreshDTO refreshData) { try { // Find the user attached to the token var curToken = await database.RefreshTokens .Include(x => x.User) .Where(x => x.Token == refreshData.RefreshToken && x.User.Email == refreshData.Email) .FirstOrDefaultAsync(); // If the token was not found return an error if (curToken == null) { return(new GenericResponseDTO <AccessKeysDTO>() { Success = false, Message = "Invaid Token" }); } // Generate a new JWT token var curUser = curToken.User; var jwtToken = authHelper.GenerateJSONWebToken(curUser, configuration); return(new GenericResponseDTO <AccessKeysDTO>() { Success = true, Data = new AccessKeysDTO() { AccessToken = jwtToken, RefreshToken = curToken.Token } }); } catch { return(new GenericResponseDTO <AccessKeysDTO>() { Success = false, Message = "An unknown error has occurred" }); } }
public async Task <IActionResult> Refresh([FromBody] RefreshDTO refreshDTO) { var principal = _tokenHelper.GetPrincipalFromExpiredToken(refreshDTO.AccessToken); var username = principal.Identity.Name; var user = await _userManager.FindByEmailAsync(username); if (user.RefreshToken != refreshDTO.RefreshToken) { return(BadRequest("Bad refreshToken")); } var newJwtToken = await _tokenHelper.CreateAccessToken(user); return(Ok(new { Token = newJwtToken })); }