Добавьте файлы проекта.
This commit is contained in:
57
PlaylistShared.Api/Controllers/YandexTokenController.cs
Normal file
57
PlaylistShared.Api/Controllers/YandexTokenController.cs
Normal file
@@ -0,0 +1,57 @@
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using PlaylistShared.Api.Entities;
|
||||
using PlaylistShared.Api.Extensions;
|
||||
using PlaylistShared.Api.Services;
|
||||
using PlaylistShared.Shared.DTO;
|
||||
|
||||
namespace PlaylistShared.Api.Controllers;
|
||||
|
||||
[ApiController]
|
||||
[Route("api/[controller]")]
|
||||
[Authorize]
|
||||
public class YandexTokenController : ControllerBase
|
||||
{
|
||||
private readonly UserManager<ApplicationUser> _userManager;
|
||||
private readonly YandexMusicService _yandexService;
|
||||
|
||||
public YandexTokenController(UserManager<ApplicationUser> userManager, YandexMusicService yandexService)
|
||||
{
|
||||
_userManager = userManager;
|
||||
_yandexService = yandexService;
|
||||
}
|
||||
|
||||
[HttpPost("set")]
|
||||
public async Task<ActionResult<ApiResponse<object>>> SetToken([FromBody] SetYandexTokenRequest request)
|
||||
{
|
||||
var userId = User.GetUserId();
|
||||
var user = await _userManager.FindByIdAsync(userId.ToString());
|
||||
if (user == null) return Unauthorized();
|
||||
|
||||
user.YandexAccessToken = _yandexService.EncryptToken(request.Token);
|
||||
// Не храним refresh-токен, так как пользователь вводит только access-токен
|
||||
user.YandexTokenExpiryUtc = DateTime.UtcNow.AddMonths(1); // условно, т.к. срок жизни токена неизвестен
|
||||
await _userManager.UpdateAsync(user);
|
||||
|
||||
return Ok(ApiResponse<object>.Ok(new { message = "Токен сохранён" }));
|
||||
}
|
||||
|
||||
[HttpGet("status")]
|
||||
public async Task<ActionResult<ApiResponse<YandexTokenStatus>>> GetStatus()
|
||||
{
|
||||
var userId = User.GetUserId();
|
||||
var user = await _userManager.FindByIdAsync(userId.ToString());
|
||||
if (user == null) return Unauthorized();
|
||||
|
||||
var hasToken = !string.IsNullOrEmpty(user.YandexAccessToken);
|
||||
var isValid = hasToken && user.YandexTokenExpiryUtc > DateTime.UtcNow;
|
||||
|
||||
return Ok(ApiResponse<YandexTokenStatus>.Ok(new YandexTokenStatus
|
||||
{
|
||||
HasToken = hasToken,
|
||||
IsValid = isValid,
|
||||
ExpiryUtc = user.YandexTokenExpiryUtc
|
||||
}));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user