do not throw 500 on mojang server error
This commit is contained in:
parent
b75620c892
commit
1f150bae06
@ -1,17 +1,22 @@
|
||||
import { createHash } from 'node:crypto';
|
||||
|
||||
export class UserNotFoundError extends Error {
|
||||
readonly username: string;
|
||||
|
||||
constructor(username: string) {
|
||||
super(`Ein Spieler mit dem Namen '${username}' konnte nicht gefunden werden`);
|
||||
super(`couldn't find a player with the username '${username}'`);
|
||||
this.username = username;
|
||||
}
|
||||
}
|
||||
|
||||
export class MojangError extends Error {}
|
||||
|
||||
export async function getJavaUuid(username: string): Promise<string> {
|
||||
const response = await fetch(`https://api.mojang.com/users/profiles/minecraft/${username}`);
|
||||
if (!response.ok) {
|
||||
throw response.status < 500
|
||||
? new UserNotFoundError(username)
|
||||
: new Error(`mojang server error (${response.status}): ${await response.text()}`);
|
||||
: new MojangError(`mojang server error (${response.status}): ${await response.text()}`);
|
||||
}
|
||||
const json = await response.json();
|
||||
const id: string = json['id'];
|
||||
|
@ -2,6 +2,7 @@ import {
|
||||
getBedrockUuid,
|
||||
getJavaUuid,
|
||||
getNoAuthUuid,
|
||||
MojangError,
|
||||
UserNotFoundError
|
||||
} from '$lib/server/minecraft';
|
||||
import { error, type RequestHandler } from '@sveltejs/kit';
|
||||
@ -27,31 +28,35 @@ export const POST = (async ({ request }) => {
|
||||
throw error(400, 'Ungültige Parameter');
|
||||
}
|
||||
|
||||
let uuid: string;
|
||||
let uuid: string | null;
|
||||
try {
|
||||
// available playertypes are 'java', 'bedrock' and 'noauth'
|
||||
switch (data.get('playertype')) {
|
||||
case 'java':
|
||||
uuid = await getJavaUuid(data.get('username') as string);
|
||||
uuid = await getJavaUuid(username);
|
||||
break;
|
||||
case 'bedrock':
|
||||
uuid = await getBedrockUuid(data.get('username') as string);
|
||||
uuid = await getBedrockUuid(username);
|
||||
break;
|
||||
case 'noauth':
|
||||
uuid = getNoAuthUuid(data.get('username') as string);
|
||||
uuid = getNoAuthUuid(username);
|
||||
break;
|
||||
default:
|
||||
throw new Error(`invalid player type (${data.get('playertype')})`);
|
||||
throw new Error(`invalid player type (${playertype})`);
|
||||
}
|
||||
} catch (e) {
|
||||
if (e instanceof UserNotFoundError) {
|
||||
throw error(400, e.message);
|
||||
}
|
||||
throw error(400, `Ein Spieler mit dem Namen '${username}' konnte nicht gefunden werden`);
|
||||
} else if (e instanceof MojangError) {
|
||||
console.error((e as Error).message);
|
||||
uuid = null;
|
||||
} else {
|
||||
console.error((e as Error).message);
|
||||
throw error(500);
|
||||
}
|
||||
}
|
||||
|
||||
if (await User.findOne({ where: { uuid: uuid } })) {
|
||||
if (uuid && (await User.findOne({ where: { uuid: uuid } }))) {
|
||||
throw error(400, 'Dieser Spieler wurde bereits registriert');
|
||||
} else if (
|
||||
await User.findOne({
|
||||
|
Loading…
x
Reference in New Issue
Block a user