Synk fra arbeidsrepoet

This commit is contained in:
Vaultnord
2026-08-30 02:30:47 +02:00
parent 3a0182852a
commit 475bb8054d
12 changed files with 54 additions and 113 deletions
+24
View File
@@ -0,0 +1,24 @@
# Vaultnord sitt hvelv-image: offisiell Vaultwarden med vårt preg lagt inn.
#
# Ingen kildekode er endret. Vi legger til statiske filer i den ferdigbygde
# web-klienten og setter inn to linjer i index.html. Oppgradering er å bytte
# VW_VERSION og bygge på nytt - det tar sekunder, og web-klienten bygges ikke.
#
# Endringene er publisert i git.skui.io/vaultnord.no/vaultnord-brand, som AGPL
# krever når man distribuerer en endret versjon.
ARG VW_VERSION=alpine
FROM vaultwarden/server:${VW_VERSION}
# Ressursene ligger i brand/ i det offentlige repoet og i
# brand-proxy/static/ i arbeidsrepoet. Byggekonteksten avgjør hvilken.
ARG BRAND_DIR=brand-proxy/static
COPY ${BRAND_DIR}/ /web-vault/_vaultnord/
RUN set -eux; \
cp /web-vault/_vaultnord/favicon.png /web-vault/images/favicon-32x32.png; \
cp /web-vault/_vaultnord/favicon-16.png /web-vault/images/favicon-16x16.png; \
cp /web-vault/_vaultnord/apple-touch-icon.png /web-vault/images/apple-touch-icon.png; \
sed -i 's#</head>#<link rel="stylesheet" href="/_vaultnord/brand.css"><link rel="icon" href="/_vaultnord/favicon.png"></head>#' /web-vault/index.html; \
sed -i 's#</body>#<div id="vaultnord-footer">Driftet av <a href="https://vaultnord.no">Vaultnord</a> \&middot; <a href="/_vaultnord/kilde.html">kildekode og lisens</a></div></body>#' /web-vault/index.html; \
grep -q '_vaultnord/brand.css' /web-vault/index.html
+25 -24
View File
@@ -1,40 +1,41 @@
# Vaultnord — preg på hvelvene
# Vaultnord — hvelv-image
Vaultnord drifter passordhvelv basert på
[Vaultwarden](https://github.com/dani-garcia/vaultwarden), som er fri programvare
under **AGPL-3.0**.
under **AGPL-3.0**. Vi kjører en lett endret utgave, og AGPL krever at endringene
er tilgjengelige for dem som bruker tjenesten. Her er de.
Dette repoet inneholder alt vi legger *utenpå* hvelvet: en nginx-mellomtjener som
syr inn vår egen CSS, favicon og en bunntekst med kildekodelenke.
## Hva som er endret
## Hvorfor det ligger utenfor programmet
Ingenting i selve serverkoden. Vi bygger fra det offisielle imaget og legger til
statiske filer i den ferdigbygde web-klienten:
Vaultwarden kjører hos oss **uendret**, i offisielle utgivelser. Skulle vi
rebrandet ved å patche web-klienten, måtte den bygges på nytt for hver
oppstrømsversjon — og da blir en sikkerhetsfiks til en byggejobb i stedet for en
tag-endring. Ved å legge preget på i en mellomtjener er oppgradering fortsatt
bare å bytte image.
- vår CSS, som bytter logo, farger og illustrasjonsfarger
- våre ikoner, som erstatter klientens favicon
- en bunntekst som lenker til denne kildekoden
- en side med lisens- og kildekodeinformasjon
Det gir også et ryddigere lisensbilde: vi endrer ikke programmet, og hvelvet du
snakker med er identisk med det oppstrøms utgir.
`index.html` får to ekstra linjer: en `<link>` til CSS-en og bunnteksten.
Web-klienten bygges ikke om, og ingen Angular- eller Rust-kode røres.
Konsekvensen er at oppgradering er å bytte `VW_VERSION` og bygge på nytt. En
sikkerhetsfiks fra oppstrøms skal ikke være en byggejobb.
## Bygge selv
docker build --build-arg VW_VERSION=alpine --build-arg BRAND_DIR=brand -t vaultnord/vault .
## Kildekode
| | |
|---|---|
| Vaultwarden, original | https://github.com/dani-garcia/vaultwarden |
| Vaultwarden, vår kopi | https://git.skui.io/vaultnord.no/vaultwarden |
| Vaultwarden, vårt speil | https://git.skui.io/vaultnord.no/vaultwarden |
| Dette repoet | https://git.skui.io/vaultnord.no/vaultnord-brand |
Vaultnord-panelet — der kunder administrerer brukerne sine — er et selvstendig
program som snakker med hvelvet over HTTP-API. Det er ikke avledet av
Vaultwarden, og deles ikke under AGPL.
## Hva som ikke er her
## Innhold
brand-proxy/nginx.conf mellomtjeneren
brand-proxy/static/brand.css fargene og bunnteksten
brand-proxy/static/kilde.html siden hvelvets bunntekst peker til
Lisens for innholdet i dette repoet: se `brand-proxy/`. Vaultwarden selv er
AGPL-3.0, og lisensteksten følger med i kildekoderepoene over.
Vaultnord-panelet — nettsiden og styringsflaten der kunder administrerer
brukerne sine — er et selvstendig program som snakker med hvelvet over
HTTP-API. Det er ikke avledet av Vaultwarden, deler ingen kode med det, og
faller derfor ikke inn under AGPL. Det er lukket.
-84
View File
@@ -1,84 +0,0 @@
# Vaultnord brand-proxy
#
# Ligger mellom Traefik og kundenes hvelv, og syr inn vår egen CSS, favicon og
# en bunntekst med kildekodelenker - uten å røre Vaultwarden-imaget.
#
# Poenget er at oppgradering av hvelvene skal være å bytte en image-tag, ikke å
# bygge en patchet web-vault på nytt. Alt vi legger til, legges til her.
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
# Første ledd i vertsnavnet er kundens slug: firma.vaultnord.no -> firma
map $host $tenant {
default "";
"~^(?<slug>[a-z0-9-]+)\.vaultnord\.no$" $slug;
}
server {
listen 80;
server_name _;
# Vedlegg kan være store. Cloudflare stopper uansett på 100 MB i gratisplanen.
client_max_body_size 128m;
# Docker sin interne DNS. Uten resolver kan vi ikke slå opp vw-<slug>
# dynamisk, og nginx ville nektet å starte om en tenant var nede.
resolver 127.0.0.11 valid=10s ipv6=off;
# Er hvelvet nede - stoppet, under oppdatering, eller kunden er satt på pause
# - skal brukeren møte noe som forklarer, ikke nginx sin 502-side.
error_page 502 503 504 =503 /_vaultnord/utilgjengelig.html;
# Gjelder bare våre egne 404-er (ukjent vertsnavn). 404 fra hvelvet selv
# slipper gjennom urørt - proxy_intercept_errors er av.
error_page 404 /_vaultnord/ukjent.html;
location = /_vaultnord/health {
access_log off;
return 200 "ok\n";
}
# Klientens egne ikoner byttes ut på filnivå. Da slipper vi å kjempe mot
# manifest og Angular om hva som havner i fanen - de får rett og slett
# aldri Bitwardens filer.
location = /images/favicon-32x32.png { alias /brand/favicon.png; }
location = /images/favicon-16x16.png { alias /brand/favicon-16.png; }
location = /images/apple-touch-icon.png { alias /brand/apple-touch-icon.png; }
location /_vaultnord/ {
alias /brand/;
expires 1h;
add_header Cache-Control "public";
}
location / {
if ($tenant = "") { return 404; }
proxy_pass http://vw-$tenant$request_uri;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header CF-Connecting-IP $http_cf_connecting_ip;
# Live-synk mellom klientene går over websocket.
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_read_timeout 3600s;
# sub_filter kan ikke røre en komprimert kropp. Vi ber om ukomprimert
# fra hvelvet; Cloudflare komprimerer uansett ut mot brukeren.
proxy_set_header Accept-Encoding "";
sub_filter_once on;
sub_filter_types text/html;
sub_filter '</head>'
'<link rel="stylesheet" href="/_vaultnord/brand.css"><link rel="icon" href="/_vaultnord/favicon.png"></head>';
sub_filter '</body>'
'<div id="vaultnord-footer">Driftet av <a href="https://vaultnord.no">Vaultnord</a> &middot; <a href="/_vaultnord/kilde.html">kildekode og lisens</a></div></body>';
}
}

Before

Width:  |  Height:  |  Size: 7.4 KiB

After

Width:  |  Height:  |  Size: 7.4 KiB

Before

Width:  |  Height:  |  Size: 458 B

After

Width:  |  Height:  |  Size: 458 B

Before

Width:  |  Height:  |  Size: 760 B

After

Width:  |  Height:  |  Size: 760 B

@@ -27,14 +27,14 @@
<ul>
<li>Original: <a href="https://github.com/dani-garcia/vaultwarden">github.com/dani-garcia/vaultwarden</a></li>
<li>Vår kopi: <a href="https://git.skui.io/vaultnord.no/vaultwarden">git.skui.io/vaultnord.no/vaultwarden</a></li>
<li>Vårt preg på hvelvet: <a href="https://git.skui.io/vaultnord.no/vaultnord-brand">git.skui.io/vaultnord.no/vaultnord-brand</a></li>
<li>Vår endrede utgave (Dockerfile og ressurser): <a href="https://git.skui.io/vaultnord.no/vaultnord-brand">git.skui.io/vaultnord.no/vaultnord-brand</a></li>
</ul>
<h2>Hva vi har endret</h2>
<p>Ingenting i Vaultwarden selv. Vi kjører offisielle utgivelser uendret.
Vaultnord-preget — farger, logo og denne bunnteksten — legges på utenfra av
en egen mellomtjener. Den koden ligger i <code>vaultnord-brand</code> over,
og rører ikke programmet.</p>
<p>Ingen endringer i serverkoden. Vi bygger fra det offisielle imaget og legger
til statiske filer i den ferdigbygde web-klienten: vår CSS, våre ikoner og
denne bunnteksten. Dockerfilen og ressursene ligger i
<code>vaultnord-brand</code> over.</p>
<p>Administrasjonspanelet på <a href="https://vaultnord.no">vaultnord.no</a> er
et selvstendig program som snakker med hvelvet over API. Det er ikke en del
av Vaultwarden og deles ikke under AGPL.</p>

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB