// This file is part of the happyDomain (R) project. // Copyright (c) 2020-2026 happyDomain // Authors: Pierre-Olivier Mercier, et al. // // This program is offered under a commercial and under the AGPL license. // For commercial licensing, contact us at . // // For AGPL licensing: // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . package checker import "encoding/json" // ObservationKeyNSRestrictions is the observation key for NS security // restrictions data. const ObservationKeyNSRestrictions = "ns_restrictions" // NSRestrictionsReport contains the results of NS security restriction checks. type NSRestrictionsReport struct { Servers []NSServerResult `json:"servers"` } // NSServerResult holds the check results for a single nameserver IP. type NSServerResult struct { Name string `json:"name"` Address string `json:"address"` Checks []NSCheckItem `json:"checks"` } // NSCheckItem represents one security check for an NS server. type NSCheckItem struct { Name string `json:"name"` OK bool `json:"ok"` Detail string `json:"detail,omitempty"` } // serviceMessage is a minimal local copy of happydns.ServiceMessage matching // the JSON wire shape, so this plugin does not depend on the happyDomain core // repository. type serviceMessage struct { Type string `json:"_svctype"` Domain string `json:"_domain"` Service json.RawMessage `json:"Service"` }