VideoStudy/VideoStudy.API/Controllers/LicenseController.cs
2026-02-09 18:31:08 -03:00

71 lines
2.3 KiB
C#

using Microsoft.AspNetCore.Mvc;
using System.Collections.Concurrent;
namespace VideoStudy.API.Controllers;
public class ActivationRequest
{
public string Email { get; set; } = string.Empty;
public string HardwareId { get; set; } = string.Empty;
}
public class LicenseStatus
{
public bool IsActive { get; set; }
public string Message { get; set; } = string.Empty;
public string Token { get; set; } = string.Empty;
}
[ApiController]
[Route("api/[controller]")]
public class LicenseController : ControllerBase
{
// In-memory simulation for Phase 4 Demo
private static readonly ConcurrentDictionary<string, List<string>> _activations = new();
[HttpPost("activate")]
public ActionResult<LicenseStatus> Activate([FromBody] ActivationRequest request)
{
if (string.IsNullOrWhiteSpace(request.Email) || string.IsNullOrWhiteSpace(request.HardwareId))
{
return BadRequest(new LicenseStatus { IsActive = false, Message = "Invalid request" });
}
// Simulate database lookup
if (!_activations.ContainsKey(request.Email))
{
_activations[request.Email] = new List<string>();
}
var userDevices = _activations[request.Email];
// Check if device already active
if (userDevices.Contains(request.HardwareId))
{
return Ok(new LicenseStatus { IsActive = true, Message = "Device already activated", Token = GenerateMockToken(request) });
}
// Limit to 3 devices
if (userDevices.Count >= 3)
{
return StatusCode(403, new LicenseStatus { IsActive = false, Message = "Activation limit reached (Max 3 devices)" });
}
// Activate
userDevices.Add(request.HardwareId);
return Ok(new LicenseStatus { IsActive = true, Message = "Activation successful", Token = GenerateMockToken(request) });
}
[HttpPost("validate")]
public ActionResult<bool> Validate([FromBody] string token)
{
// Mock validation
return Ok(!string.IsNullOrEmpty(token) && token.StartsWith("MOCK_JWT_"));
}
private string GenerateMockToken(ActivationRequest req)
{
return $"MOCK_JWT_{Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(req.Email + req.HardwareId))}";
}
}