|
20 | 20 | package objects |
21 | 21 |
|
22 | 22 | import ( |
| 23 | + "crypto/tls" |
23 | 24 | "fmt" |
24 | 25 | "io" |
25 | 26 | "net/http" |
@@ -48,6 +49,8 @@ type SwiftLocation struct { |
48 | 49 | ApplicationCredentialID secrets.FromEnv `yaml:"application_credential_id"` |
49 | 50 | ApplicationCredentialName secrets.FromEnv `yaml:"application_credential_name"` |
50 | 51 | ApplicationCredentialSecret secrets.FromEnv `yaml:"application_credential_secret"` |
| 52 | + TLSClientCertificatePath secrets.FromEnv `yaml:"tls_client_certificate_path"` |
| 53 | + TLSClientKeyPath secrets.FromEnv `yaml:"tls_client_key_path"` |
51 | 54 | RegionName secrets.FromEnv `yaml:"region_name"` |
52 | 55 | ContainerName secrets.FromEnv `yaml:"container"` |
53 | 56 | ObjectNamePrefix secrets.FromEnv `yaml:"object_prefix"` |
@@ -88,6 +91,15 @@ func (s *SwiftLocation) Validate(name string) []error { |
88 | 91 | result = append(result, fmt.Errorf("missing value for %s.auth_url", name)) |
89 | 92 | } |
90 | 93 |
|
| 94 | + if s.TLSClientCertificatePath != "" || s.TLSClientKeyPath != "" { |
| 95 | + if s.TLSClientCertificatePath == "" { |
| 96 | + result = append(result, fmt.Errorf("missing value for %s.tls_client_certificate_path", name)) |
| 97 | + } |
| 98 | + if s.TLSClientKeyPath == "" { |
| 99 | + result = append(result, fmt.Errorf("missing value for %s.tls_client_key_path", name)) |
| 100 | + } |
| 101 | + } |
| 102 | + |
91 | 103 | if s.ApplicationCredentialID != "" || s.ApplicationCredentialName != "" { |
92 | 104 | //checking application credential requirements |
93 | 105 | if s.ApplicationCredentialID == "" { |
@@ -173,9 +185,22 @@ func (s *SwiftLocation) Connect(name string) error { |
173 | 185 | return fmt.Errorf("cannot create OpenStack client: %s", err.Error()) |
174 | 186 | } |
175 | 187 |
|
| 188 | + transport := &http.Transport{} |
| 189 | + if s.TLSClientCertificatePath != "" && s.TLSClientKeyPath != "" { |
| 190 | + cert, err := tls.LoadX509KeyPair(string(s.TLSClientCertificatePath), string(s.TLSClientKeyPath)) |
| 191 | + if err != nil { |
| 192 | + return fmt.Errorf("failed to load x509 key pair: %s", err.Error()) |
| 193 | + } |
| 194 | + transport.TLSClientConfig = &tls.Config{ |
| 195 | + Certificates: []tls.Certificate{cert}, |
| 196 | + MinVersion: tls.VersionTLS12, |
| 197 | + } |
| 198 | + provider.HTTPClient.Transport = transport |
| 199 | + } |
| 200 | + |
176 | 201 | if logg.ShowDebug { |
177 | 202 | provider.HTTPClient.Transport = &client.RoundTripper{ |
178 | | - Rt: http.DefaultTransport, |
| 203 | + Rt: transport, |
179 | 204 | Logger: &logger{Prefix: name}, |
180 | 205 | } |
181 | 206 | } |
|
0 commit comments