81 lines
No EOL
3.2 KiB
C#
81 lines
No EOL
3.2 KiB
C#
using Microsoft.AspNetCore.Authorization;
|
||
using Microsoft.AspNetCore.Mvc;
|
||
using SurveyBackend.Core.Contexts;
|
||
using SurveyBackend.Core.Services;
|
||
using SurveyBackend.DTOs;
|
||
using SurveyBackend.DTOs.User;
|
||
using SurveyBackend.Mappers;
|
||
using IAuthorizationService = SurveyBackend.Core.Services.IAuthorizationService;
|
||
|
||
namespace SurveyBackend.Controllers;
|
||
|
||
/// <summary>
|
||
/// Контроллер для всего связанного с авторизацией пользователей
|
||
/// </summary>
|
||
[ApiController]
|
||
[Route("api/auth")]
|
||
public class AuthController : ControllerBase
|
||
{
|
||
private readonly IAuthorizationService _authorizationService;
|
||
private readonly IUserContext _userContext;
|
||
private readonly IUserService _userService;
|
||
|
||
/// <summary>
|
||
/// Нет ну вы прикалываетесь что ли мне ща каждый контроллер описывать?
|
||
/// </summary>
|
||
/// <param name="authorizationService"></param>
|
||
public AuthController(IAuthorizationService authorizationService, IUserContext userContext,
|
||
IUserService userService)
|
||
{
|
||
_authorizationService = authorizationService;
|
||
_userContext = userContext;
|
||
_userService = userService;
|
||
}
|
||
|
||
/// <summary>
|
||
/// Авторизация
|
||
/// </summary>
|
||
/// <remarks>Принимает на вход email и password. При отсутствии такого email вернет 404, при неправильном пароле 401, при успехе 200 и валидный токен</remarks>
|
||
/// <param name="loginData"></param>
|
||
/// <response code="200">Success: Возвращает токен</response>
|
||
/// <response code="401">Unauthorized: Неправильный пароль</response>
|
||
/// <returns></returns>
|
||
[AllowAnonymous]
|
||
[HttpPost("login")]
|
||
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
|
||
[ProducesResponseType(StatusCodes.Status200OK)]
|
||
public async Task<IActionResult> LogIn([FromBody] UserLoginDto loginData)
|
||
{
|
||
var token = await _authorizationService.LogInUser(loginData.Email, loginData.Password);
|
||
return Ok(new { token = token });
|
||
}
|
||
|
||
/// <summary>
|
||
/// Регистрация
|
||
/// </summary>
|
||
/// <remarks>Принимает на вход кучу всяких полей, потом разберемся</remarks>
|
||
/// <param name="registerData"></param>
|
||
/// <returns></returns>
|
||
[AllowAnonymous]
|
||
[HttpPost("register")]
|
||
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
|
||
[ProducesResponseType(StatusCodes.Status200OK)]
|
||
public async Task<IActionResult> Register([FromBody] UserRegistrationDto registerData)
|
||
{
|
||
var token = await _authorizationService.RegisterUser(
|
||
UserMapper.UserRegistrationToModel(registerData));
|
||
return Ok(new { token = token });
|
||
}
|
||
|
||
[Authorize]
|
||
[HttpGet("me")]
|
||
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
|
||
[ProducesResponseType(StatusCodes.Status200OK)]
|
||
public async Task<IActionResult> GetMe()
|
||
{
|
||
var userId = _userContext.UserId;
|
||
var user = await _userService.GetUserById(userId);
|
||
var result = UserMapper.ModelToOutput(user);
|
||
return Ok(result);
|
||
}
|
||
} |