Fail early when Gitea advertises an insecure registry token endpoint
This commit is contained in:
parent
74c1e7130c
commit
7be231409f
2
.github/workflows/check.yml
vendored
2
.github/workflows/check.yml
vendored
@ -62,6 +62,8 @@ jobs:
|
||||
RELEASE_REF: ${{ github.ref }}
|
||||
run: |
|
||||
node scripts/release-version.mjs >> "$GITHUB_OUTPUT"
|
||||
- name: Verify HTTPS registry authentication endpoint
|
||||
run: node scripts/check-registry.mjs
|
||||
- uses: docker/login-action@v3
|
||||
with:
|
||||
registry: git.jfritzsche.de
|
||||
|
||||
@ -39,6 +39,10 @@ ROOT_URL = https://git.jfritzsche.de/
|
||||
|
||||
Alternativ im Gitea-Container `GITEA__server__ROOT_URL=https://git.jfritzsche.de/` setzen und Gitea neu starten. Der interne Listener darf weiterhin HTTP auf Port 3000 verwenden. HTTPS am Proxy allein korrigiert nicht automatisch die Registry-Token-URL.
|
||||
|
||||
Bei einer geänderten Compose-Umgebungsvariable reicht `docker restart` nicht: den **Gitea-Dienst** aus dessen eigenem Compose-Projekt neu erstellen (`docker compose up -d --force-recreate DIENSTNAME`). Das ist nicht der Taskmanager-Dienst. In der Gitea-Administrationsansicht die tatsächlich geladene Serverkonfiguration prüfen; eine Umgebungsvariable kann eine manuell bearbeitete `app.ini` beim Start wieder überschreiben. Keine Secrets oder vollständigen Umgebungsvariablen in Fehlerlogs veröffentlichen.
|
||||
|
||||
Neue Release-Workflows prüfen den HTTPS-Realm bereits vor Login und Image-Build mit `node scripts/check-registry.mjs`. Ein erneuter Lauf des alten Tags `v1.0.0` verwendet weiterhin den Workflow dieses Tags; die Serverkorrektur ist auch dafür erforderlich.
|
||||
|
||||
```bash
|
||||
curl -sS -D - -o /dev/null https://git.jfritzsche.de/v2/
|
||||
```
|
||||
|
||||
19
scripts/check-registry.mjs
Normal file
19
scripts/check-registry.mjs
Normal file
@ -0,0 +1,19 @@
|
||||
import { execFileSync } from "node:child_process";
|
||||
|
||||
// Inspect the unauthenticated challenge before sending credentials or building images.
|
||||
const headers = execFileSync("curl", [
|
||||
"--silent", "--show-error", "--max-time", "20",
|
||||
"--header", "Cache-Control: no-cache", "--dump-header", "-",
|
||||
"--output", process.platform === "win32" ? "NUL" : "/dev/null",
|
||||
"https://git.jfritzsche.de/v2/",
|
||||
], { encoding: "utf8" });
|
||||
const realm = headers.match(/^www-authenticate:\s*Bearer[^\r\n]*realm="([^"]+)"/im)?.[1];
|
||||
if (realm !== "https://git.jfritzsche.de/v2/token") {
|
||||
throw new Error(
|
||||
`Registry advertises an unexpected authentication realm: ${realm ?? "missing"}. ` +
|
||||
"Set Gitea [server] ROOT_URL=https://git.jfritzsche.de/ " +
|
||||
"(Docker: GITEA__server__ROOT_URL), recreate the Gitea container when changing its environment, " +
|
||||
"and verify the live /v2/ challenge. No credentials were sent by this check.",
|
||||
);
|
||||
}
|
||||
console.log("Registry HTTPS authentication endpoint verified.");
|
||||
Loading…
Reference in New Issue
Block a user