/
Kovalenko
/
TODO
Обзор
Документация
Войти
/
Kovalenko
/
TODO
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
lab4
TaskApi/Controllers/AuthController.cs
104 строки
3 KB
Kovalenko1
smth
07 мар 2026, 10:39
07 мар 2026, 10:39
9157b62
Код
Авторство
О чём код?
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using TaskApi.Dtos; using TaskApi.Messages; using TaskApi.Services; namespace TaskApi.Controllers; [ApiController] [ApiExplorerSettings(GroupName = "v1")] [Route("api/v1/auth")] public class AuthController : ControllerBase { private readonly RabbitMqClientService _clientService; public AuthController(RabbitMqClientService clientService) { _clientService = clientService; } [HttpPost("register")] [AllowAnonymous] [ProducesResponseType(typeof(AuthResponse), StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status409Conflict)] public async Task<ActionResult<AuthResponse>> Register([FromBody] AuthRequest request) { var email = ApiHelpers.NormalizeRequired(request.Email); if (email is null) { return BadRequest("Email is required."); } if (string.IsNullOrWhiteSpace(request.Password) || request.Password.Length < 6) { return BadRequest("Password must be at least 6 characters long."); } var mqRequest = RabbitMqHttpHelpers.BuildRequest( version: "v1", action: "register", payload: new RegisterData { Email = email, Username = email, Password = request.Password }); var response = await _clientService.SendRequestAsync(mqRequest); if (!string.Equals(response.Status, "ok", StringComparison.OrdinalIgnoreCase)) { return RabbitMqHttpHelpers.MapError(this, response); } if (!RabbitMqHttpHelpers.TryReadData<AuthResponseData>(response, out var authData) || authData is null) { return StatusCode(StatusCodes.Status502BadGateway, "Invalid response from MQ handler."); } return Ok(new AuthResponse { Token = authData.Token, Email = authData.Username }); } [HttpPost("login")] [AllowAnonymous] [ProducesResponseType(typeof(AuthResponse), StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] public async Task<ActionResult<AuthResponse>> Login([FromBody] AuthRequest request) { var email = ApiHelpers.NormalizeRequired(request.Email); if (email is null) { return BadRequest("Email is required."); } if (string.IsNullOrWhiteSpace(request.Password)) { return BadRequest("Password is required."); } var mqRequest = RabbitMqHttpHelpers.BuildRequest( version: "v1", action: "login", payload: new LoginData { Email = email, Username = email, Password = request.Password }); var response = await _clientService.SendRequestAsync(mqRequest); if (!string.Equals(response.Status, "ok", StringComparison.OrdinalIgnoreCase)) { return RabbitMqHttpHelpers.MapError(this, response); } if (!RabbitMqHttpHelpers.TryReadData<AuthResponseData>(response, out var authData) || authData is null) { return StatusCode(StatusCodes.Status502BadGateway, "Invalid response from MQ handler."); } return Ok(new AuthResponse { Token = authData.Token, Email = authData.Username }); } }