Compare commits

..

12 Commits

Author SHA1 Message Date
958336b691 install go
All checks were successful
Build & Push Linode Webhook / build (push) Successful in 15s
2025-06-23 19:13:38 +02:00
d950e6cd3d install go
Some checks failed
Build & Push Linode Webhook / build (push) Failing after 1s
2025-06-23 19:12:32 +02:00
768a4c96d4 install go
Some checks failed
Build & Push Linode Webhook / build (push) Failing after 1s
2025-06-23 19:12:04 +02:00
76a94efce3 build
Some checks failed
Build & Push Linode Webhook / build (push) Failing after 2s
2025-06-23 19:02:39 +02:00
c4bb6a623f build
Some checks failed
Build & Push Linode Webhook / build (push) Failing after 3s
2025-06-23 19:02:04 +02:00
d855e43535 build
Some checks failed
Build & Push Linode Webhook / build (push) Failing after 2s
2025-06-23 19:01:10 +02:00
dd0f69c35c Install node?
All checks were successful
Build & Push Linode Webhook / build (push) Successful in 2s
2025-06-23 18:59:39 +02:00
bda1989023 Install node?
Some checks failed
Build & Push Linode Webhook / build (push) Failing after 0s
2025-06-23 18:58:52 +02:00
996c308609 Install node?
Some checks failed
Build & Push Linode Webhook / build (push) Failing after 0s
2025-06-23 18:58:21 +02:00
83a016d5da Test an action
Some checks failed
Build & Push Linode Webhook / build (push) Failing after 1s
2025-06-23 18:56:35 +02:00
54bcc0897c Move repo
Some checks failed
/ yamllint (push) Failing after 2s
/ build (push) Failing after 23s
/ test (push) Has been skipped
/ lint (push) Failing after 23s
/ generate (push) Has been skipped
2025-06-23 18:36:07 +02:00
508181d1ad 16 create firewall policy api (#17)
* Create firewall policy
2025-04-19 00:01:37 +02:00
6 changed files with 71 additions and 46 deletions

View File

@@ -0,0 +1,18 @@
name: Build & Push Linode Webhook
on:
push:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Install node and go
run: apk add nodejs go
- name: Check out repository code
uses: actions/checkout@v4
- name: Build
run: cd unifi && go build .

2
go.mod
View File

@@ -1,4 +1,4 @@
module github.com/vegardengen/go-unifi module gitea.engen.priv.no/klauvsteinen/go-unifi
go 1.21 go 1.21

View File

@@ -5,7 +5,7 @@ import (
"testing" "testing"
"github.com/tj/assert" "github.com/tj/assert"
"github.com/vegardengen/go-unifi/unifi" "gitea.engen.priv.no/klauvsteinen/go-unifi/unifi"
) )
func TestAccountMarshalJSON(t *testing.T) { func TestAccountMarshalJSON(t *testing.T) {

View File

@@ -5,6 +5,46 @@ import (
"fmt" "fmt"
) )
type FirewallDestination struct {
IPGroupID string `json:"ip_group_id"`
IPs []string `json:"ips,omitempty"`
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,omitempty"`
Port string `json:"port,omitempty"`
PortGroupID string `json:"port_group_id"`
PortMatchingType string `json:"port_matching_type"`
Regions []string `json:"regions,omitempty"`
ZoneID string `json:"zone_id"`
}
type FirewallSource struct {
ClientMacs []string `json:"client_macs,omitempty"`
IPs []string `json:"ips,omitempty"`
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,omitempty"`
MatchingTargetType string `json:"matching_target_type,omitempty"`
NetworkIDs []string `json:"network_ids,omitempty"`
Port string `json:"port,omitempty"`
PortMatchingType string `json:"port_matching_type,omitempty"`
ZoneID string `json:"zone_id,omitempty"`
}
type FirewallSchedule struct {
Mode string `json:"mode"`
DateStart string `json:"date_start,omitempty"`
DateEnd string `json:"date_end,omitempty"`
RepeatOnDays []string `json:"repeat_on_days"`
TimeAllDay bool `json:"time_all_day"`
TimeRangeStart string `json:"time_range_start,omitempty"`
TimeRangeEnd string `json:"time_range_end,omitempty"`
}
type FirewallPolicy struct { type FirewallPolicy struct {
ID string `json:"_id,omitempty"` ID string `json:"_id,omitempty"`
@@ -18,56 +58,23 @@ type FirewallPolicy struct {
ConnectionStates []string `json:"connection_states"` ConnectionStates []string `json:"connection_states"`
CreateAllowRespond bool `json:"create_allow_respond"` CreateAllowRespond bool `json:"create_allow_respond"`
Description string `json:"description"` Description string `json:"description"`
Destination struct { Destination FirewallDestination `json:"destination"`
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"`
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"`
} `json:"destination"`
Enabled bool `json:"enabled"` Enabled bool `json:"enabled"`
IcmpTypename string `json:"icmp_typename"` ICMPTypename string `json:"icmp_typename"`
IcmpV6Typename string `json:"icmp_v6_typename"` ICMPV6Typename string `json:"icmp_v6_typename"`
Index int64 `json:"index"` Index int64 `json:"index"`
IPVersion string `json:"ip_version"` IPVersion string `json:"ip_version"`
Logging bool `json:"logging"` Logging bool `json:"logging"`
MatchIPSec bool `json:"match_ip_sec"` MatchIPSec bool `json:"match_ip_sec"`
MatchIPSecType string `json:"match_ip_sec_type"` MatchIPSecType string `json:"match_ip_sec_type,omitempty"`
MatchOppositeProtocol bool `json:"match_opposite_protocol"` MatchOppositeProtocol bool `json:"match_opposite_protocol"`
Name string `json:"name"` Name string `json:"name"`
OriginID string `json:"origin_id"` OriginID string `json:"origin_id,omitempty"`
OriginType string `json:"origin_type"` OriginType string `json:"origin_type,omitempty"`
Predefined bool `json:"predefined"` Predefined bool `json:"predefined"`
Protocol string `json:"protocol"` Protocol string `json:"protocol"`
Schedule struct { Schedule FirewallSchedule `json:"schedule"`
Mode string `json:"mode"` Source FirewallSource `json:"source"`
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"`
} `json:"schedule"`
Source 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"`
} `json:"source"`
// Role string `json:"role"` // Role string `json:"role"`
} }
@@ -105,7 +112,7 @@ func (c *Client) DeleteFirewallPolicy(ctx context.Context, site, id string) erro
return nil return nil
} }
func (c *Client) CreaateFirewallPolicy(ctx context.Context, site string, d *FirewallPolicy) (*FirewallPolicy, error) { func (c *Client) CreateFirewallPolicy(ctx context.Context, site string, d *FirewallPolicy) (*FirewallPolicy, error) {
var respBody FirewallPolicy var respBody FirewallPolicy
err := c.do_versioned(ctx, "V2", "POST", fmt.Sprintf("site/%s/firewall-policies", site), d, &respBody) err := c.do_versioned(ctx, "V2", "POST", fmt.Sprintf("site/%s/firewall-policies", site), d, &respBody)

View File

@@ -5,7 +5,7 @@ import (
"reflect" "reflect"
"testing" "testing"
"github.com/vegardengen/go-unifi/unifi" "gitea.engen.priv.no/klauvsteinen/go-unifi/unifi"
) )
func TestNetworkUnmarshalJSON(t *testing.T) { func TestNetworkUnmarshalJSON(t *testing.T) {

View File

@@ -255,7 +255,7 @@ func (c *Client) do_versioned(ctx context.Context, version, method, relativeURL
c.csrf = resp.Header.Get("X-Csrf-Token") c.csrf = resp.Header.Get("X-Csrf-Token")
} }
if resp.StatusCode != http.StatusOK { if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated {
errBody := struct { errBody := struct {
Meta meta `json:"meta"` Meta meta `json:"meta"`
Data []struct { Data []struct {