Demo · een statische bibliotheek

Een bibliotheek om je client op te richten

Games, homebrew en cheats die niet bestaan, met deze site geserveerd als statische Lantern-bibliotheek: probeer een client zonder eigen server.

Wat erin zit

Verzonnen games voor Nintendo Switch, New 3DS, PS Vita en Android, met hun fiches en speciaal getekende afbeeldingen; homebrew voor Switch, 3DS en Linux, waarvan twee ondertekend; cheats in het formaat van de Switch. De games, studio's en mensen zijn verzonnen.

De bestanden zijn plaatsvervangers van een paar bytes tekst, en de homebrew-archieven bevatten alleen een README: niets ervan is software, en niets kan worden geïnstalleerd of gestart.

Een client erop richten

Geef je client dit adres. Hij vraagt de site eerst om /.well-known/lantern, vindt niets en leest dan lantern.json: een handshake met static (§ 21 van de specificatie), pagina's van vier items zodat een client er meerdere tegenkomt, en elk bestand via zijn SHA-256.

https://lantern.boreale.dev/demo/

lantern.json · v1/apps/switch/pages/1.json · v1/titles/switch/0100ABCD00010000.json

De conformiteitssuite controleert hem bij elke build van deze site, en hij haalt Lantern Static:

python3 conformance/run.py --static https://lantern.boreale.dev/demo/
…
Levels reached (SPEC.md § 17, draft 0.6): Lantern Static

Vanuit een browser

GitHub Pages, dat deze site serveert, beantwoordt elk bestand met Access-Control-Allow-Origin: *: een pagina van een andere site mag hem met fetch() lezen. Vraag zonder inloggegevens en zonder eigen headers (geen Lantern-Platform: het platform van een statische bibliotheek staat in haar paden), anders stuurt de browser eerst een preflight-verzoek, dat GitHub Pages niet beantwoordt.

const hello = await (await fetch("https://lantern.boreale.dev/demo/lantern.json")).json();

De handshake en de bestanden bevatten geen tracking: alleen de pagina's van deze site tellen hun bezoeken. Privacy

De variant met valkuilen

Ernaast staan statische bibliotheken die met opzet kapot zijn, met elk één fout, om clients te testen: een bestand dat niet zijn SHA-256 is, manifesten die uit hun map of buiten de roots van het platform gaan, een nieuwer schema, documenten die te groot of te diep genest zijn, handtekeningen die niet kloppen, een sleutel van kleine orde. Elk zegt wat een client moet doen, en de conformiteitssuite weigert ze allemaal.