mirror of
https://github.com/portainer/portainer.git
synced 2026-06-23 07:10:13 +00:00
33 lines
940 B
Go
33 lines
940 B
Go
package registryhttp
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
portainer "github.com/portainer/portainer/api"
|
|
"github.com/portainer/portainer/api/crypto"
|
|
"github.com/portainer/portainer/pkg/fips"
|
|
"github.com/portainer/portainer/pkg/libhttp/ssrf"
|
|
)
|
|
|
|
// BuildTransportAndSchemeFromTLSConfig returns an SSRF-protected HTTP transport and the
|
|
// scheme ("http" or "https") to use when contacting the registry. The transport is based on
|
|
// the TLS settings from tlsCfg; pass a zero-value TLSConfiguration for plaintext.
|
|
func BuildTransportAndSchemeFromTLSConfig(tlsCfg portainer.TLSConfiguration) (*http.Transport, string, error) {
|
|
tlsConfig, err := crypto.CreateTLSConfigurationFromDisk(tlsCfg)
|
|
if err != nil {
|
|
return nil, "", err
|
|
}
|
|
|
|
if tlsConfig == nil && fips.FIPSMode() {
|
|
return nil, "", fips.ErrTLSRequired
|
|
}
|
|
|
|
transport := ssrf.NewTransport(tlsConfig)
|
|
|
|
if tlsConfig == nil {
|
|
return transport, "http", nil
|
|
}
|
|
|
|
return transport, "https", nil
|
|
}
|