Compare commits

...

3 Commits

Author SHA1 Message Date
63605e23b1 deactivate bedrock uuid resolver
All checks were successful
delpoy / build-and-deploy (push) Successful in 51s
2023-11-30 12:54:25 +01:00
1f150bae06 do not throw 500 on mojang server error 2023-11-30 00:40:14 +01:00
b75620c892 always use white text on countdown 2023-11-30 00:31:19 +01:00
3 changed files with 28 additions and 22 deletions

View File

@ -26,7 +26,7 @@
onDestroy(() => clearInterval(intervalId));
</script>
<div class="grid grid-flow-col gap-5 text-center auto-cols-max text-black dark:text-white">
<div class="grid grid-flow-col gap-5 text-center auto-cols-max text-white">
<div class="flex flex-col p-2 bg-gray-200 rounded-box bg-opacity-5 backdrop-blur-sm">
<span class="countdown font-mono text-3xl sm:text-6xl">
<span class="m-auto" style="--value:{days};" />

View File

@ -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 ApiError 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 ApiError(`mojang server error (${response.status}): ${await response.text()}`);
}
const json = await response.json();
const id: string = json['id'];
@ -24,12 +29,13 @@ export async function getBedrockUuid(username: string): Promise<string> {
const initialPageResponse = await fetch('https://cxkes.me/xbox/xuid');
const initialPageContent = await initialPageResponse.text();
const token = /name="_token"\svalue="(?<token>\w+)"/.exec(initialPageContent)?.groups?.token;
if (token === undefined) throw new Error("couldn't grab token from xuid converter website");
if (token === undefined) throw new ApiError("couldn't grab token from xuid converter website");
const cookies = initialPageResponse.headers.get('set-cookie')?.split(' ');
if (cookies === undefined)
throw new Error("couldn't get response cookies from xuid converter website");
else if (cookies.length < 11) throw new Error('xuid converter website sent unexpected cookies');
throw new ApiError("couldn't get response cookies from xuid converter website");
else if (cookies.length < 11)
throw new ApiError('xuid converter website sent unexpected cookies');
const requestBody = new URLSearchParams();
requestBody.set('_token', token);
@ -55,7 +61,7 @@ export async function getBedrockUuid(username: string): Promise<string> {
'Sec-Fetch-User': '?1',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
'Accept-Language': 'es-ES,es;q=0.8,en-US;q=0.5,en;q=0.3',
'Accept-Language': 'en-US,es;q=0.8,en-US;q=0.5,en;q=0.3',
'Content-Type': 'application/x-www-form-urlencoded'
}
});

View File

@ -1,9 +1,4 @@
import {
getBedrockUuid,
getJavaUuid,
getNoAuthUuid,
UserNotFoundError
} from '$lib/server/minecraft';
import { ApiError, getJavaUuid, getNoAuthUuid, UserNotFoundError } from '$lib/server/minecraft';
import { error, type RequestHandler } from '@sveltejs/kit';
import { User } from '$lib/server/database';
@ -27,31 +22,36 @@ 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 = null;
// 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 ApiError) {
console.error((e as Error).message);
uuid = null;
} else {
console.error((e as Error).message);
throw error(500);
}
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({