policy: allow fetching ASN directly via RADb WHOIS service

This commit is contained in:
WeebDataHoarder
2025-04-23 18:58:45 +02:00
parent 612362dbe5
commit a0224cb21c
5 changed files with 195 additions and 13 deletions

View File

@@ -4,6 +4,7 @@ import (
"encoding/json"
"errors"
"fmt"
"git.gammaspectra.live/git/go-away/utils"
"github.com/itchyny/gojq"
"io"
"net"
@@ -13,16 +14,19 @@ import (
)
type Network struct {
// Fetches
Url *string `yaml:"url,omitempty"`
File *string `yaml:"file,omitempty"`
ASN *int `yaml:"asn,omitempty"`
// Filtering
JqPath *string `yaml:"jq-path,omitempty"`
Regex *string `yaml:"regex,omitempty"`
Prefixes []string `yaml:"prefixes,omitempty"`
}
func (n Network) FetchPrefixes(c *http.Client) (output []net.IPNet, err error) {
func (n Network) FetchPrefixes(c *http.Client, whois *utils.RADb) (output []net.IPNet, err error) {
if len(n.Prefixes) > 0 {
for _, prefix := range n.Prefixes {
ipNet, err := parseCIDROrIP(prefix)
@@ -51,6 +55,12 @@ func (n Network) FetchPrefixes(c *http.Client) (output []net.IPNet, err error) {
}
defer file.Close()
reader = file
} else if n.ASN != nil {
result, err := whois.FetchASNets(*n.ASN)
if err != nil {
return nil, fmt.Errorf("failed to fetch ASN %d: %v", *n.ASN, err)
}
return result, nil
} else {
if len(output) > 0 {
return output, nil