File: resolver_chain.go

package info (click to toggle)
gitlab-ci-multi-runner 14.10.1-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 31,248 kB
  • sloc: sh: 1,694; makefile: 384; asm: 79; ruby: 68
file content (38 lines) | stat: -rw-r--r-- 983 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// Inspired by https://github.com/zakjan/cert-chain-resolver/blob/1.0.3/certUtil/chain.go
// which is licensed on a MIT license.
//
// Shout out to Jan Žák (http://zakjan.cz) original author of `certUtil` package and other
// contributors who updated it!

package ca_chain

import (
	"crypto/x509"
	"fmt"
)

type chainResolver struct {
	urlResolver    resolver
	verifyResolver resolver
}

func newChainResolver(urlResolver, verifyResolver resolver) resolver {
	return &chainResolver{
		urlResolver:    urlResolver,
		verifyResolver: verifyResolver,
	}
}

func (r *chainResolver) Resolve(certs []*x509.Certificate) ([]*x509.Certificate, error) {
	certs, err := r.urlResolver.Resolve(certs)
	if err != nil {
		return nil, fmt.Errorf("error while resolving certificates chain with URL: %w", err)
	}

	certs, err = r.verifyResolver.Resolve(certs)
	if err != nil {
		return nil, fmt.Errorf("error while resolving certificates chain with verification: %w", err)
	}

	return certs, err
}