[backend/federation] Improve WebFinger handling

This commit is contained in:
Laura Hausmann 2024-03-11 01:32:17 +01:00
parent 95ac792ad9
commit 4bf4f369b8
No known key found for this signature in database
GPG key ID: D044E84C5BE01605

View file

@ -28,9 +28,17 @@ public class WellKnownController(IOptions<Config.InstanceSection> config, Databa
public async Task<IActionResult> WebFinger([FromQuery] string resource) public async Task<IActionResult> WebFinger([FromQuery] string resource)
{ {
User? user; User? user;
if (resource.StartsWith("acct:")) if (resource.StartsWith($"https://{config.Value.WebDomain}/users/"))
{ {
var split = resource[5..].TrimStart('@').Split('@'); var id = resource[$"https://{config.Value.WebDomain}/users/".Length..];
user = await db.Users.FirstOrDefaultAsync(p => p.Id == id && p.Host == null);
}
else
{
if (resource.StartsWith("acct:"))
resource = resource[5..];
var split = resource.TrimStart('@').Split('@');
if (split.Length > 2) return NotFound(); if (split.Length > 2) return NotFound();
if (split.Length == 2) if (split.Length == 2)
{ {
@ -41,16 +49,6 @@ public class WellKnownController(IOptions<Config.InstanceSection> config, Databa
user = await db.Users.FirstOrDefaultAsync(p => p.UsernameLower == split[0].ToLowerInvariant() && user = await db.Users.FirstOrDefaultAsync(p => p.UsernameLower == split[0].ToLowerInvariant() &&
p.Host == null); p.Host == null);
} }
else if (resource.StartsWith($"https://{config.Value.WebDomain}/users/"))
{
var id = resource[$"https://{config.Value.WebDomain}/users/".Length..];
user = await db.Users.FirstOrDefaultAsync(p => p.Id == id && p.Host == null);
}
else
{
user = await db.Users.FirstOrDefaultAsync(p => p.UsernameLower == resource.ToLowerInvariant() &&
p.Host == null);
}
if (user == null) return NotFound(); if (user == null) return NotFound();