|
@@ -819,6 +819,20 @@ func TestHTTPDBindingsFromEnv(t *testing.T) {
|
|
|
os.Setenv("SFTPGO_HTTPD__BINDINGS__2__OIDC__REDIRECT_BASE_URL", "redirect base url")
|
|
|
os.Setenv("SFTPGO_HTTPD__BINDINGS__2__OIDC__USERNAME_FIELD", "preferred_username")
|
|
|
os.Setenv("SFTPGO_HTTPD__BINDINGS__2__OIDC__ROLE_FIELD", "sftpgo_role")
|
|
|
+ os.Setenv("SFTPGO_HTTPD__BINDINGS__2__SECURITY__ENABLED", "true")
|
|
|
+ os.Setenv("SFTPGO_HTTPD__BINDINGS__2__SECURITY__ALLOWED_HOSTS", "*.example.com,*.example.net")
|
|
|
+ os.Setenv("SFTPGO_HTTPD__BINDINGS__2__SECURITY__ALLOWED_HOSTS_ARE_REGEX", "1")
|
|
|
+ os.Setenv("SFTPGO_HTTPD__BINDINGS__2__SECURITY__HOSTS_PROXY_HEADERS", "X-Forwarded-Host")
|
|
|
+ os.Setenv("SFTPGO_HTTPD__BINDINGS__2__SECURITY__HTTPS_PROXY_HEADERS__1__KEY", "X-Forwarded-Proto")
|
|
|
+ os.Setenv("SFTPGO_HTTPD__BINDINGS__2__SECURITY__HTTPS_PROXY_HEADERS__1__VALUE", "https")
|
|
|
+ os.Setenv("SFTPGO_HTTPD__BINDINGS__2__SECURITY__STS_SECONDS", "31536000")
|
|
|
+ os.Setenv("SFTPGO_HTTPD__BINDINGS__2__SECURITY__STS_INCLUDE_SUBDOMAINS", "false")
|
|
|
+ os.Setenv("SFTPGO_HTTPD__BINDINGS__2__SECURITY__STS_PRELOAD", "0")
|
|
|
+ os.Setenv("SFTPGO_HTTPD__BINDINGS__2__SECURITY__CONTENT_TYPE_NOSNIFF", "t")
|
|
|
+ os.Setenv("SFTPGO_HTTPD__BINDINGS__2__SECURITY__CONTENT_SECURITY_POLICY", "script-src $NONCE")
|
|
|
+ os.Setenv("SFTPGO_HTTPD__BINDINGS__2__SECURITY__PERMISSIONS_POLICY", "fullscreen=(), geolocation=()")
|
|
|
+ os.Setenv("SFTPGO_HTTPD__BINDINGS__2__SECURITY__CROSS_ORIGIN_OPENER_POLICY", "same-origin")
|
|
|
+ os.Setenv("SFTPGO_HTTPD__BINDINGS__2__SECURITY__EXPECT_CT_HEADER", `max-age=86400, enforce, report-uri="https://foo.example/report"`)
|
|
|
t.Cleanup(func() {
|
|
|
os.Unsetenv("SFTPGO_HTTPD__BINDINGS__0__ADDRESS")
|
|
|
os.Unsetenv("SFTPGO_HTTPD__BINDINGS__0__PORT")
|
|
@@ -848,6 +862,20 @@ func TestHTTPDBindingsFromEnv(t *testing.T) {
|
|
|
os.Unsetenv("SFTPGO_HTTPD__BINDINGS__2__OIDC__REDIRECT_BASE_URL")
|
|
|
os.Unsetenv("SFTPGO_HTTPD__BINDINGS__2__OIDC__USERNAME_FIELD")
|
|
|
os.Unsetenv("SFTPGO_HTTPD__BINDINGS__2__OIDC__ROLE_FIELD")
|
|
|
+ os.Unsetenv("SFTPGO_HTTPD__BINDINGS__2__SECURITY__ENABLED")
|
|
|
+ os.Unsetenv("SFTPGO_HTTPD__BINDINGS__2__SECURITY__ALLOWED_HOSTS")
|
|
|
+ os.Unsetenv("SFTPGO_HTTPD__BINDINGS__2__SECURITY__ALLOWED_HOSTS_ARE_REGEX")
|
|
|
+ os.Unsetenv("SFTPGO_HTTPD__BINDINGS__2__SECURITY__HOSTS_PROXY_HEADERS")
|
|
|
+ os.Unsetenv("SFTPGO_HTTPD__BINDINGS__2__SECURITY__HTTPS_PROXY_HEADERS__1__KEY")
|
|
|
+ os.Unsetenv("SFTPGO_HTTPD__BINDINGS__2__SECURITY__HTTPS_PROXY_HEADERS__1__VALUE")
|
|
|
+ os.Unsetenv("SFTPGO_HTTPD__BINDINGS__2__SECURITY__STS_SECONDS")
|
|
|
+ os.Unsetenv("SFTPGO_HTTPD__BINDINGS__2__SECURITY__STS_INCLUDE_SUBDOMAINS")
|
|
|
+ os.Unsetenv("SFTPGO_HTTPD__BINDINGS__2__SECURITY__STS_PRELOAD")
|
|
|
+ os.Unsetenv("SFTPGO_HTTPD__BINDINGS__2__SECURITY__CONTENT_TYPE_NOSNIFF")
|
|
|
+ os.Unsetenv("SFTPGO_HTTPD__BINDINGS__2__SECURITY__CONTENT_SECURITY_POLICY")
|
|
|
+ os.Unsetenv("SFTPGO_HTTPD__BINDINGS__2__SECURITY__PERMISSIONS_POLICY")
|
|
|
+ os.Unsetenv("SFTPGO_HTTPD__BINDINGS__2__SECURITY__CROSS_ORIGIN_OPENER_POLICY")
|
|
|
+ os.Unsetenv("SFTPGO_HTTPD__BINDINGS__2__SECURITY__EXPECT_CT_HEADER")
|
|
|
})
|
|
|
|
|
|
configDir := ".."
|
|
@@ -866,6 +894,7 @@ func TestHTTPDBindingsFromEnv(t *testing.T) {
|
|
|
require.Empty(t, bindings[0].OIDC.ConfigURL)
|
|
|
require.Equal(t, "TLS_AES_128_GCM_SHA256", bindings[0].TLSCipherSuites[0])
|
|
|
require.Equal(t, 0, bindings[0].HideLoginURL)
|
|
|
+ require.False(t, bindings[0].Security.Enabled)
|
|
|
require.Equal(t, 8000, bindings[1].Port)
|
|
|
require.Equal(t, "127.0.0.1", bindings[1].Address)
|
|
|
require.False(t, bindings[1].EnableHTTPS)
|
|
@@ -876,6 +905,7 @@ func TestHTTPDBindingsFromEnv(t *testing.T) {
|
|
|
require.Nil(t, bindings[1].TLSCipherSuites)
|
|
|
require.Equal(t, 1, bindings[1].HideLoginURL)
|
|
|
require.Empty(t, bindings[1].OIDC.ClientID)
|
|
|
+ require.False(t, bindings[1].Security.Enabled)
|
|
|
require.Equal(t, 9000, bindings[2].Port)
|
|
|
require.Equal(t, "127.0.1.1", bindings[2].Address)
|
|
|
require.True(t, bindings[2].EnableHTTPS)
|
|
@@ -900,6 +930,24 @@ func TestHTTPDBindingsFromEnv(t *testing.T) {
|
|
|
require.Equal(t, "redirect base url", bindings[2].OIDC.RedirectBaseURL)
|
|
|
require.Equal(t, "preferred_username", bindings[2].OIDC.UsernameField)
|
|
|
require.Equal(t, "sftpgo_role", bindings[2].OIDC.RoleField)
|
|
|
+ require.True(t, bindings[2].Security.Enabled)
|
|
|
+ require.Len(t, bindings[2].Security.AllowedHosts, 2)
|
|
|
+ require.Equal(t, "*.example.com", bindings[2].Security.AllowedHosts[0])
|
|
|
+ require.Equal(t, "*.example.net", bindings[2].Security.AllowedHosts[1])
|
|
|
+ require.True(t, bindings[2].Security.AllowedHostsAreRegex)
|
|
|
+ require.Len(t, bindings[2].Security.HostsProxyHeaders, 1)
|
|
|
+ require.Equal(t, "X-Forwarded-Host", bindings[2].Security.HostsProxyHeaders[0])
|
|
|
+ require.Len(t, bindings[2].Security.HTTPSProxyHeaders, 1)
|
|
|
+ require.Equal(t, "X-Forwarded-Proto", bindings[2].Security.HTTPSProxyHeaders[0].Key)
|
|
|
+ require.Equal(t, "https", bindings[2].Security.HTTPSProxyHeaders[0].Value)
|
|
|
+ require.Equal(t, int64(31536000), bindings[2].Security.STSSeconds)
|
|
|
+ require.False(t, bindings[2].Security.STSIncludeSubdomains)
|
|
|
+ require.False(t, bindings[2].Security.STSPreload)
|
|
|
+ require.True(t, bindings[2].Security.ContentTypeNosniff)
|
|
|
+ require.Equal(t, "script-src $NONCE", bindings[2].Security.ContentSecurityPolicy)
|
|
|
+ require.Equal(t, "fullscreen=(), geolocation=()", bindings[2].Security.PermissionsPolicy)
|
|
|
+ require.Equal(t, "same-origin", bindings[2].Security.CrossOriginOpenerPolicy)
|
|
|
+ require.Equal(t, `max-age=86400, enforce, report-uri="https://foo.example/report"`, bindings[2].Security.ExpectCTHeader)
|
|
|
}
|
|
|
|
|
|
func TestHTTPClientCertificatesFromEnv(t *testing.T) {
|