From a5f292cdb3bdc9d5e105aa82549c80a9724e0728 Mon Sep 17 00:00:00 2001 From: Laura Hausmann Date: Tue, 29 Oct 2024 20:38:51 +0100 Subject: [PATCH] [backend/core] Fix UserResolver regression --- .../Core/Federation/ActivityPub/UserResolver.cs | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/Iceshrimp.Backend/Core/Federation/ActivityPub/UserResolver.cs b/Iceshrimp.Backend/Core/Federation/ActivityPub/UserResolver.cs index 2a9d2ef4..b92f974d 100644 --- a/Iceshrimp.Backend/Core/Federation/ActivityPub/UserResolver.cs +++ b/Iceshrimp.Backend/Core/Federation/ActivityPub/UserResolver.cs @@ -241,14 +241,17 @@ public class UserResolver( /// The user in question. private async Task> ResolveInternalAsync(string query, ResolveFlags flags) { - if (query.StartsWith('@')) - query = "acct:" + query[1..]; - - // Before we begin, validate method parameters + // Before we begin, validate method parameters & canonicalize query if (flags == 0) throw new Exception("ResolveFlags.None is not valid for this method"); - if (query.Contains(' ') || !Uri.TryCreate(query, UriKind.Absolute, out var parsedQuery)) - return GracefulException.BadRequest("Invalid query"); + if (query.Contains(' ')) + return GracefulException.BadRequest($"Invalid query: {query}"); + if (query.StartsWith('@')) + query = $"acct:{query[1..]}"; + if (!Uri.TryCreate(query, UriKind.Absolute, out var parsedQuery)) + query = $"acct:{query}"; + if (parsedQuery == null && !Uri.TryCreate(query, UriKind.Absolute, out parsedQuery)) + return GracefulException.BadRequest($"Invalid query: {query}"); if (parsedQuery.Scheme is not "https" and not "acct") return GracefulException.BadRequest("Invalid query scheme"); if (parsedQuery.AbsolutePath.StartsWith("/notes/"))