python312Packages.icontract: relax deps (#380554)
[NixPkgs.git] / pkgs / by-name / si / sing-geoip / main.go
blob8c2ac246fba4a500b473a51d8f078d8120af2ec1
1 func main() {
2 var err error
4 input := os.Args[1]
5 ruleSetOutput := "rule-set"
7 binary, err := os.ReadFile(input)
8 if err != nil {
9 panic(err)
11 metadata, countryMap, err := parse(binary)
12 if err != nil {
13 panic(err)
15 allCodes := make([]string, 0, len(countryMap))
16 for code := range countryMap {
17 allCodes = append(allCodes, code)
20 writer, err := newWriter(metadata, allCodes)
21 if err != nil {
22 panic(err)
24 err = write(writer, countryMap, "geoip.db", nil)
25 if err != nil {
26 panic(err)
29 writer, err = newWriter(metadata, []string{"cn"})
30 if err != nil {
31 panic(err)
33 err = write(writer, countryMap, "geoip-cn.db", []string{"cn"})
34 if err != nil {
35 panic(err)
38 err = os.MkdirAll(ruleSetOutput, 0o755)
39 if err != nil {
40 panic(err)
42 for countryCode, ipNets := range countryMap {
43 var headlessRule option.DefaultHeadlessRule
44 headlessRule.IPCIDR = make([]string, 0, len(ipNets))
45 for _, cidr := range ipNets {
46 headlessRule.IPCIDR = append(headlessRule.IPCIDR, cidr.String())
48 var plainRuleSet option.PlainRuleSet
49 plainRuleSet.Rules = []option.HeadlessRule{
51 Type: C.RuleTypeDefault,
52 DefaultOptions: headlessRule,
55 srsPath, _ := filepath.Abs(filepath.Join(ruleSetOutput, "geoip-"+countryCode+".srs"))
56 os.Stderr.WriteString("write " + srsPath + "\n")
57 outputRuleSet, err := os.Create(srsPath)
58 if err != nil {
59 panic(err)
61 err = srs.Write(outputRuleSet, plainRuleSet)
62 if err != nil {
63 outputRuleSet.Close()
64 panic(err)
66 outputRuleSet.Close()