V sekci STYGION Keystone
Rozhraní — úplný seznam
Všech 44 cest lokálního API: co potřebují za scope, co berou, co vrací — a jak si na to napojit vlastní nástroj, z téhle mašiny i zvenčí.
Aktualizováno
Rozhraní — úplný seznam
Tenhle seznam není psaný z hlavy. Mod si dokument o sobě generuje ze svých vlastních rout (GET /v1/openapi.json), takže se nemůže mýlit v tom, co existuje — a tahle stránka je z něj vytažená příkazem scripts/reference.sh v repozitáři modu. Když si nejsi jistý, ptej se svého serveru, ne téhle stránky.
Platí pro 0.1.1. Cest je 44.
Než něco zavoláš
1. Vyrob si klíč
/keystone key new muj-nastroj status.read players.read
Klíč se vypíše jednou a nikdy víc. Dej mu tu nejužší sadu scopů, která odvede práci: skript, co hlídá, jestli server běží, chce status.read a nic dalšího.
2. Zavolej
curl -sS -H "Authorization: Bearer ks_…" \
http://127.0.0.1:25586/v1/status
GET bere parametry v adrese, POST je posílá jako formulář:
curl -sS -X POST -H "Authorization: Bearer ks_…" \
-d "player=Honza" -d "group=vip" -d "for=30d" \
-d "note=koupeno na webu" \
http://127.0.0.1:25586/v1/players/group
3. Co znamenají odpovědi
| Kód | Co to je |
|---|---|
200 |
Vyšlo to. |
400 |
Něco v požadavku nesedělo, a odpověď říká co. |
403 |
Klíč je pravý, ale nemá scope, který ta cesta chce. |
404 |
Taková cesta není — nebo nemáš klíč vůbec. Odpovídá se stejně schválně: volající bez klíče se o tomhle serveru nedozví nic. |
429 |
Překročil jsi, co ten klíč smí za minutu. |
Kudy se k tomu dostaneš
Jen z téhle mašiny (výchozí, a je to ta bezpečná volba)
[api]
enabled = true
address = "127.0.0.1"
port = 25586
Nic není vidět zvenčí. Panel i tvoje skripty běží na tom samém stroji.
Z tvého počítače, přes tunel (doporučené u hostovaného serveru)
Nechej mod na loopbacku a přines si port k sobě:
ssh -L 25586:127.0.0.1:25586 ty@tvuj-server
curl -sS -H "Authorization: Bearer ks_…" http://127.0.0.1:25586/v1/status
Nic se nevystavuje a /keystone panel se otevře u tebe v prohlížeči.
Z domácí sítě
/keystone set keystone.api.address 0.0.0.0
/keystone set keystone.api.reachable-at 192.168.1.100
První říká, kde se poslouchá, druhé, jakou adresu si má mod napsat do odkazu na editor a do openapi.json — 0.0.0.0 je dobrá odpověď na to první a nepoužitelná na to druhé. K tomu pusť port jen z LAN, ne ze světa:
sudo ufw allow from 192.168.1.0/24 to any port 25586 proto tcp
Zvenčí, přes reverzní proxy nebo tunel
Nech mod na loopbacku a postav před něj něco, co umí TLS:
location /keystone/ {
proxy_pass http://127.0.0.1:25586/;
proxy_set_header Host $host;
}
/keystone set keystone.api.reachable-at keystone.tvujserver.eu
Nikdy nedávej api.address na veřejnou adresu bez TLS. Klíč jde v hlavičce a přes http:// po internetu ho přečte kdokoliv po cestě. A API umí všechno, co umí mod.
Živý proud
curl -N -H "Authorization: Bearer ks_…" \
http://127.0.0.1:25586/v1/events
Drží spojení otevřené a píše do něj události, jak se dějí (text/event-stream). Tři řádky v prohlížeči:
const events = new EventSource('/v1/events');
events.onmessage = (e) => console.log(JSON.parse(e.data));
Ověřuje se jako všechno ostatní a bez klíče odpoví 404.
Stav a měření
| Metoda | Cesta | Scope | K čemu |
|---|---|---|---|
GET |
/v1/status |
status.read |
Co tenhle server je a jak mu je |
GET |
/v1/metrics |
status.read |
Co dělá právě teď a poslední čtvrthodina |
GET |
/v1/metrics/history |
status.read |
Po minutách, tak daleko dozadu, jak to nastavení drží |
GET |
/v1/entities |
status.read |
Co je načtené ve světě a co by úklid teď sebral |
GET |
/v1/gate |
status.read |
Jestli je server otevřený a kolik míst se drží stranou |
GET |
/v1/catalog |
status.read |
Všechno, co tenhle pack načetl: registry, obsah jednoho (?of=minecraft:item, s from/limit/like), nebo jeho tagy (&tags=true) |
GET |
/v1/bench |
server.read |
Zátěžové běhy, které tenhle server udělal (?id= pro jeden celý) |
GET |
/v1/openapi.json |
status.read |
Tenhle dokument |
curl -sS -H "Authorization: Bearer ks_…" \
"http://127.0.0.1:25586/v1/catalog?of=minecraft:item&like=diamond&limit=20"
Lidi a oprávnění
| Metoda | Cesta | Scope | K čemu |
|---|---|---|---|
GET |
/v1/players |
players.read |
Kdo je právě online |
GET |
/v1/progress |
players.read |
Co jeden hráč udělal, nebo žebříček jednoho počítadla |
GET |
/v1/skins |
players.read |
Co má kdo na sobě a odkud to je |
GET |
/v1/accounts |
players.read |
Kolik účtů má heslo a kdo čeká, až se prokáže |
GET |
/v1/bans |
players.read |
Každý ban, který ještě stojí |
GET |
/v1/tickets |
players.read |
Tickety (?id= pro jeden se vším, co se v něm řeklo, ?player=) |
GET |
/v1/votes |
players.read |
Hlasy, které serveru přišly, a jak je na tom party cíl (?player=, ?limit=) |
GET |
/v1/discord/links |
players.read |
Které herní účty má jeden Discord uživatel propojené (?discord=<id>) |
GET |
/v1/groups |
permissions.read |
Každá skupina oprávnění, nejtěžší první |
POST |
/v1/players/check |
permissions.read |
Jestli někdo něco smí — a které pravidlo o tom rozhodlo |
POST |
/v1/players/group |
permissions.write |
Dej někoho do skupiny, nebo mu v ní prodluž čas |
POST |
/v1/players/perk |
perks.write |
Dej někomu pojmenovanou výhodu, případně do data |
POST |
/v1/players/grants |
perks.read |
Co jeden hráč drží, odkud to má a kdy to končí |
Parametry:
| Cesta | Bere |
|---|---|
/v1/players/check |
player — jméno někoho online · permission — na které oprávnění se ptáš |
/v1/players/grants |
player — jméno někoho online |
/v1/players/group |
player · group — id skupiny · for — 30d, 12h, 90m, nebo vynech pro napořád · note — proč, pro toho, kdo to bude číst později |
/v1/players/perk |
player · perk — co dostane · for · note |
Jak z toho udělat obchod
Na serveru, který není v online režimu, jméno napsané do formuláře nedokazuje nic. Pořadí je tohle:
# 1. Kdo je ten člověk ve hře — podle Discordu, kterým se přihlásil na webu
curl -sS -H "Authorization: Bearer ks_…" \
"http://127.0.0.1:25586/v1/discord/links?discord=123456789012345678"
# 2. Doruč mu, co si koupil, s datem konce
curl -sS -X POST -H "Authorization: Bearer ks_…" \
-d "player=Honza" -d "group=vip" -d "for=30d" -d "note=objednávka 4821" \
http://127.0.0.1:25586/v1/players/group
Hodnost skončí sama v ten den. Nikdo si nemusí pamatovat, že ji má sundat.
Provoz
| Metoda | Cesta | Scope | K čemu |
|---|---|---|---|
GET |
/v1/operations |
operations.read |
Co je naplánované a kolik zbývá |
GET |
/v1/operations/history |
operations.read |
Co v poslední době proběhlo, nejnovější první |
POST |
/v1/operations/run |
operations.run |
Spusť jednu teď, nebo se zpožděním, s obvyklými varováními |
POST |
/v1/operations/cancel |
operations.run |
Odvolej, co je rozjeté, a vrať se k rozvrhu |
POST |
/v1/gate/maintenance |
operations.run |
Zavři server na údržbu, nebo ho zase otevři |
GET |
/v1/backups |
backup.read |
Každá záloha, nejnovější první, i s tím, co stojí na disku |
POST |
/v1/backups/restore |
backup.restore |
Vrať zálohu — připraví se a udělá při příštím startu |
Parametry:
| Cesta | Bere |
|---|---|
/v1/operations/run |
operation — která · in — za kolik vteřin, 0 hned |
/v1/operations/cancel |
operation — která |
/v1/gate/maintenance |
closed — true zavřít, false otevřít · reason — co se děje, uvidí to každý, kdo se pokusí připojit · until — kdy to má skončit, tvými slovy |
/v1/backups/restore |
backup — jméno zálohy, nebo cancel pro odvolání |
Nastavení a záznam
| Metoda | Cesta | Scope | K čemu |
|---|---|---|---|
GET |
/v1/settings |
settings.read |
Každé nastavení, co který modul deklaroval, co to je a co v tom stojí |
POST |
/v1/settings |
settings.write |
Změň jedno. Odmítne se i s důvodem, když hodnota neodpovídá tomu, co ta věc je |
GET |
/v1/settings/history |
settings.read |
Každá změna, nejnovější první, i s tím, jaká byla hodnota předtím |
POST |
/v1/settings/rollback |
settings.write |
Vrať, co jedna verze změnila. Vrácení je samo verze, takže jde vrátit taky |
POST |
/v1/reload |
settings.write |
Přečti znovu všechny soubory s nastavením. Nic se nerestartuje a nikoho to nevyhodí |
GET |
/v1/audit |
audit.read |
Kdo co přes tohle rozhraní změnil, nejnovější první. Čtení se nezapisuje, změny a odmítnutí ano |
GET |
/v1/keys |
keys.read |
Klíče, které tenhle server vydal, bez jejich tajemství |
Parametry: /v1/settings bere setting (celé jméno, třeba operations.restart.when) a value; /v1/settings/rollback bere version.
curl -sS -X POST -H "Authorization: Bearer ks_…" \
-d "setting=operations.restart.when" -d "value=every 6h" \
http://127.0.0.1:25586/v1/settings
Co všechno jde nastavit, je na stránce Všechna nastavení.
Konzole, chat a Discord
| Metoda | Cesta | Scope | K čemu |
|---|---|---|---|
GET |
/v1/console |
console.read |
Poslední řádky, co server vypsal, nejstarší první. Drží se v paměti, ne v databázi |
GET |
/v1/chat |
chat.read |
Poslední, co padlo v chatu, nejstarší první |
GET |
/v1/events |
events.read |
Živý proud událostí |
GET |
/v1/discord |
server.read |
Jestli je most na Discord připojený a jak moc je pozadu |
Asistent
| Metoda | Cesta | Scope | K čemu |
|---|---|---|---|
POST |
/v1/assistant/ask |
assistant.write |
Zeptej se ho. Odpověď přijde tímhle voláním |
POST |
/v1/assistant/incident |
assistant.write |
Podej mu poslední úsek konzole a chatu a zeptej se, co vypadá špatně |
POST |
/v1/assistant/decide |
assistant.write |
Souhlas s navrženou změnou, nebo ji nech být |
GET |
/v1/assistant/proposals |
assistant.read |
Změny, které chce udělat a nikdo o nich zatím nerozhodl |
GET |
/v1/assistant/threads |
assistant.read |
Konverzace, které byly, nejnovější první |
GET |
/v1/assistant/thread |
assistant.read |
Jedna konverzace, nejstarší zpráva první |
Parametry: /v1/assistant/ask bere question; /v1/assistant/decide bere proposal (která) a answer (yes nebo no).
Addony na JVM
Když stavíš addon v Javě, přes HTTP nemluvíš. Kompiluješ proti keystone-api, který jede uvnitř toho samého jaru (META-INF/jarjar/eu.stygion.keystone.api-<verze>.jar) a nemá žádné vlastní závislosti, ani logovací. Registruje se přes něj vlastní modul, příkaz, oprávnění, zdroj hodností — a taky vlastní route, která pak vypadá v tomhle seznamu a v openapi.json úplně stejně jako ty naše.
Co se zapisuje
Každá změna přes rozhraní je auditní řádek: který klíč, co, kdy — a každé odmítnutí taky. Klíč, který opakovaně zkouší, co nesmí, je jediná stopa, kterou o převzaté integraci dostaneš. Citlivé příkazy se maskují z auditu, konzole i logu.
Pomohla vám tahle stránka?
Otevře panel zpětné vazby s touhle stránkou v příloze. Přistane do jedné fronty se vším ostatním.