Files
go-unifi/docs/usage_examples.md
Mateusz Filipowicz 637809c663 feat: support Zone-Based Firewalls (#33)
* feat: support Zone-Based Firewalls

* chore: add usage example of zone-based firewall

* chore: add note to readme to support unifi controller v2

* fix: invalid path for reordering firewall zone policies
2025-02-20 18:48:04 +01:00

2.1 KiB

Usage Examples

This document demonstrates several common usage scenarios for the UniFi Go SDK client.

Listing Networks

List all available networks in a given site:

networks, err := c.ListNetwork(ctx, "site-name")
if err != nil {
    log.Fatalf("Error listing networks: %v", err)
}

for _, network := range networks {
    fmt.Printf("Network: %s\n", network.Name)
}

Creating a User

Create a new user assigned to the first available network:

// Assume networks have been retrieved as shown above
user, err := c.CreateUser(ctx, "site-name", &unifi.User{
    Name:      "My Network User",
    MAC:       "00:00:00:00:00:00",
    NetworkID: networks[0].ID,
    IP:        "10.0.21.37",
})
if err != nil {
    log.Fatalf("Error creating user: %v", err)
}

fmt.Printf("Created user: %s\n", user.Name)

Updating a Guest Access setting

Update the guest access setting for a network:

setting := &unifi.SettingGuestAccess{
    PortalCustomizedBoxColor: "#ff0000",
    PortalCustomizedSuccessText: "Welcome to the network!",
    PortalCustomized: true,
}

setting, err = c.UpdateSettingGuestAccess(ctx, "site-name", setting)
if err != nil {
    log.Fatalf("Error updating guest access setting: %v", err)
}
// Use the updated setting

Create a Firewall Zone

To create firewall zone:

fz, err := c.CreateFirewallZone(ctx, "default", &unifi.FirewallZone{
		Name:       "my-zone",
		NetworkIDs: []string{},
})
if err != nil {
    fmt.Printf("Error: %v\n", err)
} else {
    fmt.Printf("Firewall Zone created: %v\n", fz)
}

Then you can create a firewall zone policy (minimal example):

fzp, err := c.CreateFirewallZonePolicy(ctx, "default", &unifi.FirewallZonePolicy{
	Name:                "my-zone-policy",
	Action:              "REJECT",
	Enabled:             true,
	IPVersion:           "BOTH",
	Source: unifi.FirewallZonePolicySource{
		ZoneID: fz.ID,
	},
	Destination: unifi.FirewallZonePolicyDestination{
		ZoneID: fz.ID,
	},
	Schedule: unifi.FirewallZonePolicySchedule{
		Mode: "ALWAYS",
	},
})
if err != nil {
	fmt.Printf("Error: %v\n", err)
	return
} else {
	fmt.Printf("Firewall Zone Policy created: %v\n", fzp)
}