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  }