Files
Shogi/Gameboard.ShogiUI.Sockets/Controllers/SocketController.cs
2020-12-13 14:31:23 -06:00

64 lines
2.0 KiB
C#

using AspShogiSockets.Repositories.RepositoryManagers;
using AspShogiSockets.ServiceModels.Api.Messages;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Linq;
using System.Threading.Tasks;
using Websockets.Managers;
using Websockets.Repositories;
using Websockets.ServiceModels;
namespace Websockets.Controllers
{
[Authorize]
[Route("[controller]")]
[ApiController]
public class SocketController : ControllerBase
{
private readonly ISocketTokenManager tokenManager;
private readonly IGameboardRepository gameboardRepository;
private readonly IGameboardRepositoryManager gameboardManager;
public SocketController(
ISocketTokenManager tokenManager,
IGameboardRepository gameboardRepository,
IGameboardRepositoryManager gameboardManager)
{
this.tokenManager = tokenManager;
this.gameboardRepository = gameboardRepository;
this.gameboardManager = gameboardManager;
}
[Route("Token")]
public IActionResult GetToken()
{
var userName = HttpContext.User.Claims.First(c => c.Type == "preferred_username").Value;
var token = tokenManager.GenerateToken(userName);
return new JsonResult(new GetTokenResponse(token));
}
[AllowAnonymous]
[Route("GuestToken")]
public async Task<IActionResult> GetGuestToken([FromQuery] GetGuestToken request)
{
if (request.ClientId == null)
{
var clientId = await gameboardManager.CreateGuestUser();
var token = tokenManager.GenerateToken(clientId);
return new JsonResult(new GetGuestTokenResponse(clientId, token));
}
else
{
var response = await gameboardRepository.GetPlayer(request.ClientId);
if (response != null && response.Player != null)
{
var token = tokenManager.GenerateToken(response.Player.Name);
return new JsonResult(new GetGuestTokenResponse(response.Player.Name, token));
}
}
return new UnauthorizedResult();
}
}
}