hugin/cli/internal/api/secure_test.go
2026-10-27 08:33:21 +01:00

46 lines
1.4 KiB
Go

package api
import (
"net/http"
"net/http/httptest"
"strings"
"testing"
)
func TestKeysOnlyEncryptedOrLocal(t *testing.T) {
t.Setenv(AllowHttp, "")
for _, good := range []string{"https://hugin.intern", "http://127.0.0.1:8080", "http://localhost:8080", "http://[::1]:8080"} {
if _, err := New(good, "k"); err != nil {
t.Errorf("%s: %v", good, err)
}
}
for _, bad := range []string{"http://hugin.intern", "http://10.0.0.5:8080", "ftp://x", "hugin.intern", ""} {
if _, err := New(bad, "k"); err == nil {
t.Errorf("%s sollte abgelehnt werden", bad)
}
}
t.Setenv(AllowHttp, "1")
if _, err := New("http://hugin.intern", "k"); err != nil {
t.Errorf("mit %s=1: %v", AllowHttp, err)
}
}
func TestNoRedirectToHTTP(t *testing.T) {
t.Setenv(AllowHttp, "")
seen := ""
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
seen = r.Header.Get("Authorization")
http.Redirect(w, r, "http://boese.example/api/v1/config", http.StatusFound)
}))
defer server.Close()
c, err := New(server.URL, "hk_geheim")
if err != nil {
t.Fatal(err)
}
if _, err := c.Configuration(); err == nil || !strings.Contains(err.Error(), "nicht unverschlüsselt") {
t.Errorf("Weiterleitung auf http:// an fremden Rechner muss an der Prüfung scheitern: %v", err)
}
if seen != "Bearer hk_geheim" {
t.Errorf("erste Anfrage: %q", seen)
}
}