Zum Hauptinhalt springen

StaffAuth

Staff-Konten werden beim Beitritt eingefroren, bis sie sich mit einem BCrypt-gehashten Passwort anmelden.

Privatv0.0.2Hilfsmittel
BenötigtTypeWriter0.9.0-beta-177 (BTC build)GUIPermissionsoptional

Für das BornToCraft-Netzwerk entwickelt. Diese Erweiterung ist zu Referenzzwecken dokumentiert und wird nicht verteilt.

Überblick​

StaffAuth schützt Staff-Konten. Wenn ein Spieler beitritt und die Staff-Berechtigung hat (standardmäßig security.admin), wird er eingefroren, bis er sich authentifiziert: Er kann sich nicht bewegen, nicht interagieren, keine Blöcke abbauen oder platzieren, keine Inventare öffnen, nicht chatten, nicht kämpfen und keine anderen Befehle als /staffauth verwenden. Ein Staff-Mitglied ohne Passwort registriert beim ersten Beitritt eines; danach meldet es sich damit an.

Passwörter werden nie als Befehlsargumente gesendet oder im Chat getippt. Sie werden in einem Paper-Dialog-Eingabefeld oder in einem optionalen Zahlenblock-Menü eingegeben und nur als BCrypt-Hashes in einem TypeWriter-Artifact gespeichert. Fehlversuche werden mit einem wachsenden Cooldown ratenbegrenzt und können den Spieler kicken.

Alle werden beim Beitritt etwa einen Tick lang stillschweigend festgehalten, während ihre Berechtigungen geladen werden, damit ein langsames Berechtigungs-Backend Staff nie ungeprüft hereinlässt. Spieler, die kein Staff sind, werden danach freigegeben; werden die Berechtigungen nicht innerhalb von 10 Sekunden festgestellt, wird der Spieler mit einer Erklärung gekickt.

Funktionen​

  • Beitritts-Freeze — nicht authentifiziertes Staff kann sich nicht bewegen, nicht interagieren, nicht bauen, nicht fallen lassen, nicht aufheben, nicht verbrauchen, nicht angeln, keinen Schaden nehmen oder verursachen, nicht chatten und keine Befehle ausführen.
  • Registrieren und Anmelden — Staff, das zum ersten Mal beitritt, registriert sich durch zweimaliges Eingeben eines Passworts; andere melden sich an.
  • Gehashte Speicherung — nur BCrypt-Hashes werden gespeichert, mit konfigurierbarem Kostenfaktor.
  • Versuchslimits — ein Cooldown, der sich nach jedem Fehlschlag verdoppelt (bis zu 60 Sekunden), und ein Kick nach maxAttempts Fehlschlägen.
  • Sitzungs-Timeout — schicke optional authentifiziertes Staff nach einer Anzahl von Minuten zurück zur Anmeldung.
  • Dialog oder Zahlenblock — standardmäßig ein Paper-Dialog-Eingabefeld, plus ein optionales Zifferblock-Menü, das aus einem GUI-Layout gebaut wird.
  • Admin-Werkzeuge — ein gespeichertes Passwort zurücksetzen oder eine Abmeldung erzwingen.
  • Optionale Permissions-Erweiterung — wartet, bis die Berechtigungen geladen sind, bevor entschieden wird, wer Staff ist.

Installation​

  1. Installiere die GUI-Erweiterung: Der Anmeldedialog und das Zahlenblock-Menü werden darüber geöffnet. Ohne sie antwortet /staffauth, dass die Oberfläche nicht verfügbar ist.
  2. Installiere optional die BTC-Permissions-Erweiterung, wenn deine Server Berechtigungen aus einer Datenbank laden; StaffAuth erkennt sie automatisch.
  3. Lege die StaffAuth-JAR in plugins/Typewriter/extensions/ ab und starte den Server neu.
  4. Vergib die Staff-Berechtigung (security.admin) an die Konten, die sich authentifizieren müssen.

Erste Schritte​

  1. Öffne im TypeWriter-Web-Panel eine Static-Seite und füge ein Staff Auth Passwords-Artifact hinzu. Ändere seine artifactId danach nie, sonst gehen die gespeicherten Passwörter verloren.
  2. Füge auf derselben Seite einen Staff Auth Config-Entry hinzu. Prüfe staffPermission, adminPermission, maxAttempts, minPasswordLength, bcryptCost und die Nachrichten.
  3. Veröffentliche. StaffAuth benötigt beide Entries: Ohne die Config tut es nichts, und ohne das Artifact wird Staff hereingelassen (ein Fehler wird protokolliert).
  4. Tritt mit einem Testkonto bei, das die Staff-Berechtigung hat. Du wirst eingefroren und zur Registrierung aufgefordert: Tippe ein Passwort in den Dialog und bestätige es dann.
  5. Verbinde dich neu: Der Dialog fragt nun nach dem Passwort.
  6. Optional: Füge eine Staff Auth Menu-Action hinzu, um den Zahlenblock zu nutzen. Siehe unten.
Ein Artifact, eine Config

StaffAuth verwendet die erste gefundene Staff Auth Config und das erste gefundene Staff Auth Passwords-Artifact. Erstelle nicht mehrere.

So funktioniert es​

Die Authentifizierung dauert, bis der Spieler den Server verlässt (der Zustand wird nur im Speicher gehalten) oder der optionale Sitzungs-Timeout abläuft. Solange er eingeschränkt ist, ist der einzige erlaubte Befehl /staffauth (und /sa, das nur von der Sperre ausgenommen ist; es ist nicht als Alias registriert).

Menüs​

Beitreten, /staffauth, login und register öffnen einen Paper-Dialog mit einem Texteingabefeld. Bei der Registrierung wird der Dialog ein zweites Mal angezeigt, um das Passwort zu bestätigen. Der Aufforderungstext stammt aus guiLoginPrompt, der Titel aus guiTitle.

Die Action Staff Auth Menu öffnet stattdessen einen Inventar-Zahlenblock (nur Ziffern). Löse sie aus einer Action-Kette aus, wenn du diese Optik bevorzugst. Gib den Items in ihrem layoutPool einen Button-Typ, um sie zu Tasten zu machen:

Button-TypFunktion
DIGIT_0 bis DIGIT_9Fügt dem Passwort eine Ziffer hinzu.
PASSWORD_DISPLAYZeigt pro eingegebener Ziffer einen Punkt.
LOGIN / REGISTERSendet das Passwort ab; die Beschriftung ist Register, wenn der Spieler noch kein Passwort hat.
BACKSPACEEntfernt die letzte Ziffer.
CANCELLöscht die Eingabe und schließt das Menü.

Der Zahlenblock kann nur Ziffern eingeben, und das Passwort muss weiterhin minPasswordLength einhalten. useGuiWhenAvailable steuert, ob beim Beitritt automatisch ein Dialog geöffnet wird.

Konfiguration​

Alles wird in den Entries festgelegt. Verwende in Nachrichtenfeldern {attempts}, {max} und {length} als Platzhalter (geschweifte Klammern, keine MiniMessage-Tags): {attempts} und {max} in wrongPasswordMessage, {attempts} in maxAttemptsKickMessage, {length} (das Minimum) und {max} in passwordTooShortMessage.

Passwörter liegen in der durch artifactId gewählten Artifact-Datei, als JSON-Zuordnung von Spieler-UUID zu BCrypt-Hash. Das Artifact wird 5 Sekunden lang zwischengespeichert.

Befehle​

Der Befehlsname stammt aus dem Feld commandName der Config (Standard staffauth). Für den Basisbefehl ist keine Berechtigung registriert: Jeder kann ihn ausführen, aber er wirkt nur bei Staff. Admin-Unterbefehle benötigen die in adminPermission gesetzte Berechtigung.

BefehlBeschreibung
/staffauthÖffnet den Anmelde- oder Registrierungsdialog.
/staffauth open, login, registerWie oben.
/staffauth logoutBeendet deine Authentifizierung und zeigt den Dialog erneut an.
/staffauth statusZeigt deinen Zustand, ob du die Staff-Berechtigung hast und ob die GUI verfügbar ist.
/staffauth reset <player>Löscht das gespeicherte Passwort eines Spielers (Name oder UUID), der sich erneut registrieren muss. Erfordert adminPermission.
/staffauth force-logout <player>Meldet einen Online-Spieler ab und zeigt ihm den Dialog. Erfordert adminPermission.

Berechtigungen​

Die Berechtigungen sind konfigurierbare Felder, keine festen Nodes.

BerechtigungErlaubt
security.admin (staffPermission)Markiert einen Spieler als Staff: Er muss sich authentifizieren.
security.staffauth.admin (adminPermission)/staffauth reset und /staffauth force-logout.

Entries​

3 Einträge, aus dem Quellcode der Erweiterung generiert.

Aktionen1
Befehle1
Artefakte1

Fehlerbehebung​

Staff kommt herein, ohne nach einem Passwort gefragt zu werden. Prüfe, ob sowohl die Config als auch das Artifact veröffentlicht sind. Ohne Artifact lässt StaffAuth Staff herein und protokolliert StaffAuth has no artifact entry. Prüfe außerdem, ob der Spieler wirklich staffPermission hat (/staffauth status gibt es aus).

Der Spieler wird mit einer Nachricht zu Berechtigungen gekickt. Die Permissions-Erweiterung hat nicht innerhalb von 10 Sekunden signalisiert, dass die Berechtigungen des Spielers geladen waren. Verbinde dich neu; bleibt es bestehen, prüfe das Permissions-Backend in den Logs.

The StaffAuth interface is unavailable. Die GUI-Erweiterung ist nicht geladen. Installiere sie und starte neu.

Passwörter sind verschwunden. Die artifactId des Artifacts wurde geändert oder der Entry wurde neu erstellt. Stelle die vorherige ID wieder her. Ein gespeicherter Wert, der keine gültige UUID oder kein gültiger BCrypt-String ist, lässt das Laden fehlschlagen und wird als StaffAuth artifact could not be loaded protokolliert; der Spieler bleibt eingefroren und erfährt, dass sein Zustand nicht lesbar ist.

Registrierung abgelehnt. Das Passwort muss zwischen minPasswordLength (6) und maxPasswordLength (128) Zeichen lang sein und darf keine Leerzeichen oder Steuerzeichen enthalten. Die beiden Eingaben müssen übereinstimmen.

Ein Spieler wird nach fehlgeschlagenen Anmeldungen gekickt. Nach maxAttempts (standardmäßig 5) Fehlschlägen wird der Spieler mit maxAttemptsKickMessage gekickt. Setze maxAttempts auf 0, um Kicks zu deaktivieren; der Cooldown gilt weiterhin. /staffauth reset <player> löscht ein vergessenes Passwort.

Verwandte Erweiterungen​

  • GUI — öffnet den Anmeldedialog und das Zahlenblock-Menü.