104 lines
3.1 KiB
TypeScript
104 lines
3.1 KiB
TypeScript
import { ApiError, getJavaUuid, getNoAuthUuid, UserNotFoundError } from '$lib/server/minecraft';
|
|
import { error, type RequestHandler } from '@sveltejs/kit';
|
|
import { Settings, User } from '$lib/server/database';
|
|
|
|
export const POST = (async ({ request }) => {
|
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
// @ts-expect-error
|
|
if ((await Settings.findOne({ where: { key: 'register.enabled' } }))?.value === false) {
|
|
throw error(400, 'Anmeldung geschlossen');
|
|
}
|
|
|
|
const data = await request.formData();
|
|
const firstname = data.get('firstname') as string | null;
|
|
const lastname = data.get('lastname') as string | null;
|
|
const birthday: number = Date.parse(data.get('birthday') as string);
|
|
const telephone = data.get('telephone') as string | null;
|
|
const username = data.get('username') as string | null;
|
|
const playertype = data.get('playertype') as string | null;
|
|
const password = data.get('password') as string | null;
|
|
|
|
if (
|
|
firstname == null ||
|
|
lastname == null ||
|
|
Number.isNaN(birthday) ||
|
|
username == null ||
|
|
playertype == null
|
|
) {
|
|
throw error(400, 'Ungültige Parameter');
|
|
}
|
|
|
|
let uuid: string | null;
|
|
try {
|
|
// available playertypes are 'java', 'bedrock' and 'noauth'
|
|
switch (data.get('playertype')) {
|
|
case 'java':
|
|
uuid = await getJavaUuid(username);
|
|
break;
|
|
case 'bedrock':
|
|
uuid = null;
|
|
// uuid = await getBedrockUuid(username);
|
|
break;
|
|
case 'noauth':
|
|
uuid = getNoAuthUuid(username);
|
|
break;
|
|
default:
|
|
throw new Error(`invalid player type (${playertype})`);
|
|
}
|
|
} catch (e) {
|
|
if (e instanceof UserNotFoundError) {
|
|
throw error(
|
|
400,
|
|
"Der Spielername '" +
|
|
username +
|
|
"' existiert nicht. Hast Du Deinen Spielernamen korrekt geschrieben " +
|
|
'und besitzt Du einen Minecraft-Account?\n\nKontaktiere bitte einen Admin, falls Du Dich trotz korrekter ' +
|
|
'Angabe nicht registrieren kannst.'
|
|
);
|
|
} else if (e instanceof ApiError) {
|
|
console.error((e as Error).message);
|
|
uuid = null;
|
|
} else {
|
|
console.error((e as Error).message);
|
|
throw error(500);
|
|
}
|
|
}
|
|
|
|
if (uuid && (await User.findOne({ where: { uuid: uuid } }))) {
|
|
throw error(
|
|
400,
|
|
'Dein Minecraft-Account wurde bereits registriert.\n\nKontaktiere bitte einen Admin, falls diese ' +
|
|
'Informationen für Dich fehlerhaft erscheinen oder Du Angaben Deiner bestehenden Registrierung verändern ' +
|
|
'möchtest.'
|
|
);
|
|
} else if (
|
|
await User.findOne({
|
|
where: {
|
|
firstname: firstname,
|
|
lastname: lastname,
|
|
birthday: new Date(birthday).toUTCString()
|
|
}
|
|
})
|
|
) {
|
|
throw error(
|
|
400,
|
|
'In Deinem Namen wurde bereits ein Minecraft-Account registriert. Es ist nur ein Account pro Spieler ' +
|
|
'erlaubt.\n\nKontaktiere bitte einen Admin, falls diese Informationen für Dich fehlerhaft erscheinen oder ' +
|
|
'Du Angaben Deiner bestehenden Registrierung verändern möchtest.'
|
|
);
|
|
}
|
|
|
|
await User.create({
|
|
firstname: firstname,
|
|
lastname: lastname,
|
|
birthday: new Date(birthday).toUTCString(),
|
|
telephone: telephone,
|
|
username: username,
|
|
playertype: playertype,
|
|
password: password,
|
|
uuid: uuid
|
|
});
|
|
|
|
return new Response();
|
|
}) satisfies RequestHandler;
|