Compare commits

..

6 Commits

Author SHA1 Message Date
d83c354874 Missing field 2025-04-17 10:20:27 +02:00
861a985dd0 Remove some anonymous structs 2025-04-17 10:08:03 +02:00
e5b81b217f Create firewall policy 2025-04-17 02:11:29 +02:00
0e9e9cb8a3 Merge pull request #15 from vegardengen/14-support-firewall-zones
Support firewall zones
2025-04-14 12:39:39 +02:00
42d7f4131b Support firewall zones 2025-04-14 12:38:46 +02:00
be515d2e6f Merge pull request #13 from vegardengen/12-support-v2-network-api
Add do_versioned and make do wrap do_versioned
2025-04-14 12:35:44 +02:00
2 changed files with 189 additions and 0 deletions

141
unifi/firewall_policy.go Normal file
View File

@@ -0,0 +1,141 @@
package unifi
import (
"context"
"fmt"
)
type FirewallDestination struct {
IPGroupID string `json:"ip_group_id"`
Ips []string `json:"ips"`
MatchOppositeIps bool `json:"match_opposite_ips"`
MatchOppositePorts bool `json:"match_opposite_ports"`
MatchingTarget string `json:"matching_target"`
MatchingTargetType string `json:"matching_target_type"`
NetworkIDs [] string `json:"network_ids"`
Port string `json:"port"`
PortGroupID string `json:"port_group_id"`
PortMatchingType string `json:"port_matching_type"`
Regions []string `json:"regions"`
ZoneID string `json:"zone_id"`
}
type FirewallSource struct {
ClientMacs []string `json:"client_macs"`
Ips []string `json:"ips"`
MatchMac bool `json:"match_mac"`
MatchOppositeIps bool `json:"match_opposite_ips"`
MatchOppositeNetworks bool `json:"match_opposite_networks"`
MatchOppositePorts bool `json:"match_opposite_ports"`
MatchingTarget string `json:"matching_target"`
MatchingTargetType string `json:"matching_target_type"`
NetworkIDs []string `json:"network_ids"`
Port string `json:"port"`
PortMatchingType string `json:"port_matching_type"`
ZoneID string `json:"zone_id"`
}
type FirewallSchedule struct {
Mode string `json:"mode"`
DateStart string `json:"date_start"`
DateEnd string `json:"date_end"`
RepeatOnDays []string `json:"repeat_on_days"`
TimeAllDay bool `json:"time_all_day"`
TimeRangeStart string `json:"time_range_start"`
TimeRangeEnd string `json:"time_range_end"`
}
type FirewallPolicy 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"`
Action string `json:"action"`
ConnectionStateType string `json:"connection_state_type"`
ConnectionStates []string `json:"connection_states"`
CreateAllowRespond bool `json:"create_allow_respond"`
Description string `json:"description"`
Destination FirewallDestination `json:"destination"`
Enabled bool `json:"enabled"`
IcmpTypename string `json:"icmp_typename"`
IcmpV6Typename string `json:"icmp_v6_typename"`
Index int64 `json:"index"`
IPVersion string `json:"ip_version"`
Logging bool `json:"logging"`
MatchIPSec bool `json:"match_ip_sec"`
MatchIPSecType string `json:"match_ip_sec_type"`
MatchOppositeProtocol bool `json:"match_opposite_protocol"`
Name string `json:"name"`
OriginID string `json:"origin_id"`
OriginType string `json:"origin_type"`
Predefined bool `json:"predefined"`
Protocol string `json:"protocol"`
Schedule FirewallSchedule `json:"schedule"`
Source FirewallSource `json:"source"`
// Role string `json:"role"`
}
func (c *Client) ListFirewallPolicy(ctx context.Context, site string) ([]FirewallPolicy, error) {
var respBody []FirewallPolicy
err := c.do_versioned(ctx, "V2", "GET", fmt.Sprintf("site/%s/firewall-policies", site), nil, &respBody)
if err != nil {
return nil, err
}
return respBody, nil
}
func (c *Client) GetFirewallPolicy(ctx context.Context, site, id string) (*FirewallPolicy, error) {
var respBody FirewallPolicy
err := c.do_versioned(ctx, "V2", "GET", fmt.Sprintf("site/%s/firewall-policies/%s", site,id), nil, &respBody)
if err != nil {
return nil, &NotFoundError{}
}
new := respBody
return &new, nil
}
func (c *Client) DeleteFirewallPolicy(ctx context.Context, site, id string) error {
var respBody FirewallPolicy
err := c.do_versioned(ctx, "V2", "DELETE", fmt.Sprintf("site/%s/firewall-policies/%s", site, id), nil, &respBody)
if err != nil {
return err
}
return nil
}
func (c *Client) CreaateFirewallPolicy(ctx context.Context, site string, d *FirewallPolicy) (*FirewallPolicy, error) {
var respBody FirewallPolicy
err := c.do_versioned(ctx, "V2", "POST", fmt.Sprintf("site/%s/firewall-policies", site), d, &respBody)
if err != nil {
return nil, err
}
new := respBody
return &new, nil
}
func (c *Client) UpdateFirewallPolicy(ctx context.Context, site string, d *FirewallPolicy) (*FirewallPolicy, error) {
var respBody FirewallPolicy
err := c.do_versioned(ctx, "V2", "PUT", fmt.Sprintf("site/%s/firewall-policies/%s", site, d.ID), d, &respBody)
if err != nil {
return nil, err
}
new := respBody
return &new, nil
}

48
unifi/firewall_zone.go Normal file
View File

@@ -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{}
}