/
softailor
/
gridient
Обзор
Документация
Войти
/
softailor
/
gridient
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
backend/Gridient.Infrastructure.Authentication.Local/Controllers/PasswordController.cs
89 строк
3 KB
Jenkins
Auto add
18 фев 2026, 10:19
18 фев 2026, 10:19
1e6c4f8
Код
Авторство
О чём код?
using Gridient.Core.Controllers; using Gridient.Core.Models; using Gridient.Infrastructure.Authentication.Local.Features.Password.Commands; using Gridient.Infrastructure.Authentication.Local.Features.Password.Queries; using Gridient.Infrastructure.Authentication.Local.Models; using MediatR; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; namespace Gridient.Infrastructure.Authentication.Local.Controllers { [ApiController] [Route("api/local-auth/password")] public class PasswordController(IMediator mediator) : ControllerBase { private readonly IMediator _mediator = mediator; [HttpGet("reset-token")] [Authorize] public async Task<IActionResult> RequestResetToken([FromQuery] PasswordTokenRequest request, CancellationToken cancellationToken) { var userLogin = User.Identity?.Name; if (string.IsNullOrWhiteSpace(userLogin)) return Unauthorized(); try { var query = new RequestResetTokenQuery(request.Login, userLogin); var token = await _mediator.Send(query, cancellationToken); if (token is null) return NotFound(); return Ok(token); } catch (InvalidOperationException) { return Forbid(); } catch (ArgumentException ex) { return BadRequest(ex.Message); } } [HttpPost("reset")] [AllowAnonymous] public async Task<IActionResult> ResetPassword([FromBody] UpdatePasswordRequest request, CancellationToken cancellationToken) { try { var command = new ResetPasswordCommand(request.Token, request.NewPassword); var result = await _mediator.Send(command, cancellationToken); return result switch { PasswordResetResult.Success => Ok("Пароль обновлён"), PasswordResetResult.TokenNotFound => BadRequest("Некорректный токен"), PasswordResetResult.TokenExpired => BadRequest("Срок действия токена истёк"), PasswordResetResult.UserNotFound => NotFound(), _ => BadRequest("Не удалось сменить пароль") }; } catch (ArgumentException ex) { return BadRequest(ex.Message); } } [HttpPost("change-own")] [Authorize] public async Task<IActionResult> ChangeOwnPassword([FromBody] string newPassword, CancellationToken cancellationToken) { var login = User.Identity?.Name; if (string.IsNullOrWhiteSpace(login)) return Unauthorized(); try { var command = new ChangeOwnPasswordCommand(login, newPassword); var result = await _mediator.Send(command, cancellationToken); if (!result) return NotFound(); return Ok("Пароль обновлён"); } catch (ArgumentException ex) { return BadRequest(ex.Message); } } } }