capi/lib/model/lint_result.go (107 lines of code) (raw):
package model
import (
"crypto/x509"
"github.com/mozilla/CCADB-Tools/capi/lib/certificateUtils"
"github.com/mozilla/CCADB-Tools/capi/lib/lint/certlint"
"github.com/mozilla/CCADB-Tools/capi/lib/lint/x509lint"
)
type ChainLintResult struct {
Subject string
Leaf CertificateLintResult
Intermediates []CertificateLintResult
Opinion Opinion
Error string
}
func NewChainLintResult(subject string) ChainLintResult {
return ChainLintResult{
Subject: subject,
}
}
func (c *ChainLintResult) Finalize(leaf CertificateLintResult, intermediates []CertificateLintResult) {
c.Leaf = leaf
c.Intermediates = intermediates
c.Opinion = NewOpinion()
c.Opinion.Result = PASS
interpretLint(c.Leaf, &c.Opinion)
for _, intermediate := range intermediates {
interpretLint(intermediate, &c.Opinion)
}
}
func interpretLint(c CertificateLintResult, opinion *Opinion) {
for _, err := range c.X509Lint.Errors {
opinion.Result = FAIL
opinion.Errors = append(opinion.Errors, Concern{
Raw: err,
Interpretation: "",
Advise: "",
})
}
if err := c.X509Lint.CmdError; err != nil {
opinion.Result = FAIL
opinion.Errors = append(opinion.Errors, Concern{
Raw: *err,
Interpretation: "",
Advise: "",
})
}
for _, err := range c.Certlint.Certlint.Errors {
opinion.Result = FAIL
opinion.Errors = append(opinion.Errors, Concern{
Raw: err,
Interpretation: "",
Advise: "",
})
}
if err := c.Certlint.Certlint.CmdError; err != nil {
opinion.Result = FAIL
opinion.Errors = append(opinion.Errors, Concern{
Raw: *err,
Interpretation: "",
Advise: "",
})
}
for _, err := range c.Certlint.Cablint.Errors {
opinion.Result = FAIL
opinion.Errors = append(opinion.Errors, Concern{
Raw: err,
Interpretation: "",
Advise: "",
})
}
for _, err := range c.Certlint.Cablint.Fatal {
opinion.Result = FAIL
opinion.Errors = append(opinion.Errors, Concern{
Raw: err,
Interpretation: "",
Advise: "",
})
}
for _, err := range c.Certlint.Cablint.Bug {
opinion.Result = FAIL
opinion.Errors = append(opinion.Errors, Concern{
Raw: err,
Interpretation: "",
Advise: "",
})
}
if err := c.Certlint.Cablint.CmdError; err != nil {
opinion.Result = FAIL
opinion.Errors = append(opinion.Errors, Concern{
Raw: *err,
Interpretation: "",
Advise: "",
})
}
}
type CertificateLintResult struct {
X509Lint x509lint.X509Lint
Certlint certlint.Certlint
CrtSh string
}
func NewCertificateLintResult(original *x509.Certificate, X509 x509lint.X509Lint, clint certlint.Certlint) CertificateLintResult {
return CertificateLintResult{
X509Lint: X509,
Certlint: clint,
CrtSh: "https://crt.sh/?q=" + certificateUtils.FingerprintOf(original),
}
}