43 lines
1.8 KiB
C#
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);
|
|
}
|
|
|
|
}
|
|
}
|