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) } }