mirror of
https://github.com/juanfont/headscale.git
synced 2025-09-25 17:51:11 +02:00
policy: ensure same json opts
Signed-off-by: Kristoffer Dalby <kristoffer@tailscale.com>
This commit is contained in:
parent
bb44db32dc
commit
ccc9b68d93
@ -22,6 +22,13 @@ import (
|
|||||||
"tailscale.com/util/multierr"
|
"tailscale.com/util/multierr"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Global JSON options for consistent parsing across all struct unmarshaling
|
||||||
|
var policyJSONOpts = []json.Options{
|
||||||
|
json.DefaultOptionsV2(),
|
||||||
|
json.MatchCaseInsensitiveNames(true),
|
||||||
|
json.RejectUnknownMembers(true),
|
||||||
|
}
|
||||||
|
|
||||||
const Wildcard = Asterix(0)
|
const Wildcard = Asterix(0)
|
||||||
|
|
||||||
type Asterix int
|
type Asterix int
|
||||||
@ -728,7 +735,7 @@ type Aliases []Alias
|
|||||||
|
|
||||||
func (a *Aliases) UnmarshalJSON(b []byte) error {
|
func (a *Aliases) UnmarshalJSON(b []byte) error {
|
||||||
var aliases []AliasEnc
|
var aliases []AliasEnc
|
||||||
err := json.Unmarshal(b, &aliases)
|
err := json.Unmarshal(b, &aliases, policyJSONOpts...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -818,7 +825,7 @@ type AutoApprovers []AutoApprover
|
|||||||
|
|
||||||
func (aa *AutoApprovers) UnmarshalJSON(b []byte) error {
|
func (aa *AutoApprovers) UnmarshalJSON(b []byte) error {
|
||||||
var autoApprovers []AutoApproverEnc
|
var autoApprovers []AutoApproverEnc
|
||||||
err := json.Unmarshal(b, &autoApprovers)
|
err := json.Unmarshal(b, &autoApprovers, policyJSONOpts...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -913,7 +920,7 @@ type Owners []Owner
|
|||||||
|
|
||||||
func (o *Owners) UnmarshalJSON(b []byte) error {
|
func (o *Owners) UnmarshalJSON(b []byte) error {
|
||||||
var owners []OwnerEnc
|
var owners []OwnerEnc
|
||||||
err := json.Unmarshal(b, &owners)
|
err := json.Unmarshal(b, &owners, policyJSONOpts...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -988,7 +995,7 @@ func (g Groups) Contains(group *Group) error {
|
|||||||
// with "group:". If any group name is invalid, an error is returned.
|
// with "group:". If any group name is invalid, an error is returned.
|
||||||
func (g *Groups) UnmarshalJSON(b []byte) error {
|
func (g *Groups) UnmarshalJSON(b []byte) error {
|
||||||
var rawGroups map[string][]string
|
var rawGroups map[string][]string
|
||||||
if err := json.Unmarshal(b, &rawGroups); err != nil {
|
if err := json.Unmarshal(b, &rawGroups, policyJSONOpts...); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1024,7 +1031,7 @@ type Hosts map[Host]Prefix
|
|||||||
|
|
||||||
func (h *Hosts) UnmarshalJSON(b []byte) error {
|
func (h *Hosts) UnmarshalJSON(b []byte) error {
|
||||||
var rawHosts map[string]string
|
var rawHosts map[string]string
|
||||||
if err := json.Unmarshal(b, &rawHosts); err != nil {
|
if err := json.Unmarshal(b, &rawHosts, policyJSONOpts...); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1249,7 +1256,7 @@ type ACL struct {
|
|||||||
func (a *ACL) UnmarshalJSON(b []byte) error {
|
func (a *ACL) UnmarshalJSON(b []byte) error {
|
||||||
// First unmarshal into a map to filter out comment fields
|
// First unmarshal into a map to filter out comment fields
|
||||||
var raw map[string]any
|
var raw map[string]any
|
||||||
if err := json.Unmarshal(b, &raw); err != nil {
|
if err := json.Unmarshal(b, &raw, policyJSONOpts...); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1272,7 +1279,7 @@ func (a *ACL) UnmarshalJSON(b []byte) error {
|
|||||||
var temp aclAlias
|
var temp aclAlias
|
||||||
|
|
||||||
// Unmarshal into the temporary struct using the v2 JSON options
|
// Unmarshal into the temporary struct using the v2 JSON options
|
||||||
if err := json.Unmarshal(filteredBytes, &temp, json.DefaultOptionsV2(), json.MatchCaseInsensitiveNames(true)); err != nil {
|
if err := json.Unmarshal(filteredBytes, &temp, policyJSONOpts...); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1627,7 +1634,7 @@ func (g Groups) MarshalJSON() ([]byte, error) {
|
|||||||
|
|
||||||
func (a *SSHSrcAliases) UnmarshalJSON(b []byte) error {
|
func (a *SSHSrcAliases) UnmarshalJSON(b []byte) error {
|
||||||
var aliases []AliasEnc
|
var aliases []AliasEnc
|
||||||
err := json.Unmarshal(b, &aliases)
|
err := json.Unmarshal(b, &aliases, policyJSONOpts...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -1650,7 +1657,7 @@ func (a *SSHSrcAliases) UnmarshalJSON(b []byte) error {
|
|||||||
|
|
||||||
func (a *SSHDstAliases) UnmarshalJSON(b []byte) error {
|
func (a *SSHDstAliases) UnmarshalJSON(b []byte) error {
|
||||||
var aliases []AliasEnc
|
var aliases []AliasEnc
|
||||||
err := json.Unmarshal(b, &aliases)
|
err := json.Unmarshal(b, &aliases, policyJSONOpts...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -1778,7 +1785,7 @@ func unmarshalPolicy(b []byte) (*Policy, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ast.Standardize()
|
ast.Standardize()
|
||||||
if err = json.Unmarshal(ast.Pack(), &policy, json.MatchCaseInsensitiveNames(true), json.RejectUnknownMembers(true)); err != nil {
|
if err = json.Unmarshal(ast.Pack(), &policy, policyJSONOpts...); err != nil {
|
||||||
var serr *json.SemanticError
|
var serr *json.SemanticError
|
||||||
if errors.As(err, &serr) && serr.Err == json.ErrUnknownName {
|
if errors.As(err, &serr) && serr.Err == json.ErrUnknownName {
|
||||||
ptr := serr.JSONPointer
|
ptr := serr.JSONPointer
|
||||||
|
Loading…
Reference in New Issue
Block a user