Første publisering: brand-proxy og kildekodeside

This commit is contained in:
Vaultnord
2026-08-30 01:19:57 +02:00
parent 11f551863e
commit b3faa5b818
5 changed files with 209 additions and 2 deletions
+39 -2
View File
@@ -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.
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.
+70
View File
@@ -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 "";
"~^(?<slug>[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-<slug>
# 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 '</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>';
}
}
+55
View File
@@ -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; }
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 760 B

+45
View File
@@ -0,0 +1,45 @@
<!doctype html>
<html lang="no">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Kildekode og lisens — Vaultnord</title>
<style>
body { margin:0; background:#f3f6fa; color:#2e3440;
font:16px/1.65 ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif; }
main { max-width:44rem; margin:0 auto; padding:3rem 1.5rem 4rem; }
h1 { font-size:1.6rem; letter-spacing:-.02em; margin:0 0 1.5rem; }
h2 { font-size:1.05rem; margin:2rem 0 .5rem; }
p, li { color:#55617a; }
a { color:#17807d; }
code { background:#e3f1f0; border-radius:5px; padding:.1rem .4rem; font-size:.9em; color:#12666a; }
.card { background:#fff; border:1px solid #dbe2ec; border-radius:12px; padding:1.5rem; }
</style>
</head>
<body>
<main>
<h1>Kildekode og lisens</h1>
<div class="card">
<p>Passordhvelvet du bruker kjører <strong>Vaultwarden</strong>, fri programvare
lisensiert under <strong>GNU Affero General Public License v3</strong>.</p>
<h2>Kildekoden</h2>
<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>
</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, og rører ikke programmet.</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>
<h2>Lisensteksten</h2>
<p><a href="https://www.gnu.org/licenses/agpl-3.0.html">gnu.org/licenses/agpl-3.0</a></p>
</div>
</main>
</body>
</html>