From fa0d48b88d7e62610cbe29c2a7b549057519dab5 Mon Sep 17 00:00:00 2001 From: Jesse Wierzbinski Date: Fri, 22 Nov 2024 16:53:36 +0100 Subject: [PATCH] fix(api): :bug: Use consistent user address matching patterns --- api/api/v1/accounts/lookup/index.ts | 28 ++---------------------- api/api/v1/accounts/search/index.ts | 33 ++--------------------------- 2 files changed, 4 insertions(+), 57 deletions(-) diff --git a/api/api/v1/accounts/lookup/index.ts b/api/api/v1/accounts/lookup/index.ts index cc2b047d..63507810 100644 --- a/api/api/v1/accounts/lookup/index.ts +++ b/api/api/v1/accounts/lookup/index.ts @@ -1,19 +1,8 @@ -import { apiRoute, applyConfig, auth } from "@/api"; +import { apiRoute, applyConfig, auth, userAddressValidator } from "@/api"; import { createRoute } from "@hono/zod-openapi"; import { User } from "@versia/kit/db"; import { RolePermissions, Users } from "@versia/kit/tables"; import { eq } from "drizzle-orm"; -import { - anyOf, - charIn, - createRegExp, - digit, - exactly, - global, - letter, - maybe, - oneOrMore, -} from "magic-regexp"; import { z } from "zod"; import { ErrorSchema } from "~/types/api"; @@ -73,20 +62,7 @@ export default apiRoute((app) => const { user } = context.get("auth"); // Check if acct is matching format username@domain.com or @username@domain.com - const accountMatches = acct?.trim().match( - createRegExp( - maybe("@"), - oneOrMore( - anyOf(letter.lowercase, digit, charIn("-")), - ).groupedAs("username"), - exactly("@"), - oneOrMore(anyOf(letter, digit, charIn("_-.:"))).groupedAs( - "domain", - ), - - [global], - ), - ); + const accountMatches = acct?.trim().match(userAddressValidator); if (accountMatches) { // Remove leading @ if it exists diff --git a/api/api/v1/accounts/search/index.ts b/api/api/v1/accounts/search/index.ts index 6d6cd119..e69ef7fe 100644 --- a/api/api/v1/accounts/search/index.ts +++ b/api/api/v1/accounts/search/index.ts @@ -1,19 +1,8 @@ -import { apiRoute, applyConfig, auth } from "@/api"; +import { apiRoute, applyConfig, auth, userAddressValidator } from "@/api"; import { createRoute } from "@hono/zod-openapi"; import { User } from "@versia/kit/db"; import { RolePermissions, Users } from "@versia/kit/tables"; import { eq, ilike, not, or, sql } from "drizzle-orm"; -import { - anyOf, - charIn, - createRegExp, - digit, - exactly, - global, - letter, - maybe, - oneOrMore, -} from "magic-regexp"; import stringComparison from "string-comparison"; import { z } from "zod"; import { ErrorSchema } from "~/types/api"; @@ -35,25 +24,7 @@ export const meta = applyConfig({ export const schemas = { query: z.object({ - q: z - .string() - .min(1) - .max(512) - .regex( - createRegExp( - maybe("@"), - oneOrMore( - anyOf(letter.lowercase, digit, charIn("-")), - ).groupedAs("username"), - maybe( - exactly("@"), - oneOrMore( - anyOf(letter, digit, charIn("_-.:")), - ).groupedAs("domain"), - ), - [global], - ), - ), + q: z.string().min(1).max(512).regex(userAddressValidator), limit: z.coerce.number().int().min(1).max(80).default(40), offset: z.coerce.number().int().optional(), resolve: z