law-source-bund/law-source-bund.io.de.svg
flemming-it f1652cce62
All checks were successful
CI / Linux x86_64 (Forgejo) (push) Successful in 1m42s
feat: law-source-bund 0.1.0 (source.bundesrecht)
Fetch one German federal law from gesetze-im-internet.de (BMJ) by its
site slug, unpack the BMJ norm XML from the site's xml.zip and return
it content-addressed (SHA-256) plus the BMJ builddate, so a flow's
audit trail pins the exact Gesetzesstand it processed.

- xml.zip unpack picks the largest XML entry (norm body)
- lying ZIP size header rejected instead of silently truncated
  (audit integrity); 64 MB unpack cap, 96 MB download cap
- net permission pinned to www.gesetze-im-internet.de; no auth
- 11 unit tests (no network), wasm32-wasip2 build green

Signed-off-by: flemming-it <sf@flemming.it>
2026-07-17 00:29:06 +02:00

36 lines
No EOL
3.6 KiB
XML

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1012 300" width="1012" height="300" font-family="-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif" role="img" aria-label="Module I/O card for law-source-bund"><style>
.bg{fill:#fafbfb;stroke:#e4e7e9;stroke-width:1}
.title{fill:#12171a;font-size:24px;font-weight:700}
.ver{fill:#6b7580;font-size:16px;font-weight:500}
.cap{fill:#2e8f9e;font-size:14px;font-weight:600;letter-spacing:.02em}
.section{fill:#8a939b;font-size:11px;font-weight:700;letter-spacing:.14em}
.body{fill:#ffffff;stroke:#2e8f9e;stroke-width:2}
.bodyname{fill:#12171a;font-size:18px;font-weight:700}
.wire{stroke:#c2cace;stroke-width:2}
.port{stroke:#fafbfb;stroke-width:2}
.port.in{fill:#2e8f9e}
.port.out{fill:#b4703a}
.fname{fill:#12171a;font-size:15px;font-weight:600}
.ftype{fill:#6b7580;font-size:13px;font-weight:500}
.fdesc{fill:#5b656d;font-size:12.5px}
.rule{stroke:#e4e7e9;stroke-width:1}
.footer{fill:#6b7580;font-size:12.5px}
@media (prefers-color-scheme: dark){
.bg{fill:#12161a;stroke:#252b31}
.title{fill:#eef1f2}
.ver{fill:#9aa3ab}
.cap{fill:#4fb3c2}
.section{fill:#7c868e}
.body{fill:#1a2025;stroke:#4fb3c2}
.bodyname{fill:#eef1f2}
.wire{stroke:#39424a}
.port{stroke:#12161a}
.port.in{fill:#4fb3c2}
.port.out{fill:#d08a52}
.fname{fill:#eef1f2}
.ftype{fill:#7c868e}
.fdesc{fill:#a7b0b7}
.rule{stroke:#252b31}
.footer{fill:#9aa3ab}
}
</style><rect class="bg" x="0" y="0" width="1012" height="300" rx="16"/><text class="title" x="32" y="44">law-source-bund<tspan class="ver" dx="10">v0.1.0</tspan></text><text class="cap" x="32" y="70">source.bundesrecht@0.1.0</text><text class="section" x="32" y="80">EINGÄNGE</text><text class="section" text-anchor="end" x="980" y="80">AUSGÄNGE</text><rect class="body" x="396" y="100" width="220" height="136" rx="14"/><text class="bodyname" text-anchor="middle" x="506" y="173">law-source-bund</text><line class="wire" x1="352" y1="130" x2="396" y2="130"/><circle class="port in" cx="396" cy="130" r="6"/><text class="fname" text-anchor="end" x="340" y="122">gesetz<tspan class="ftype"> · text</tspan></text><text class="fdesc" text-anchor="end" x="340" y="142">Kürzel (Slug) des Gesetzes auf</text><text class="fdesc" text-anchor="end" x="340" y="157">gesetze-im-internet.de, z. B. bgb, estg,</text><text class="fdesc" text-anchor="end" x="340" y="172">gg oder stromnzv. Der Slug ist das</text><line class="wire" x1="616" y1="130" x2="660" y2="130"/><circle class="port out" cx="616" cy="130" r="6"/><text class="fname" text-anchor="start" x="672" y="122">meta<tspan class="ftype"> · json</tspan></text><text class="fdesc" text-anchor="start" x="672" y="142">JSON-codiertes SourceMeta (Felder s.</text><text class="fdesc" text-anchor="start" x="672" y="157">EN). source_sha256 ist der</text><text class="fdesc" text-anchor="start" x="672" y="172">Versionsanker: gesetze-im-internet</text><line class="wire" x1="616" y1="206" x2="660" y2="206"/><circle class="port out" cx="616" cy="206" r="6"/><text class="fname" text-anchor="start" x="672" y="198">xml<tspan class="ftype"> · bytes</tspan></text><text class="fdesc" text-anchor="start" x="672" y="218">BMJ-Normen-XML (gii-norm-DTD) aus dem</text><text class="fdesc" text-anchor="start" x="672" y="233">xml.zip der Seite. Für die</text><text class="fdesc" text-anchor="start" x="672" y="248">strukturierte Akoma-Ntoso-Darstellung an</text><line class="rule" x1="32" y1="252" x2="980" y2="252"/><text class="footer" x="32" y="278">Berechtigungen: net: www.gesetze-im-internet.de</text></svg>