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å Vaultnord drifter passordhvelv basert på
[Vaultwarden](https://github.com/dani-garcia/vaultwarden), som er fri programvare [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 ## Hva som er endret
syr inn vår egen CSS, favicon og en bunntekst med kildekodelenke.
## 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 - vår CSS, som bytter logo, farger og illustrasjonsfarger
rebrandet ved å patche web-klienten, måtte den bygges på nytt for hver - våre ikoner, som erstatter klientens favicon
oppstrømsversjon — og da blir en sikkerhetsfiks til en byggejobb i stedet for en - en bunntekst som lenker til denne kildekoden
tag-endring. Ved å legge preget på i en mellomtjener er oppgradering fortsatt - en side med lisens- og kildekodeinformasjon
bare å bytte image.
Det gir også et ryddigere lisensbilde: vi endrer ikke programmet, og hvelvet du `index.html` får to ekstra linjer: en `<link>` til CSS-en og bunnteksten.
snakker med er identisk med det oppstrøms utgir. 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 ## Kildekode
| | | | | |
|---|---| |---|---|
| Vaultwarden, original | https://github.com/dani-garcia/vaultwarden | | 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 | | Dette repoet | https://git.skui.io/vaultnord.no/vaultnord-brand |
Vaultnord-panelet — der kunder administrerer brukerne sine — er et selvstendig ## Hva som ikke er her
program som snakker med hvelvet over HTTP-API. Det er ikke avledet av
Vaultwarden, og deles ikke under AGPL.
## Innhold Vaultnord-panelet — nettsiden og styringsflaten der kunder administrerer
brukerne sine — er et selvstendig program som snakker med hvelvet over
brand-proxy/nginx.conf mellomtjeneren HTTP-API. Det er ikke avledet av Vaultwarden, deler ingen kode med det, og
brand-proxy/static/brand.css fargene og bunnteksten faller derfor ikke inn under AGPL. Det er lukket.
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.
-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> <ul>
<li>Original: <a href="https://github.com/dani-garcia/vaultwarden">github.com/dani-garcia/vaultwarden</a></li> <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å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> </ul>
<h2>Hva vi har endret</h2> <h2>Hva vi har endret</h2>
<p>Ingenting i Vaultwarden selv. Vi kjører offisielle utgivelser uendret. <p>Ingen endringer i serverkoden. Vi bygger fra det offisielle imaget og legger
Vaultnord-preget — farger, logo og denne bunnteksten — legges på utenfra av til statiske filer i den ferdigbygde web-klienten: vår CSS, våre ikoner og
en egen mellomtjener. Den koden ligger i <code>vaultnord-brand</code> over, denne bunnteksten. Dockerfilen og ressursene ligger i
og rører ikke programmet.</p> <code>vaultnord-brand</code> over.</p>
<p>Administrasjonspanelet på <a href="https://vaultnord.no">vaultnord.no</a> er <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 et selvstendig program som snakker med hvelvet over API. Det er ikke en del
av Vaultwarden og deles ikke under AGPL.</p> 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