diff --git a/src/lib/server/minecraft.ts b/src/lib/server/minecraft.ts index 366c584..92c9eed 100644 --- a/src/lib/server/minecraft.ts +++ b/src/lib/server/minecraft.ts @@ -9,11 +9,16 @@ export class UserNotFoundError extends Error { } } +export class RateLimitError extends Error {} + export class ApiError extends Error {} export async function getJavaUuid(username: string): Promise { const response = await fetch(`https://api.mojang.com/users/profiles/minecraft/${username}`); if (!response.ok) { + if (response.status == 429) { + throw new RateLimitError(); + } throw response.status < 500 ? new UserNotFoundError(username) : new ApiError(`mojang server error (${response.status}): ${await response.text()}`); diff --git a/src/routes/admin/users/+server.ts b/src/routes/admin/users/+server.ts index 6db115f..e190a48 100644 --- a/src/routes/admin/users/+server.ts +++ b/src/routes/admin/users/+server.ts @@ -3,7 +3,7 @@ import { Permissions } from '$lib/permissions'; import { error, type RequestHandler } from '@sveltejs/kit'; import { User } from '$lib/server/database'; import { type Attributes, Op } from 'sequelize'; -import { ApiError, getJavaUuid, getNoAuthUuid, UserNotFoundError } from '$lib/server/minecraft'; +import { ApiError, getJavaUuid, getNoAuthUuid, RateLimitError, UserNotFoundError } from '$lib/server/minecraft'; import { UserAddSchema, UserDeleteSchema, UserEditSchema, UserListSchema } from './schema'; export const POST = (async ({ request, cookies }) => { @@ -117,6 +117,9 @@ export const PUT = (async ({ request, cookies }) => { } else if (e instanceof ApiError) { console.error((e as Error).message); uuid = null; + } else if (e instanceof RateLimitError) { + console.error(`uuid request rate limited for user '${data.username}'`); + uuid = null; } else { console.error((e as Error).message); throw error(500); diff --git a/src/routes/register/+server.ts b/src/routes/register/+server.ts index 631f388..7888a46 100644 --- a/src/routes/register/+server.ts +++ b/src/routes/register/+server.ts @@ -1,4 +1,10 @@ -import { ApiError, getJavaUuid, getNoAuthUuid, UserNotFoundError } from '$lib/server/minecraft'; +import { + ApiError, + getJavaUuid, + getNoAuthUuid, + RateLimitError, + UserNotFoundError +} from '$lib/server/minecraft'; import { error, type RequestHandler } from '@sveltejs/kit'; import { Settings, User } from '$lib/server/database'; import { RegisterSchema } from './schema'; @@ -44,6 +50,9 @@ export const POST = (async ({ request }) => { } else if (e instanceof ApiError) { console.error((e as Error).message); uuid = null; + } else if (e instanceof RateLimitError) { + console.error(`uuid request rate limited for user '${data.username}'`); + uuid = null; } else { console.error((e as Error).message); throw error(500);