Work in progress in rule generation

This commit is contained in:
Juan Font 2021-07-03 17:31:32 +02:00
parent bbd6a67c46
commit 136aab9dc8
4 changed files with 169 additions and 38 deletions

View file

@ -3,6 +3,7 @@ package headscale
import (
"strings"
"github.com/tailscale/hujson"
"inet.af/netaddr"
)
@ -22,12 +23,9 @@ type ACL struct {
type Groups map[string][]string
type Hosts map[string]string
type Hosts map[string]netaddr.IPPrefix
type TagOwners struct {
TagMontrealWebserver []string `json:"tag:montreal-webserver"`
TagAPIServer []string `json:"tag:api-server"`
}
type TagOwners map[string][]string
type ACLTest struct {
User string `json:"User"`
@ -35,6 +33,27 @@ type ACLTest struct {
Deny []string `json:"Deny,omitempty"`
}
func (h *Hosts) UnmarshalJSON(data []byte) error {
hosts := Hosts{}
hs := make(map[string]string)
err := hujson.Unmarshal(data, &hs)
if err != nil {
return err
}
for k, v := range hs {
if !strings.Contains(v, "/") {
v = v + "/32"
}
prefix, err := netaddr.ParseIPPrefix(v)
if err != nil {
return err
}
hosts[k] = prefix
}
*h = hosts
return nil
}
// IsZero is perhaps a bit naive here
func (p ACLPolicy) IsZero() bool {
if len(p.Groups) == 0 && len(p.Hosts) == 0 && len(p.ACLs) == 0 {
@ -42,18 +61,3 @@ func (p ACLPolicy) IsZero() bool {
}
return false
}
func (p ACLPolicy) GetHosts() (*map[string]netaddr.IPPrefix, error) {
hosts := make(map[string]netaddr.IPPrefix)
for k, v := range p.Hosts {
if !strings.Contains(v, "/") {
v = v + "/32"
}
prefix, err := netaddr.ParseIPPrefix(v)
if err != nil {
return nil, err
}
hosts[k] = prefix
}
return &hosts, nil
}