diff --git a/README.md b/README.md index 1b0b6ed..7563d10 100644 --- a/README.md +++ b/README.md @@ -260,8 +260,8 @@ Das Webhook wir so oft gesendet, bis der angegebene Webhook Endpoint eine Respon Alle Webhooks: -| Beschreibung | HTTP Header | Body | -| ------------------------------------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| Ein neuer Nutzer hat sich registriert |
x-webhook-action: signup
|
{
  // Vorname des Nutzers
  firstname: string,
  // Nachname des Nutzers
  lastname: string,
  // Geburtstag des Nutzers im YYYY-MM-DD format
  birthday: string,
  // Telefonnummer des Nutzers. `null` wenn keine angegeben wurde
  telephone: string \| null,
  // Spielername des Nutzers
  username: string,
  // Minecraft-Edition des Nutzers
  edition: 'java' \| 'bedrock'
  //UUID des Nutzers. null wenn keine UUID ermittelt werden konnte
  uuid: string \| null
}
| -| Ein neuer Report wurde erstellt |
x-webhook-action: report
|
{
  // Username des Reporters. `null` wenn der Report vom System gemacht wurde
  reporter: string \| null,
  // Username des reporteten Spielers. `null` wenn Spieler unbekannt ist
  reported: string \| null,
  // Grund des Reports
  reason: string
}
| -| Ein neuer Strike wurde erstellt |
x-webhook-action: strike
|
{
  // UUID des Spielers, der gestriked wurde
  uuid: string
}
| +| Beschreibung | HTTP Header | Body | +| ------------------------------------- | ----------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Ein neuer Nutzer hat sich registriert |
x-webhook-action: signup
|
{
  // Vorname des Nutzers
  firstname: string,
  // Nachname des Nutzers
  lastname: string,
  // Geburtstag des Nutzers im YYYY-MM-DD format
  birthday: string,
  // Telefonnummer des Nutzers. `null` wenn keine angegeben wurde
  telephone: string \| null,
  // Spielername des Nutzers
  username: string,
  // Minecraft-Edition des Nutzers
  edition: 'java' \| 'bedrock'
  //UUID des Nutzers. null wenn keine UUID ermittelt werden konnte
  uuid: string \| null,
  // IP-Adresse des Besuchers
  ip: string
}
| +| Ein neuer Report wurde erstellt |
x-webhook-action: report
|
{
  // Username des Reporters. `null` wenn der Report vom System gemacht wurde
  reporter: string \| null,
  // Username des reporteten Spielers. `null` wenn Spieler unbekannt ist
  reported: string \| null,
  // Grund des Reports
  reason: string
}
| +| Ein neuer Strike wurde erstellt |
x-webhook-action: strike
|
{
  // UUID des Spielers, der gestriked wurde
  uuid: string
}
| diff --git a/src/actions/signup.ts b/src/actions/signup.ts index e10d812..8942622 100644 --- a/src/actions/signup.ts +++ b/src/actions/signup.ts @@ -5,6 +5,17 @@ import { getJavaUuid } from '@util/minecraft.ts'; import { getSetting, SettingKey } from '@util/settings.ts'; import { sendWebhook, WebhookAction } from '@util/webhook.ts'; +function getClientIp(context: { request: Request; clientAddress: string }) { + const forwardedFor = context.request.headers.get('x-forwarded-for'); + + if (forwardedFor) { + const ip = forwardedFor.split(',')[0].trim(); + if (ip) return ip; + } + + return context.clientAddress; +} + export const signup = { signup: defineAction({ input: z.object({ @@ -20,7 +31,7 @@ export const signup = { edition: z.enum(['java', 'bedrock']), hash: z.string().nullish() }), - handler: async (input) => { + handler: async (input, context) => { // check if hash given and if so, if it's valid and nobody has already used it if (input.hash) { const directSignup = await db.getDirectSignupByHash({ hash: input.hash }); @@ -85,7 +96,8 @@ export const signup = { telephone: input.phone, username: input.username, edition: input.edition, - uuid: uuid + uuid: uuid, + ip: getClientIp(context) }); } }) diff --git a/src/util/webhook.ts b/src/util/webhook.ts index a15dcb4..ae237b9 100644 --- a/src/util/webhook.ts +++ b/src/util/webhook.ts @@ -17,6 +17,7 @@ export type WebhookActionType = { username: string; edition: 'java' | 'bedrock'; uuid: string | null; + ip: string; }; [WebhookAction.Report]: { reporter: string | null;