Первичная настройка, часть 4: HTTPS веб-интерфейса (:8443, самоподписанный сертификат на имя и адреса сервера, свой сертификат, перенаправление браузера с HTTP); сервер времени из настроек (ntpd/chrony/timesyncd — bj-system-admin); постоянный адрес — bj-network (netplan try с откатом), вопрос при первой загрузке с образа; раздел «Сервер: HTTPS, время, сеть»; HTTPS в итоговой проверке; адреса https:// на экране установщика и консоли
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
This commit is contained in:
@@ -105,3 +105,42 @@ func TestFirstRunRestoreNeedsCode(t *testing.T) {
|
||||
t.Fatalf("без ожидающей первичной настройки восстановление не должно запускаться: %s", rec.Body.String())
|
||||
}
|
||||
}
|
||||
|
||||
func TestHTTPSSelfSignedAndRedirect(t *testing.T) {
|
||||
old := tlsDir
|
||||
tlsDir = t.TempDir()
|
||||
defer func() { tlsDir = old }()
|
||||
if err := ensureSelfSigned(false); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if cn, until, err := tlsCertInfo(); err != nil || cn == "" || certDaysLeft(until) < 1000 {
|
||||
t.Fatalf("сертификат: %q %v %v", cn, until, err)
|
||||
}
|
||||
if _, err := loadTLSCert(nil); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
rc, _ := NewRuntimeConfig(t.TempDir() + "/setup.json")
|
||||
_ = rc.UpdateHTTPS(HTTPSSettings{Redirect: true})
|
||||
h := httpsRedirect(rc, http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusTeapot) }))
|
||||
cases := []struct {
|
||||
path, remote string
|
||||
want int
|
||||
}{
|
||||
{"/admin/setup", "10.10.10.5:5000", http.StatusFound},
|
||||
{"/api/v1/lk/x", "10.10.10.5:5000", http.StatusTeapot},
|
||||
{"/healthz", "10.10.10.5:5000", http.StatusTeapot},
|
||||
{"/admin/setup", "127.0.0.1:5000", http.StatusTeapot},
|
||||
}
|
||||
for _, c := range cases {
|
||||
req := httptest.NewRequest(http.MethodGet, "http://10.10.10.6:8080"+c.path, nil)
|
||||
req.RemoteAddr = c.remote
|
||||
rec := httptest.NewRecorder()
|
||||
h.ServeHTTP(rec, req)
|
||||
if rec.Code != c.want {
|
||||
t.Errorf("%s с %s: %d, ожидалось %d", c.path, c.remote, rec.Code, c.want)
|
||||
}
|
||||
if c.want == http.StatusFound && rec.Header().Get("Location") != "https://10.10.10.6:8443/admin/setup" {
|
||||
t.Errorf("перенаправление: %s", rec.Header().Get("Location"))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user