diff --git a/unifi/firewall_zone.go b/unifi/firewall_zone.go new file mode 100644 index 0000000..07e86c5 --- /dev/null +++ b/unifi/firewall_zone.go @@ -0,0 +1,48 @@ +package unifi + +import ( + "context" + "fmt" +) + +type FirewallZone struct { + ID string `json:"_id,omitempty"` + + // Hidden bool `json:"attr_hidden,omitempty"` + // HiddenID string `json:"attr_hidden_id,omitempty"` + // NoDelete bool `json:"attr_no_delete,omitempty"` + // NoEdit bool `json:"attr_no_edit,omitempty"` + + Name string `json:"name"` + DefaultZone bool `json:"default_zone,omitempty"` + NetworkIDs []string `json:"network_ids,omitempty"` + ZoneKey string `json:"zone_key,omitempty"` + + // Role string `json:"role"` +} + +func (c *Client) ListFirewallZones(ctx context.Context, site string) ([]FirewallZone, error) { + var respBody []FirewallZone + + err := c.do_versioned(ctx, "V2", "GET", fmt.Sprintf("site/%s/firewall/zone", site), nil, &respBody) + if err != nil { + return nil, err + } + + return respBody, nil +} + +func (c *Client) GetFirewallZone(ctx context.Context, site, id string) (*FirewallZone, error) { + firewallzones, err := c.ListFirewallZones(ctx, site) + if err != nil { + return nil, err + } + + for _, z := range firewallzones { + if z.ID == id { + return &z, nil + } + } + + return nil, &NotFoundError{} +}