- docs/: shiroa book with three example categories (thermo, security, homelab); pages declare access via '#let access-groups = (...)' - cmd/parser: scans docs/ and generates acl.json (public by default, skips book.typ/template.typ/partials) - internal/acl: loads acl.json, normalizes URLs to page keys so a page's renderer data (*.multi.sir.in) inherits its protection; fail closed on malformed input - internal/oidc: authorization-code flow client, verified ID tokens, groups claim from Authentik - internal/middleware: in-memory sessions, login/logout/callback handlers, CSRF states, access gate + security headers - cmd/server + embed.go: single binary embedding dist/ and acl.json; /searchindex.json blocked; graceful shutdown - Justfile (build/run/parse/check/clean/preview-docs), Gitea Actions workflow (shiroa v0.4.0-rc2), rootless Dockerfile, README - legacy docs moved to legacy_docs/; .idea untracked
18 lines
510 B
Typst
18 lines
510 B
Typst
#import "template.typ": project
|
|
#show: project
|
|
|
|
= Yggdrasil
|
|
|
|
Welcome to the Yggdrasil knowledge base, built with Typst, Shiroa and a Go
|
|
server.
|
|
|
|
*How it works:*
|
|
|
|
- Pages are written in Typst under `docs/` and compiled to static HTML.
|
|
- A Go server embeds the HTML and an access-control list (`acl.json`).
|
|
- Pages tagged with `#let access-groups = ("family", "admin")` are only
|
|
visible to authenticated users in those groups; everything else is
|
|
public.
|
|
|
|
Browse the categories in the sidebar to get started.
|