Example #1
0
        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));
            }
        }
Example #2
0
        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);
            }
        }
Example #3
0
 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));
 }
Example #4
0
        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));
        }
Example #5
0
        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));
        }
Example #6
0
        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"
                });
            }
        }
Example #7
0
        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
            }));
        }