Files
Radicade/Server/Players/LinkAPI.cs
T
2026-10-16 23:33:13 -07:00

77 lines
2.2 KiB
C#

using System.Text.Json;
using Microsoft.AspNetCore.Mvc;
namespace RadicadeServer.API.Link;
[Route("link")]
public class LinkAPI : Controller
{
[HttpGet("actionlink/{code}")]
public IActionResult ConsumeActionLink(string code)
{
if (string.Equals(code?.Trim(), "COACH", StringComparison.OrdinalIgnoreCase))
return Ok(new { Success = true, Code = "COACH", InfluencerAccountId = 1L });
return Ok(new { Success = false, Code = code?.Trim() ?? string.Empty, InfluencerAccountId = 0L });
}
private static readonly HashSet<string> KnownDeepLinks = new(StringComparer.OrdinalIgnoreCase)
{
"recroom://testlink",
"recroom://solus",
"recroom://winterwonderland",
"recroom://reccenter",
"recroom://testforcat"
};
[HttpPost("actionlink")]
public async Task<ActionResult<int>> CheckActionLink()
{
string? linkId = null;
using (var reader = new StreamReader(Request.Body))
{
var body = await reader.ReadToEndAsync();
if (!string.IsNullOrWhiteSpace(body))
{
try
{
using var doc = JsonDocument.Parse(body);
if (doc.RootElement.ValueKind == JsonValueKind.Object)
{
foreach (var prop in doc.RootElement.EnumerateObject())
{
if (prop.Value.ValueKind == JsonValueKind.String &&
(prop.Name.Equals("shortLinkId", StringComparison.OrdinalIgnoreCase) ||
prop.Name.Equals("code", StringComparison.OrdinalIgnoreCase) ||
prop.Name.Equals("link", StringComparison.OrdinalIgnoreCase) ||
prop.Name.Equals("deepLink", StringComparison.OrdinalIgnoreCase) ||
prop.Name.Equals("fullLink", StringComparison.OrdinalIgnoreCase) ||
prop.Name.Equals("roomId", StringComparison.OrdinalIgnoreCase)))
{
linkId = prop.Value.GetString();
break;
}
}
}
}
catch (JsonException)
{
}
}
}
if (linkId == null && Request.HasFormContentType)
linkId = Request.Form["shortLinkId"].ToString();
if (!string.IsNullOrWhiteSpace(linkId))
{
var normalized = linkId.Trim();
if (!normalized.StartsWith("recroom://", StringComparison.OrdinalIgnoreCase))
normalized = $"recroom://{normalized}";
if (KnownDeepLinks.Contains(normalized))
return Ok(0);
}
return Ok(0);
}
}