feat(auth): integrate authentication with installation lifecycle

This commit is contained in:
2026-08-17 20:21:42 +02:00
parent 0a2c667231
commit 9558eaa508
30 changed files with 756 additions and 120 deletions
+20
View File
@@ -364,6 +364,26 @@ func parseSetupArgs(args []string) (setup.Request, error) {
target = &request.Answers.GitSSHKeyFile
case "--git-known-hosts-file":
target = &request.Answers.GitKnownHostsFile
case "--auth-mode":
target = &request.Answers.AuthMode
case "--auth-public-url":
target = &request.Answers.AuthPublicURL
case "--auth-admin-user":
target = &request.Answers.AuthAdminUser
case "--auth-admin-display-name":
target = &request.Answers.AuthAdminDisplayName
case "--auth-password-file":
target = &request.Answers.AuthPasswordFile
case "--auth-issuer":
target = &request.Answers.AuthIssuer
case "--auth-client-id":
target = &request.Answers.AuthClientID
case "--auth-authentik-base-url":
target = &request.Answers.AuthAuthentikBaseURL
case "--auth-user-group":
target = &request.Answers.AuthUserGroup
case "--auth-admin-group":
target = &request.Answers.AuthAdminGroup
default:
return setup.Request{}, fmt.Errorf("unknown setup option %q", flag)
}
+17 -1
View File
@@ -43,6 +43,22 @@ func TestBackupCommandParsesSafeTransactionalOptions(t *testing.T) {
}
}
func TestSetupArgumentsRequireCompleteNonInteractiveAuthenticationInputs(t *testing.T) {
request, err := parseSetupArgs([]string{
"--non-interactive", "--auth-mode", "local", "--auth-public-url", "http://127.0.0.1:8080",
"--auth-admin-user", "admin", "--auth-admin-display-name", "Initial Admin", "--auth-password-file", "/protected/password",
})
if err != nil {
t.Fatal(err)
}
if request.Answers.AuthMode != "local" || request.Answers.AuthPasswordFile != "/protected/password" {
t.Fatalf("setup request = %#v", request)
}
if _, err := parseSetupArgs([]string{"--auth-mode", "local", "--auth-mode", "oidc"}); err == nil {
t.Fatal("duplicate --auth-mode was accepted")
}
}
func TestBackupCommandDispatchesWithoutDockerAndPrintsCustodyWarning(t *testing.T) {
installation := config.Installation{Path: "/tmp/thothii-installation.yaml"}
var received backup.CreateRequest
@@ -1469,7 +1485,7 @@ case " $* " in
if [ -n "${THT_FAKE_CONFIG:-}" ]; then
printf '%s\n' "$THT_FAKE_CONFIG"
else
printf '%s\n' '{"volumes":{"settings":{},"pi-state":{},"workspace-registry":{},"workspace-secrets":{},"sessions":{},"qdrant-data":{},"embedding-models":{}},"services":{"core":{"image":"thothii-core:local","environment":{"THT_LLM_URL":"https://llm.example.invalid"}}}}'
printf '%s\n' '{"volumes":{"settings":{},"pi-state":{},"workspace-registry":{},"workspace-secrets":{},"sessions":{},"qdrant-data":{},"embedding-models":{},"auth-state":{}},"services":{"core":{"image":"thothii-core:local","environment":{"THT_LLM_URL":"https://llm.example.invalid"}}}}'
fi ;;
*" run --rm --no-deps --no-TTY session-migrate "*)
if [ "${THT_FAKE_MIGRATION_EXIT:-0}" -ne 0 ]; then