diff --git a/README.md b/README.md index 7fd0395..73410de 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,40 @@ -# vaultnord-brand +# Vaultnord — preg på hvelvene -Vaultnord sitt preg på hvelvene: nginx-konfigurasjon, CSS og kildekodeside. Publiseres automatisk fra det private arbeidsrepoet. \ No newline at end of file +Vaultnord drifter passordhvelv basert på +[Vaultwarden](https://github.com/dani-garcia/vaultwarden), som er fri programvare +under **AGPL-3.0**. + +Dette repoet inneholder alt vi legger *utenpå* hvelvet: en nginx-mellomtjener som +syr inn vår egen CSS, favicon og en bunntekst med kildekodelenke. + +## Hvorfor det ligger utenfor programmet + +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. + +Det gir også et ryddigere lisensbilde: vi endrer ikke programmet, og hvelvet du +snakker med er identisk med det oppstrøms utgir. + +## Kildekode + +| | | +|---|---| +| Vaultwarden, original | https://github.com/dani-garcia/vaultwarden | +| Vaultwarden, vår kopi | 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. + +## 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. diff --git a/brand-proxy/nginx.conf b/brand-proxy/nginx.conf new file mode 100644 index 0000000..ae7d90c --- /dev/null +++ b/brand-proxy/nginx.conf @@ -0,0 +1,70 @@ +# 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: ethica.vaultnord.no -> ethica +map $host $tenant { + default ""; + "~^(?[a-z0-9-]+)\." $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- + # dynamisk, og nginx ville nektet å starte om en tenant var nede. + resolver 127.0.0.11 valid=10s ipv6=off; + + location = /_vaultnord/health { + access_log off; + return 200 "ok\n"; + } + + 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 '' + ''; + sub_filter '' + ''; + } +} diff --git a/brand-proxy/static/brand.css b/brand-proxy/static/brand.css new file mode 100644 index 0000000..242c150 --- /dev/null +++ b/brand-proxy/static/brand.css @@ -0,0 +1,55 @@ +/* Vaultnord-preg på hvelvet. + Legges oppå Bitwarden-klienten utenfra, så den overlever en oppgradering av + hvelvet. Til gjengjeld kan klassenavnene endre seg oppstrøms - går noe i + stykker visuelt etter en oppdatering, er det her du ser først. */ + +:root { + --vn-turkis: #3dd2cc; + --vn-turkis-mork: #17807d; +} + +/* Bitwardens egen aksentfarge, der klienten bruker variabler. */ +html, body.layout_frontend { + --color-primary-600: 23 128 125; + --color-primary-700: 18 102 106; +} + +/* Innloggingssiden: rolig nordisk bunn i stedet for den blå gradienten. */ +body.layout_frontend { + background: linear-gradient(180deg, #f3f6fa 0%, #e8edf4 100%) !important; +} + +.bwi-shield::before, +.logo-image { + filter: hue-rotate(140deg) saturate(0.9); +} + +button.btn-primary, +.btn.btn-primary { + background-color: var(--vn-turkis-mork) !important; + border-color: var(--vn-turkis-mork) !important; +} + +#vaultnord-footer { + position: fixed; + bottom: 0; + left: 0; + right: 0; + padding: 6px 12px; + font: 12px/1.4 ui-sans-serif, system-ui, sans-serif; + color: #55617a; + background: rgba(243, 246, 250, .94); + border-top: 1px solid #dbe2ec; + text-align: center; + z-index: 2147483000; +} +#vaultnord-footer a { color: #17807d; } + +@media (prefers-color-scheme: dark) { + #vaultnord-footer { + color: #9aa5b8; + background: rgba(46, 52, 64, .94); + border-top-color: #434c5e; + } + #vaultnord-footer a { color: #8fbcbb; } +} diff --git a/brand-proxy/static/favicon.png b/brand-proxy/static/favicon.png new file mode 100644 index 0000000..bf67307 Binary files /dev/null and b/brand-proxy/static/favicon.png differ diff --git a/brand-proxy/static/kilde.html b/brand-proxy/static/kilde.html new file mode 100644 index 0000000..320307f --- /dev/null +++ b/brand-proxy/static/kilde.html @@ -0,0 +1,45 @@ + + + + + +Kildekode og lisens — Vaultnord + + + +
+

Kildekode og lisens

+
+

Passordhvelvet du bruker kjører Vaultwarden, fri programvare + lisensiert under GNU Affero General Public License v3.

+ +

Kildekoden

+ + +

Hva vi har endret

+

Ingenting i Vaultwarden selv. Vi kjører offisielle utgivelser uendret. + Vaultnord-preget — farger, logo og denne bunnteksten — legges på utenfra av + en egen mellomtjener, og rører ikke programmet.

+

Administrasjonspanelet på vaultnord.no er + et selvstendig program som snakker med hvelvet over API. Det er ikke en del + av Vaultwarden og deles ikke under AGPL.

+ +

Lisensteksten

+

gnu.org/licenses/agpl-3.0

+
+
+ +