capi/lib/model/result.go (92 lines of code) (raw):

/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ package model import ( "crypto/x509" "encoding/json" "github.com/mozilla/CCADB-Tools/capi/lib/certificateUtils" "github.com/mozilla/CCADB-Tools/capi/lib/expiration" "github.com/mozilla/CCADB-Tools/capi/lib/revocation/crl" "github.com/mozilla/CCADB-Tools/capi/lib/revocation/ocsp" ) type TestWebsiteResult struct { SubjectURL string RecordID string `json:"RecordID,omitempty"` Expectation string Chain ChainResult Opinion Opinion Error string } func NewTestWebsiteResult(subject, expectation string) TestWebsiteResult { return TestWebsiteResult{ SubjectURL: subject, Expectation: expectation, Opinion: NewOpinion(), } } func (t TestWebsiteResult) SetRecordID(id string) TestWebsiteResult { t.RecordID = id return t } type ChainResult struct { Leaf CertificateResult Intermediates []CertificateResult Root CertificateResult } type OpinionResult = bool const ( PASS OpinionResult = true FAIL OpinionResult = false ) type Opinion struct { Result OpinionResult // Whether this opinion thinks the run is bad in some way. Errors []Concern } func (o Opinion) MarshalJSON() ([]byte, error) { var result string switch o.Result { case PASS: result = "PASS" case FAIL: result = "FAIL" } return json.Marshal(struct { Result string Errors []Concern }{ Result: result, Errors: o.Errors, }) } func NewOpinion() Opinion { return Opinion{ Result: FAIL, Errors: make([]Concern, 0), } } func (o *Opinion) Append(other Opinion) { o.Errors = append(o.Errors, other.Errors...) } type Concern struct { Raw string // The raw response from, say, the OCSP or certutil tools Interpretation string // What this tool thinks is wrong. Advise string // Any advise for troubleshooting } type CertificateResult struct { *x509.Certificate `json:"-"` Fingerprint string CrtSh string CommonName string OCSP []ocsp.OCSP CRL []crl.CRL Expiration expiration.ExpirationStatus } func NewCeritifcateResult(certificate *x509.Certificate, ocspResonse []ocsp.OCSP, crlStatus []crl.CRL, expirationStatus expiration.ExpirationStatus) CertificateResult { return CertificateResult{ certificate, certificateUtils.FingerprintOf(certificate), "https://crt.sh/?q=" + certificateUtils.FingerprintOf(certificate), certificate.Subject.CommonName, ocspResonse, crlStatus, expirationStatus, } }