using AsbCloudApp.Data; using AsbCloudApp.Services; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Swashbuckle.AspNetCore.Annotations; using System.Threading; using System.Threading.Tasks; namespace AsbCloudWebApi.Controllers { [Route("/auth")] [ApiController] public class AuthController : ControllerBase { private readonly IAuthService authService; public AuthController(IAuthService authService) { this.authService = authService; } /// <summary> /// Аутентификация пользователя /// </summary> /// <param name="auth"></param> /// <param name="token">Токен отмены задачи</param> /// <response code="200">новый токен</response> /// <response code="400">логин и пароль не подходят</response> [AllowAnonymous] [HttpPost("login")] [SwaggerOperation(OperationId = "login")] [ProducesResponseType(typeof(UserTokenDto), (int)System.Net.HttpStatusCode.OK)] public async Task<IActionResult> LoginAsync([FromBody] AuthDto auth, CancellationToken token = default) { var userToken = await authService.LoginAsync(auth.Login, auth.Password, token).ConfigureAwait(false); if (userToken is null) BadRequest();//"wrong login or password" return Ok(userToken); } /// <summary> /// Продление срока действия токена /// </summary> /// <returns code="200">новый токен</returns> [Authorize] [HttpGet("refresh")] public IActionResult Refresh() { var newToken = authService.Refresh(User); return Ok(newToken); } } }