github.com/jaylevin/jenkins-library@v1.230.4/pkg/certutils/certutils.go (about) 1 package certutils 2 3 import ( 4 "io/ioutil" 5 "net/http" 6 7 piperhttp "github.com/SAP/jenkins-library/pkg/http" 8 "github.com/SAP/jenkins-library/pkg/piperutils" 9 "github.com/pkg/errors" 10 ) 11 12 // CertificateUpdate adds certificates to the given truststore 13 func CertificateUpdate(certLinks []string, httpClient piperhttp.Sender, fileUtils piperutils.FileUtils, caCertsFile string) error { 14 // TODO this implementation doesn't work on non-linux machines, is not failsafe and should be implemented differently 15 16 if len(certLinks) == 0 { 17 return nil 18 } 19 20 caCerts, err := fileUtils.FileRead(caCertsFile) 21 if err != nil { 22 return errors.Wrapf(err, "failed to load file '%v'", caCertsFile) 23 } 24 25 for _, link := range certLinks { 26 response, err := httpClient.SendRequest(http.MethodGet, link, nil, nil, nil) 27 if err != nil { 28 return errors.Wrap(err, "failed to load certificate from url") 29 } 30 31 content, err := ioutil.ReadAll(response.Body) 32 if err != nil { 33 return errors.Wrap(err, "error reading response") 34 } 35 _ = response.Body.Close() 36 content = append(content, []byte("\n")...) 37 caCerts = append(caCerts, content...) 38 } 39 err = fileUtils.FileWrite(caCertsFile, caCerts, 0644) 40 if err != nil { 41 return errors.Wrapf(err, "failed to update file '%v'", caCertsFile) 42 } 43 return nil 44 }