1
1
package cmd
2
2
3
3
import (
4
+ "crypto/tls"
5
+ "crypto/x509"
6
+ "encoding/hex"
4
7
"fmt"
5
8
"io"
6
9
"log/slog"
10
+ "net/http"
7
11
"os"
8
12
"strings"
9
13
@@ -220,14 +224,31 @@ func initConfigWithViperCtx(c *config) error {
220
224
}
221
225
}
222
226
227
+ certificateAuthorityData := viper .GetString ("certificate-authority-data" )
228
+
223
229
var (
224
- client metalgo.Client
225
- err error
230
+ client metalgo.Client
231
+ err error
232
+ transport * http.Transport
226
233
)
227
- if hmacAuthType != "" {
228
- client , err = metalgo .NewDriver (driverURL , apiToken , hmacKey , metalgo .AuthType (hmacAuthType ))
234
+
235
+ if certificateAuthorityData == "" {
236
+ if hmacAuthType == "" {
237
+ client , err = metalgo .NewClient (driverURL , metalgo .BearerToken (apiToken ), metalgo .HMACAuth (hmacKey , "Metal-Admin" ))
238
+ } else {
239
+ client , err = metalgo .NewClient (driverURL , metalgo .BearerToken (apiToken ), metalgo .HMACAuth (hmacKey , hmacAuthType ))
240
+ }
229
241
} else {
230
- client , err = metalgo .NewDriver (driverURL , apiToken , hmacKey )
242
+ transport , err = createTLSTransport (certificateAuthorityData )
243
+ if err != nil {
244
+ return err
245
+ }
246
+
247
+ if hmacAuthType == "" {
248
+ client , err = metalgo .NewClient (driverURL , metalgo .BearerToken (apiToken ), metalgo .HMACAuth (hmacKey , "Metal-Admin" ), metalgo .Transport (transport ))
249
+ } else {
250
+ client , err = metalgo .NewClient (driverURL , metalgo .BearerToken (apiToken ), metalgo .HMACAuth (hmacKey , hmacAuthType ), metalgo .Transport (transport ))
251
+ }
231
252
}
232
253
if err != nil {
233
254
return err
@@ -240,6 +261,27 @@ func initConfigWithViperCtx(c *config) error {
240
261
return nil
241
262
}
242
263
264
+ func createTLSTransport (certificateAuthorityData string ) (transport * http.Transport , err error ) {
265
+ var (
266
+ certificateAuthorityDataHex []byte
267
+ caCertPool x509.CertPool
268
+ )
269
+
270
+ certificateAuthorityDataHex , err = hex .DecodeString (certificateAuthorityData )
271
+ if err != nil {
272
+ return nil , err
273
+ }
274
+
275
+ caCertPool .AppendCertsFromPEM (certificateAuthorityDataHex )
276
+ transport = & http.Transport {
277
+ TLSClientConfig : & tls.Config {
278
+ RootCAs : & caCertPool ,
279
+ },
280
+ }
281
+
282
+ return transport , nil
283
+ }
284
+
243
285
func recursiveAutoGenDisable (cmd * cobra.Command ) {
244
286
cmd .DisableAutoGenTag = true
245
287
for _ , child := range cmd .Commands () {
0 commit comments