46 lines
1.4 KiB
Go
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)
|
|
}
|
|
}
|