Make the Vault gitea creds path selectable
agentpr always read gitea/creds/unkin-agent from a bare const, so a service like repospawner could not run it as its own Gitea identity. - Replace the GiteaCredsPath const with a function: GITEA_CREDS_PATH when set, otherwise gitea/creds/<AGENT_LOGIN>. Unset env still resolves to gitea/creds/unkin-agent, so existing callers are unchanged. - Thread the creds path through fetchGiteaToken/readGiteaCreds instead of reading a package-level const, and report it in the error messages. - Make agentpr's help text login-agnostic and document both variables.
This commit is contained in:
@@ -8,8 +8,9 @@ import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
// fakeVault serves the AppRole login and gitea creds endpoints.
|
||||
func fakeVault(t *testing.T, wantRoleID, giteaToken string) *httptest.Server {
|
||||
// fakeVault serves the AppRole login and the gitea creds secret at credsPath
|
||||
// only, so a read of any other path 404s.
|
||||
func fakeVault(t *testing.T, wantRoleID, credsPath, giteaToken string) *httptest.Server {
|
||||
t.Helper()
|
||||
mux := http.NewServeMux()
|
||||
mux.HandleFunc("/v1/auth/approle/login", func(w http.ResponseWriter, r *http.Request) {
|
||||
@@ -26,7 +27,7 @@ func fakeVault(t *testing.T, wantRoleID, giteaToken string) *httptest.Server {
|
||||
}
|
||||
_, _ = io.WriteString(w, `{"auth":{"client_token":"s.vaulttoken"}}`)
|
||||
})
|
||||
mux.HandleFunc("/v1/"+GiteaCredsPath, func(w http.ResponseWriter, r *http.Request) {
|
||||
mux.HandleFunc("/v1/"+credsPath, func(w http.ResponseWriter, r *http.Request) {
|
||||
if got := r.Header.Get("X-Vault-Token"); got != "s.vaulttoken" {
|
||||
t.Errorf("X-Vault-Token = %q, want s.vaulttoken", got)
|
||||
}
|
||||
@@ -36,10 +37,10 @@ func fakeVault(t *testing.T, wantRoleID, giteaToken string) *httptest.Server {
|
||||
}
|
||||
|
||||
func TestFetchGiteaToken(t *testing.T) {
|
||||
srv := fakeVault(t, "role-xyz", "gitea-abc")
|
||||
srv := fakeVault(t, "role-xyz", "gitea/creds/unkin-agent", "gitea-abc")
|
||||
defer srv.Close()
|
||||
|
||||
tok, err := fetchGiteaToken(srv.URL, "role-xyz")
|
||||
tok, err := fetchGiteaToken(srv.URL, "role-xyz", "gitea/creds/unkin-agent")
|
||||
if err != nil {
|
||||
t.Fatalf("fetchGiteaToken: %v", err)
|
||||
}
|
||||
@@ -57,7 +58,7 @@ func TestFetchGiteaTokenLoginError(t *testing.T) {
|
||||
srv := httptest.NewServer(mux)
|
||||
defer srv.Close()
|
||||
|
||||
if _, err := fetchGiteaToken(srv.URL, "role-xyz"); err == nil {
|
||||
if _, err := fetchGiteaToken(srv.URL, "role-xyz", "gitea/creds/unkin-agent"); err == nil {
|
||||
t.Fatal("expected error on 403 login")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user