github.com/secure-build/gitlab-runner@v12.5.0+incompatible/helpers/tls/ca_chain/resolver_chain.go (about)

     1  // Inspired by https://github.com/zakjan/cert-chain-resolver/blob/master/certUtil/chain.go
     2  // which is licensed on a MIT license.
     3  //
     4  // Shout out to Jan Žák (http://zakjan.cz) original author of `certUtil` package and other
     5  // contributors who updated it!
     6  
     7  package ca_chain
     8  
     9  import (
    10  	"crypto/x509"
    11  	"fmt"
    12  
    13  	"github.com/sirupsen/logrus"
    14  )
    15  
    16  type chainResolver struct {
    17  	logger logrus.FieldLogger
    18  
    19  	urlResolver    resolver
    20  	verifyResolver resolver
    21  }
    22  
    23  func newChainResolver(urlResolver resolver, verifyResolver resolver) resolver {
    24  	return &chainResolver{
    25  		urlResolver:    urlResolver,
    26  		verifyResolver: verifyResolver,
    27  	}
    28  }
    29  
    30  func (r *chainResolver) Resolve(certs []*x509.Certificate) ([]*x509.Certificate, error) {
    31  	certs, err := r.urlResolver.Resolve(certs)
    32  	if err != nil {
    33  		return nil, fmt.Errorf("error while resolving certificates chain with URL: %v", err)
    34  	}
    35  
    36  	certs, err = r.verifyResolver.Resolve(certs)
    37  	if err != nil {
    38  		return nil, fmt.Errorf("error while resolving certificates chain with verification: %v", err)
    39  	}
    40  
    41  	return certs, err
    42  }