mirror of
https://github.com/StackExchange/dnscontrol.git
synced 2025-12-09 05:36:27 +08:00
<!--
## Before submiting a pull request
Please make sure you've run the following commands from the root
directory.
bin/generate-all.sh
(this runs commands like "go generate", fixes formatting, and so on)
## Release changelog section
Help keep the release changelog clear by pre-naming the proper section
in the GitHub pull request title.
Some examples:
* CICD: Add required GHA permissions for goreleaser
* DOCS: Fixed providers with "contributor support" table
* ROUTE53: Allow R53_ALIAS records to enable target health evaluation
More examples/context can be found in the file .goreleaser.yml under the
'build' > 'changelog' key.
!-->
https://github.com/StackExchange/dnscontrol/issues/420
Please create the GitHub label 'provider-ALIDNS'
---------
Co-authored-by: Tom Limoncelli <6293917+tlimoncelli@users.noreply.github.com>
52 lines
1.2 KiB
Go
52 lines
1.2 KiB
Go
package rejectif
|
|
|
|
import "github.com/StackExchange/dnscontrol/v4/models"
|
|
|
|
// Auditor stores a list of checks to be executed during Audit().
|
|
type Auditor struct {
|
|
checksFor map[string][]checker
|
|
}
|
|
|
|
type checker = func(*models.RecordConfig) error
|
|
|
|
// Add registers a function to call on each record of a given type.
|
|
func (aud *Auditor) Add(rtype string, fn checker) {
|
|
if aud.checksFor == nil {
|
|
aud.checksFor = map[string][]checker{}
|
|
}
|
|
aud.checksFor[rtype] = append(aud.checksFor[rtype], fn)
|
|
|
|
// SPF records get any checkers that TXT records do.
|
|
if rtype == "TXT" {
|
|
aud.Add("SPF", fn)
|
|
}
|
|
}
|
|
|
|
// Audit performs the audit. For each record it calls each function in
|
|
// the list of checks.
|
|
func (aud *Auditor) Audit(records models.Records) (errs []error) {
|
|
// No checks? Exit early.
|
|
if aud.checksFor == nil {
|
|
return nil
|
|
}
|
|
|
|
// For each record, call the checks for that type, gather errors.
|
|
for _, rc := range records {
|
|
// First, run type-specific checks
|
|
for _, f := range aud.checksFor[rc.Type] {
|
|
e := f(rc)
|
|
if e != nil {
|
|
errs = append(errs, e)
|
|
}
|
|
}
|
|
// Then, run wildcard checks that apply to all record types
|
|
for _, f := range aud.checksFor["*"] {
|
|
e := f(rc)
|
|
if e != nil {
|
|
errs = append(errs, e)
|
|
}
|
|
}
|
|
}
|
|
|
|
return errs
|
|
}
|