Files
SfeduSchedule/SfeduSchedule/Controllers/SfeduController.cs

43 lines
1.8 KiB
C#

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using SfeduSchedule.Services;
namespace SfeduSchedule.Controllers
{
[ApiController]
[Route("api/sfedu")]
[Authorize(AuthenticationSchemes = "OpenIdConnect")]
public class SfeduController(ModeusService modeusService) : ControllerBase
{
/// <summary>
/// Получить GUID пользователя через авторизацию Microsoft.
/// </summary>
/// <param name="redirectUri">Необязательный параметр. Если указан, произойдет редирект на указанный URI после получения GUID. ([url]/?guid=XXX)</param>
/// <returns>Строка GUID пользователя или редирект на указанный URI.</returns>
/// <response code="200">Возвращает GUID пользователя</response>
/// <response code="302">Редирект на указанный URI</response>
/// <response code="404">Пользователь не найден</response>
/// <response code="401">Неавторизованный</response>
[HttpGet]
[Route("guid")]
public async Task<IActionResult> Get([FromQuery] string? redirectUri)
{
var name = User.FindFirst("name")?.Value;
if (string.IsNullOrEmpty(name))
return StatusCode(StatusCodes.Status500InternalServerError);
var guid = await modeusService.GetGuidAsync(name);
if (string.IsNullOrEmpty(guid))
return NotFound();
if (!string.IsNullOrEmpty(redirectUri))
{
return Redirect(redirectUri + "?guid=" + guid);
}
return Ok(guid);
}
}
}