231 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			231 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
## API
 | 
						|
 | 
						|
> Wenn die env variable `API_SECRET` gesetzt ist, muss jede API Request den HTTP Header `Authorization: Basic <"api:<API_SECRET>" as base64>` haben.
 | 
						|
 | 
						|
<details>
 | 
						|
<summary><code>POST</code> <code>/api/feedback</code> (Erstellt Feedbackformulare)</summary>
 | 
						|
 | 
						|
##### Request Body
 | 
						|
 | 
						|
```
 | 
						|
{
 | 
						|
  // Interner Event Name (oder ID)
 | 
						|
  "event": string,
 | 
						|
  // Event Titel, wird über dem Feedbackformular angezeigt
 | 
						|
  "title": string,
 | 
						|
  // UUIDs aller Spieler, die das Feedback ausfüllen sollen
 | 
						|
  "users": string[]
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
##### Response Codes
 | 
						|
 | 
						|
| http code | beschreibung                               |
 | 
						|
| --------- | ------------------------------------------ |
 | 
						|
| 200       | /                                          |
 | 
						|
| 400       | Der Request Body ist falsch                |
 | 
						|
| 401       | Es wurde ein falsches API Secret angegeben |
 | 
						|
 | 
						|
##### Response Body
 | 
						|
 | 
						|
```
 | 
						|
{
 | 
						|
  "feedback": {
 | 
						|
    // UUID eines Spieler
 | 
						|
    "uuid": string
 | 
						|
    // URL zum Feedbackformular
 | 
						|
    "url": string
 | 
						|
  }[]
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
</details>
 | 
						|
 | 
						|
<details>
 | 
						|
<summary><code>POST</code> <code>/api/reports</code> (Erstellt einen Report)</summary>
 | 
						|
 | 
						|
##### Request Body
 | 
						|
 | 
						|
```
 | 
						|
{
 | 
						|
  // UUID des Report Erstellers
 | 
						|
  "reporter": string,
 | 
						|
  // UUID des Reporteten Spielers
 | 
						|
  "reported": string | null,
 | 
						|
  // Report Grund
 | 
						|
  "reason": string
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
##### Response Codes
 | 
						|
 | 
						|
| http code | beschreibung                                                      |
 | 
						|
| --------- | ----------------------------------------------------------------- |
 | 
						|
| 200       | /                                                                 |
 | 
						|
| 400       | Der Request Body ist falsch                                       |
 | 
						|
| 401       | Es wurde ein falsches API Secret angegeben                        |
 | 
						|
| 404       | Der Report Ersteller, oder der reportete Spieler, existiert nicht |
 | 
						|
 | 
						|
##### Response Body
 | 
						|
 | 
						|
```
 | 
						|
{
 | 
						|
  // URL, wo der Ersteller den Report abschicken kann
 | 
						|
  "url": string
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
</details>
 | 
						|
 | 
						|
<details>
 | 
						|
<summary><code>PUT</code> <code>/api/reports</code> (Erstellt einen Abgeschlossenen Report)</summary>
 | 
						|
 | 
						|
##### Request Body
 | 
						|
 | 
						|
```
 | 
						|
{
 | 
						|
  // UUID des Reporters. Wenn `null`, wird der Reporter als System interpretiert
 | 
						|
  "reporter": string | null,
 | 
						|
  // UUID des Reporteten Spielers
 | 
						|
  "reported": string,
 | 
						|
  // Report Grund
 | 
						|
  "reason": string,
 | 
						|
  // Inhalt des Reports
 | 
						|
  "body": string | null,
 | 
						|
  // Interne Notiz
 | 
						|
  "notice": string | null,
 | 
						|
  // Öffentliches Statement
 | 
						|
  "statement": string | null,
 | 
						|
  // ID des Strikegrundes
 | 
						|
  "strike_reason_id": number
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
##### Response Codes
 | 
						|
 | 
						|
| http code | beschreibung                                                      |
 | 
						|
| --------- | ----------------------------------------------------------------- |
 | 
						|
| 200       | /                                                                 |
 | 
						|
| 400       | Der Request Body ist falsch                                       |
 | 
						|
| 401       | Es wurde ein falsches API Secret angegeben                        |
 | 
						|
| 404       | Der Report Ersteller, oder der reportete Spieler, existiert nicht |
 | 
						|
 | 
						|
##### Response Body
 | 
						|
 | 
						|
`/`
 | 
						|
 | 
						|
</details>
 | 
						|
 | 
						|
<details>
 | 
						|
<summary><code>GET</code> <code>/api/users/{uuid}</code> (Status eines Spielers)</summary>
 | 
						|
 | 
						|
#### Path Parameters
 | 
						|
 | 
						|
| parameter | beschreibung        |
 | 
						|
| --------- | ------------------- |
 | 
						|
| `uuid`    | UUID eines Spielers |
 | 
						|
 | 
						|
##### Response Codes
 | 
						|
 | 
						|
| http code | beschreibung                               |
 | 
						|
| --------- | ------------------------------------------ |
 | 
						|
| 200       | /                                          |
 | 
						|
| 400       | Der Request Body ist falsch                |
 | 
						|
| 401       | Es wurde ein falsches API Secret angegeben |
 | 
						|
| 404       | Der Spieler existiert nicht                |
 | 
						|
 | 
						|
##### Response Body
 | 
						|
 | 
						|
```
 | 
						|
{
 | 
						|
  // Vorname des Spielers
 | 
						|
  firstname: string,
 | 
						|
  // Nachname des Spielers
 | 
						|
  lastname: string,
 | 
						|
  // Nutzername des Spielers
 | 
						|
  username: string,
 | 
						|
  // UUID des Spielers
 | 
						|
  uuid: string,
 | 
						|
  // Liste aller Strikes, die der Spieler hat
 | 
						|
  strikes: {
 | 
						|
    // UTC Timestamp wann der Strike erstellt wurde
 | 
						|
    "at": number,
 | 
						|
    // Strike Gewichtung
 | 
						|
    "weight": number,
 | 
						|
  }[]
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
</details>
 | 
						|
 | 
						|
<details>
 | 
						|
<summary><code>GET</code> <code>/api/users/{uuid}/reports</code> (Reports eines Spielers)</summary>
 | 
						|
 | 
						|
#### Path Parameters
 | 
						|
 | 
						|
| parameter | beschreibung        |
 | 
						|
| --------- | ------------------- |
 | 
						|
| `uuid`    | UUID eines Spielers |
 | 
						|
 | 
						|
##### Response Codes
 | 
						|
 | 
						|
| http code | beschreibung                               |
 | 
						|
| --------- | ------------------------------------------ |
 | 
						|
| 200       | /                                          |
 | 
						|
| 400       | Der Request Body ist falsch                |
 | 
						|
| 401       | Es wurde ein falsches API Secret angegeben |
 | 
						|
| 404       | Der Spieler existiert nicht                |
 | 
						|
 | 
						|
##### Response Body
 | 
						|
 | 
						|
```
 | 
						|
{
 | 
						|
  // Alle Reports, die der Spieler selber erstellt hat
 | 
						|
  "from_self": {
 | 
						|
    // Die UUID des reporteten Spielers oder null falls ein unbekannter Spieler reportet wurde
 | 
						|
    "reported": string | null,
 | 
						|
    // Grund des Reports
 | 
						|
    "reason": string,
 | 
						|
    // Wann der Report abgeschickt wurde als UTC Millisekunden oder null falls der Report noch nicht abgeschickt wurde (=> kann noch bearbeitet werden)
 | 
						|
    "created": number | null,
 | 
						|
    // Status des Reports, "open" wenn er gerade bearbeitet wird, "closed" falls er bearbeitet wurde, null wenn nichts von beidem
 | 
						|
    "status": "open" | "closed" | null,
 | 
						|
    // Url zum Report auf der Website
 | 
						|
    "url": string
 | 
						|
  }[],
 | 
						|
  // Alle Reports, die gegen den Spieler erstellt wurden
 | 
						|
  "to_self": {
 | 
						|
    // Die UUID des Spielers, der den Report erstellt hat oder null falls der Report vom System kommt
 | 
						|
    "reporter": string | null,
 | 
						|
    // Grund des Reports
 | 
						|
    "reason": string,
 | 
						|
    // Wann der Report abgeschickt wurde als UTC Millisekunden oder null falls der Report noch nicht abgeschickt wurde (=> kann noch bearbeitet werden)
 | 
						|
    "created": number | null,
 | 
						|
    // Status des Reports, "open" wenn er gerade bearbeitet wird, "closed" falls er bearbeitet wurde, null wenn nichts von beidem
 | 
						|
    "status": "open" | "closed" | null,
 | 
						|
    // Url zum Report auf der Website
 | 
						|
    "url": string
 | 
						|
  }[]
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
</details>
 | 
						|
 | 
						|
## Webhook
 | 
						|
 | 
						|
> Die env variable `WEBHOOK_ENDPOINT` muss gesetzt und eine valide HTTP URL sein.
 | 
						|
> Es können auch mehrere Endpoints gesetzt sein, dafür müssen die URLs mit einem komma getrennt sein.
 | 
						|
 | 
						|
Bei bestimmten Aktionen wird an den Webhook Endpoint ein Webhook gesendet.
 | 
						|
Die Art des Webhooks wird dabei durch den `x-webhook-action` HTTP Header angegeben und hat einen festgelegten JSON Body.
 | 
						|
 | 
						|
Das Webhook wir so oft gesendet, bis der angegebene Webhook Endpoint eine Response mit Status `200` zurücksendet.
 | 
						|
 | 
						|
Alle Webhooks:
 | 
						|
 | 
						|
| Beschreibung                          | HTTP Header                         | Body                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
 | 
						|
| ------------------------------------- | ----------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
 | 
						|
| Ein neuer Nutzer hat sich registriert | <pre>x-webhook-action: signup</pre> | <pre>{<br>  // Vorname des Nutzers<br>  firstname: string,<br>  // Nachname des Nutzers<br>  lastname: string,<br>  //Geburtstag des Nutzers im YYYY-MM-DD format<br>  birthday: string,<br>  // Telefonnummer des Nutzers. `null` wenn keine angegeben wurde<br>  telephone: string \| null,<br>  // Spielername des Nutzers<br>  username: string,<br>  // Minecraft-Edition des Nutzers<br>  edition: 'java' \| 'bedrock'<br>  //UUID des Nutzers. null wenn keine UUID ermittelt werden konnte<br>  uuid: string \| null<br>}</pre> |
 | 
						|
| Ein neuer Report wurde erstellt       | <pre>x-webhook-action: report</pre> | <pre>{<br>  // Username des Reporters. `null` wenn der Report vom System gemacht wurde<br>  reporter: string \| null,<br>  // Username des reporteten Spielers. `null` wenn Spieler unbekannt ist<br>  reported: string \| null,<br>  // Grund des Reports<br>  reason: string<br>}</pre>                                                                                                                                                                                                                                                                                                                               |
 | 
						|
| Ein neuer Strike wurde erstellt       | <pre>x-webhook-action: strike</pre> | <pre>{<br>  // UUID des Spielers, der gestriked wurde</br>  uuid: string<br>}</pre>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
 |