aboutsummaryrefslogtreecommitdiff
path: root/ShareGuard.Web/Api.cs
blob: 990abc95c820d43efcd9080c505346ad0f692b5a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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));
    }
}