Added support for http client configuration via command arguments

This commit is contained in:
Daniel Del Rio Figueira 2024-11-29 10:16:33 +01:00
parent d9703ff6fd
commit d5e2df49db
No known key found for this signature in database
GPG key ID: 16C55CB50D1B770D
4 changed files with 62 additions and 2 deletions

View file

@ -65,7 +65,11 @@ func GetClient(ctx context.Context) (*api.Client, error) {
fmt.Println()
}
client, err := api.NewClient(nil, "", serverAddress, userPrivateKey, userPassword)
httpClient, err := GetHttpClient()
if err != nil {
return nil, err
}
client, err := api.NewClient(httpClient, "", serverAddress, userPrivateKey, userPassword)
if err != nil {
return nil, fmt.Errorf("Creating Client: %w", err)
}

44
util/http.go Normal file
View file

@ -0,0 +1,44 @@
package util
import (
"crypto/tls"
"fmt"
"net/http"
"github.com/spf13/viper"
)
func GetClientCertificate() (tls.Certificate, error) {
cert := viper.GetString("tlsClientCert")
certExists := cert != ""
key := viper.GetString("tlsClientPrivateKey")
keyExists := key != ""
if !certExists && !keyExists {
return tls.Certificate{}, nil
}
if certExists && !keyExists {
return tls.Certificate{}, fmt.Errorf("Client TLS private key is empty, but client TLS cert was sent.")
}
if !certExists && keyExists {
return tls.Certificate{}, fmt.Errorf("Client TLS cert is empty, but client TLS private key was sent.")
}
return tls.LoadX509KeyPair("client.cert", "client-key.pem")
}
func GetHttpClient() (*http.Client, error) {
tlsSkipVerify := viper.GetBool("tlsSkipVerify")
cert, err := GetClientCertificate()
if err != nil {
return nil, err
}
httpClient := http.Client{
Transport: &http.Transport{
TLSClientConfig: &tls.Config{
Certificates: []tls.Certificate{cert},
InsecureSkipVerify: tlsSkipVerify,
},
},
}
return &httpClient, nil
}