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 }