chat: add hello controller
This commit is contained in:
parent
6f6e19bbb5
commit
7b4cbd4fb7
12 changed files with 114 additions and 53 deletions
|
@ -1,6 +1,7 @@
|
|||
using Foxchat.Chat.Database;
|
||||
using Foxchat.Chat.Database.Models;
|
||||
using Foxchat.Core;
|
||||
using Foxchat.Core.Extensions;
|
||||
using Foxchat.Core.Federation;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
|
@ -20,7 +21,7 @@ public class AuthenticationMiddleware(ILogger logger, ChatContext db, RequestSig
|
|||
return;
|
||||
}
|
||||
|
||||
if (!ExtractRequestData(ctx, out var signature, out var domain, out var signatureData))
|
||||
if (!ctx.ExtractRequestData(out var signature, out var domain, out var signatureData))
|
||||
throw new ApiError.IncomingFederationError("This endpoint requires signed requests.");
|
||||
|
||||
var instance = await GetInstanceAsync(domain);
|
||||
|
@ -38,37 +39,6 @@ public class AuthenticationMiddleware(ILogger logger, ChatContext db, RequestSig
|
|||
return await db.IdentityInstances.FirstOrDefaultAsync(i => i.Domain == domain)
|
||||
?? throw new ApiError.IncomingFederationError("Remote instance is not known.");
|
||||
}
|
||||
|
||||
private bool ExtractRequestData(HttpContext ctx, out string signature, out string domain, out SignatureData data)
|
||||
{
|
||||
signature = string.Empty;
|
||||
domain = string.Empty;
|
||||
data = SignatureData.Empty;
|
||||
|
||||
if (!ctx.Request.Headers.TryGetValue(RequestSigningService.SIGNATURE_HEADER, out var encodedSignature))
|
||||
return false;
|
||||
if (!ctx.Request.Headers.TryGetValue(RequestSigningService.DATE_HEADER, out var date))
|
||||
return false;
|
||||
if (!ctx.Request.Headers.TryGetValue(RequestSigningService.SERVER_HEADER, out var server))
|
||||
return false;
|
||||
var time = RequestSigningService.ParseTime(date.ToString());
|
||||
string? userId = null;
|
||||
if (ctx.Request.Headers.TryGetValue(RequestSigningService.USER_HEADER, out var userIdHeader))
|
||||
userId = userIdHeader;
|
||||
var host = ctx.Request.Headers.Host.ToString();
|
||||
|
||||
signature = encodedSignature.ToString();
|
||||
domain = server.ToString();
|
||||
data = new SignatureData(
|
||||
time,
|
||||
host,
|
||||
ctx.Request.Path,
|
||||
(int?)ctx.Request.Headers.ContentLength,
|
||||
userId
|
||||
);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue