File: resultset.go

package info (click to toggle)
golang-github-zmap-zlint 3.6.2-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 10,008 kB
  • sloc: sh: 162; makefile: 38
file content (73 lines) | stat: -rw-r--r-- 2,772 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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/*
 * ZLint Copyright 2024 Regents of the University of Michigan
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy
 * of the License at http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
 * implied. See the License for the specific language governing
 * permissions and limitations under the License.
 */

package zlint

import (
	"github.com/zmap/zcrypto/x509"
	"github.com/zmap/zlint/v3/lint"
)

// ResultSet contains the output of running all lints in a registry against
// a single certificate.
type ResultSet struct {
	Version         int64                       `json:"version"`
	Timestamp       int64                       `json:"timestamp"`
	Results         map[string]*lint.LintResult `json:"lints"`
	NoticesPresent  bool                        `json:"notices_present"`
	WarningsPresent bool                        `json:"warnings_present"`
	ErrorsPresent   bool                        `json:"errors_present"`
	FatalsPresent   bool                        `json:"fatals_present"`
}

// Execute lints on the given certificate with all of the lints in the provided
// registry. The ResultSet is mutated to trace the lint results obtained from
// linting the certificate.
func (z *ResultSet) executeCertificate(o *x509.Certificate, registry lint.Registry) {
	z.Results = make(map[string]*lint.LintResult, len(registry.Names()))
	// Run each lint from the registry.
	for _, lint := range registry.CertificateLints().Lints() {
		res := lint.Execute(o, registry.GetConfiguration())
		res.LintMetadata = lint.LintMetadata
		z.Results[lint.Name] = res
		z.updateErrorStatePresent(res)
	}
}

// Execute lints on the given CRL with all of the lints in the provided
// registry. The ResultSet is mutated to trace the lint results obtained from
// linting the CRL.
func (z *ResultSet) executeRevocationList(o *x509.RevocationList, registry lint.Registry) {
	z.Results = make(map[string]*lint.LintResult, len(registry.Names()))
	// Run each lints from the registry.
	for _, lint := range registry.RevocationListLints().Lints() {
		res := lint.Execute(o, registry.GetConfiguration())
		res.LintMetadata = lint.LintMetadata
		z.Results[lint.Name] = res
		z.updateErrorStatePresent(res)
	}
}

func (z *ResultSet) updateErrorStatePresent(result *lint.LintResult) {
	switch result.Status {
	case lint.Notice:
		z.NoticesPresent = true
	case lint.Warn:
		z.WarningsPresent = true
	case lint.Error:
		z.ErrorsPresent = true
	case lint.Fatal:
		z.FatalsPresent = true
	}
}