From 6f6eb36c4c079c9c163d6ec5f886d3c120941db1 Mon Sep 17 00:00:00 2001 From: Kofo Okesola Date: Tue, 21 Jan 2025 16:19:07 +0100 Subject: [PATCH] added fill and extract --- apidef/oas/upstream.go | 14 +++++++++++ apidef/oas/upstream_test.go | 47 +++++++++++++++++++++++++++++++++++-- 2 files changed, 59 insertions(+), 2 deletions(-) diff --git a/apidef/oas/upstream.go b/apidef/oas/upstream.go index 7e13c2ce01c..076e55e06d9 100644 --- a/apidef/oas/upstream.go +++ b/apidef/oas/upstream.go @@ -243,6 +243,7 @@ type TLSTransport struct { ForceCommonNameCheck bool `bson:"forceCommonNameCheck,omitempty" json:"forceCommonNameCheck,omitempty"` } +// Fill fills *TLSTransport from apidef.ServiceDiscoveryConfiguration. func (t *TLSTransport) Fill(api apidef.APIDefinition) { t.ForceCommonNameCheck = api.Proxy.Transport.SSLForceCommonNameCheck t.Ciphers = api.Proxy.Transport.SSLCipherSuites @@ -251,6 +252,7 @@ func (t *TLSTransport) Fill(api apidef.APIDefinition) { t.InsecureSkipVerify = api.Proxy.Transport.SSLInsecureSkipVerify } +// ExtractTo extracts *TLSTransport into *apidef.ServiceDiscoveryConfiguration. func (t *TLSTransport) ExtractTo(api *apidef.APIDefinition) { api.Proxy.Transport.SSLForceCommonNameCheck = t.ForceCommonNameCheck api.Proxy.Transport.SSLCipherSuites = t.Ciphers @@ -259,6 +261,7 @@ func (t *TLSTransport) ExtractTo(api *apidef.APIDefinition) { api.Proxy.Transport.SSLInsecureSkipVerify = t.InsecureSkipVerify } +// tlsVersionFromString converts v in the form of 1.2/1.3 to the version int func tlsVersionFromString(v string) uint16 { switch v { case "1.0": @@ -274,6 +277,7 @@ func tlsVersionFromString(v string) uint16 { } } +// tlsVersionFromString converts v from version into to the form 1.0/1.1 func tlsVersionToString(v uint16) string { switch v { case tls.VersionTLS10: @@ -300,6 +304,16 @@ type Proxy struct { URL string `bson:"url" json:"url"` } +// Fill fills *Proxy from apidef.ServiceDiscoveryConfiguration. +func (p *Proxy) Fill(api apidef.APIDefinition) { + p.URL = api.Proxy.Transport.ProxyURL +} + +// ExtractTo extracts *Proxy into *apidef.ServiceDiscoveryConfiguration. +func (p *Proxy) ExtractTo(api *apidef.APIDefinition) { + api.Proxy.Transport.ProxyURL = p.URL +} + // ServiceDiscovery holds configuration required for service discovery. type ServiceDiscovery struct { // Enabled activates Service Discovery. diff --git a/apidef/oas/upstream_test.go b/apidef/oas/upstream_test.go index 6507dc80478..573f051d0b2 100644 --- a/apidef/oas/upstream_test.go +++ b/apidef/oas/upstream_test.go @@ -1,6 +1,7 @@ package oas import ( + "crypto/tls" "testing" "github.com/stretchr/testify/assert" @@ -472,11 +473,53 @@ func TestCertificatePinning(t *testing.T) { }) } -func TestTLSTransport(t *testing.T) { +func TestTLSTransportProxy(t *testing.T) { t.Run("with tls settings", func(t *testing.T) { transport := TLSTransport{ - InsecureSkipVerify: false, + InsecureSkipVerify: true, + MinVersion: "1.2", + MaxVersion: "1.3", + ForceCommonNameCheck: true, } + + var convertedAPI apidef.APIDefinition + var resultTransport TLSTransport + + convertedAPI.SetDisabledFlags() + transport.ExtractTo(&convertedAPI) + + assert.Equal(t, transport.InsecureSkipVerify, convertedAPI.Proxy.Transport.SSLInsecureSkipVerify) + assert.Equal(t, uint16(tls.VersionTLS12), convertedAPI.Proxy.Transport.SSLMinVersion) + assert.Equal(t, uint16(tls.VersionTLS13), convertedAPI.Proxy.Transport.SSLMaxVersion) + assert.Equal(t, transport.ForceCommonNameCheck, convertedAPI.Proxy.Transport.SSLForceCommonNameCheck) + + resultTransport.Fill(convertedAPI) + + assert.Equal(t, transport, resultTransport) + }) + + t.Run("emmpty tls settings", func(t *testing.T) { + var emptyTlsTransport TLSTransport + var convertedAPI apidef.APIDefinition + var resultTransport TLSTransport + + convertedAPI.SetDisabledFlags() + emptyTlsTransport.ExtractTo(&convertedAPI) + resultTransport.Fill(convertedAPI) + + assert.Equal(t, emptyTlsTransport, resultTransport) + }) + + t.Run("proxy settings", func(t *testing.T) { + proxyTransport := Proxy{ + URL: "proxy-url", + } + var convertedAPI apidef.APIDefinition + var resultProxy Proxy + + convertedAPI.SetDisabledFlags() + proxyTransport.Fill(convertedAPI) + assert.Equal(t, proxyTransport, resultProxy) }) }