namespace ShareGuard.Web; public static class Api { private const string TemplateFilePath = "./wg-quick-template.txt"; public static async Task Redeem(HttpContext context) { await using var db = new Database(); var link = db.Links.FirstOrDefault(link => link.Token == context.Request.RouteValues["token"]!.ToString() && link.PeerPublicKey == null); if (link == null) { context.Response.StatusCode = StatusCodes.Status403Forbidden; await context.Response.WriteAsync("Invalid token."); return; } var form = await context.Request.ReadFormAsync(); var peerPublicKey = form["PublicKey"]; if (peerPublicKey.Count < 1) { context.Response.StatusCode = StatusCodes.Status400BadRequest; await context.Response.WriteAsync("Bad request."); return; } link.PeerPublicKey = peerPublicKey[0]; if (!File.Exists(TemplateFilePath)) { context.Response.StatusCode = StatusCodes.Status204NoContent; await context.Response.WriteAsync("Template is not set yet."); return; } db.SaveChanges(); await context.Response.WriteAsync(File.ReadAllText(TemplateFilePath).Replace("{ip}", link.IpAddress)); } }