147 Commits
Author SHA1 Message Date
Adam NadrowskiandClaude Opus 4.6 1baee2070f fix: add omitempty to Network string fields to prevent sending empty values
Network create/update requests were sending empty strings for unset fields
(firewall_zone_id, radiusprofile_id, usergroup_id, dhcpd_dns_*, wan_dns*,
and 20+ others) because their JSON struct tags lacked omitempty. The UniFi
controller interprets an explicit empty firewall_zone_id as a zone
disassociation, which triggers a global zone rebuild that causes all zone
policies to disappear from the UI.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 23:00:02 -05:00
shadyeipandClaude Opus 4.5 74c1746ff5 feat: add network_ids support to FirewallZonePolicyDestination
- Add NetworkIDs and MatchOppositeNetworks fields to destination struct
- Add NETWORK to MatchingTarget validation for destination
- Update codegen schema to include destination network targeting
- Add AggregateNumPorts to DevicePortOverrides (compatibility fix)

This enables firewall zone policies to target specific destination
networks, matching the existing source.network_ids functionality.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 13:26:28 -05:00
filipowmandMateusz Filipowicz 831fea8c4b feat: update to the controller version 9.2.87 2025-06-23 10:01:10 +02:00
BrendannandGitHub 88d631c434 fix: updated FirewallZonePolicy.json to handle port list and ranges (#68) 2025-04-02 09:49:39 +02:00
Mateusz FilipowiczandGitHub 4814504c98 feat: support auto allow return traffic for firewall zone policy with create_allow_respond (#60) 2025-03-21 17:12:33 +01:00
Mateusz FilipowiczandGitHub bfa3bba50d fix: do not omit empty portal_customized_bg_image_filename and portal_customized_logo_filename (#59) 2025-03-21 16:58:24 +01:00
Mateusz FilipowiczandGitHub b6512ab793 fix: perform client-side filtering on GET firewall zone, because API for getting single zone by ID does not exist (#58) 2025-03-20 20:42:16 +01:00
Mateusz FilipowiczandGitHub a931ceb6bf fix: remove match_mac from firewall zone destination which is not supported (#57) 2025-03-20 19:54:47 +01:00
Mateusz FilipowiczandGitHub 12bf4bae30 feat: support list of MAC addresses for Firewall Zone Policy (#56) 2025-03-20 19:54:13 +01:00
Mateusz FilipowiczandGitHub 1def1e4ec4 fix: adjust firewall zone policy resource date attributes (#54)
* fix: adjust firewall zone policy resource date attributes
2025-03-18 00:08:25 +01:00
Mateusz FilipowiczandGitHub c8a3b96575 fix: adjust guest access settings (#53) 2025-03-17 04:09:53 +01:00
Mateusz FilipowiczandGitHub 873818ddac feat: support Remember Me for prolonging session validity on user/pass authentication (#52) 2025-03-16 11:48:44 +01:00
Mateusz FilipowiczandGitHub e41cfe08e2 fix: use omitEmpty only on hotspot for SettingIps (#51) 2025-03-16 02:18:36 +01:00
Mateusz FilipowiczandGitHub 98885a12a3 fix: allow empty fields in SettingMgmt (#50) 2025-03-14 12:27:01 +01:00
Mateusz Filipowicz a10b02ca2c fix: revert allowed empty fields for NTP servers 2025-03-11 00:54:44 +01:00
Mateusz FilipowiczandGitHub 55cfe22636 fix: allow more empty fields on rsyslogd, NTP, IPS and USG settings (#45) 2025-03-05 12:29:46 +01:00
Mateusz FilipowiczandGitHub 278a72fbb9 feat: add support for uploading Hotspot Captive Portal files (like background image, logo) (#42)
* feat: add support for uploading Hotspot Captive Portal files (like background image, logo)

* feat: add UploadPortalFileFromReader
2025-03-03 02:03:10 +01:00
Mateusz Filipowicz bdc73a9811 docs: fix invalid godoc for generated settings methods 2025-03-02 22:27:49 +01:00
Mateusz FilipowiczandGitHub a5955a6358 feat: support checking supported and enabled controller features (#41)
* feat: support checking supported and enabled controller features

* linting
2025-03-02 22:22:18 +01:00
Mateusz FilipowiczandGitHub 4e6e9d97b7 fix: add missing ip_group_id to firewall zone policy to support firewall groups of address-group type (ipv4) (#39)
fixes #38
2025-03-02 21:15:18 +01:00
Mateusz FilipowiczandGitHub bbc373a354 fix: explicitly set Setting key when updating a settings (#37) 2025-02-23 14:00:19 +01:00
Mateusz FilipowiczandGitHub e79dcb13f0 feat: add logging and support for custom logger (#36)
* feat: add support for logging

* fix linting

* chore: remove old APIError in favor of ServerError
2025-02-23 12:59:46 +01:00
Mateusz FilipowiczandGitHub 95a4ff87ea fix: add missing field mapping for settings (#35)
* feat: add missing field mapping for settings

* fix: guest access settings expire should be int
2025-02-21 16:53:43 +01:00
Mateusz FilipowiczandGitHub ae23f73810 fix: passing setting response body as pointer to Post method (#34) 2025-02-21 15:59:06 +01:00
Mateusz FilipowiczandGitHub 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
Mateusz FilipowiczandGitHub 16f71e7fe9 feat: add Version method to client to provide system version information (#32) 2025-02-19 09:19:20 +01:00
Mateusz FilipowiczandGitHub d3a3d5a342 feat: allow creating own http.RoundTripper for http.Client with HttpRoundTripperProvider when customizing pre-configured http.Transport with HttpTransportCustomizer is not sufficient (#31)
feat: allow creating own http.RoundTripper for http.Client with `HttpRoundTripperProvider` when customizing pre-configured http.Transport with `HttpTransportCustomizer` is not sufficient
2025-02-19 01:28:11 +01:00
Mateusz FilipowiczandGitHub 7c7ef98c03 feat: rename HttpCustomizer to HttpTransportCustomizer and make it return http.Transport that is later used (#30)
* feat: rename HttpCustomizer to HttpTransportCustomizer and make it return http.Transport that is later used

* linting
2025-02-19 01:03:21 +01:00
Mateusz FilipowiczandGitHub 35e7b2c3cc docs: add detailed usage documentation together with examples (#29)
* feat: rename Pass to Password in ClientConfig

* docs: add more detailed usage documentation together with examples

* chore: update issue templates

* docs: add codeowners, code of conduct and contributing docs

* chore: add editorconfig

* chore: apply linter
2025-02-18 22:36:08 +01:00
Mateusz FilipowiczandGitHub 7432260d3e feat: expose all available actions on all resources through Client (#27) 2025-02-18 10:23:18 +01:00
Mateusz FilipowiczandGitHub 7b35725921 feat(experimental): add support for reading and updating all settings (#25) 2025-02-18 07:43:04 +01:00
Mateusz FilipowiczandGitHub 0e2736fa54 feat: remove deprecated SettingProviderCapabilities (#24) 2025-02-17 17:06:14 +01:00
Mateusz FilipowiczandGitHub aa188a6faa feat: add API v2 support by adding APGroup and DNSRecord resource handling with generated code (#23)
* feat: add API v2 support by adding APGroup and DNSRecord resource handling with generated code

* fix tests
2025-02-17 15:39:54 +01:00
Mateusz FilipowiczandGitHub dca894e8e7 feat: use Client interface instead of client struct when interacting with UniFi SDK (#21)
* feat: use Client interface instead of client struct when interacting with UniFi SDK

Breaking change!

* chore: linting

* chore: linting
2025-02-17 09:38:41 +01:00
Mateusz Filipowicz c6e20b675c refactor: major refactor of unifi.go to split it into multiple files for cohesiveness and readability.
Even more documentation
2025-02-10 22:59:39 +01:00
Mateusz Filipowicz 473a5d0d5c chore: increase test coverage of unifi 2025-02-10 19:02:30 +01:00
Mateusz FilipowiczandGitHub 35b786277c feat: use sysinfo API for getting system information with fallback to old API (#10)
* feat: use sysinfo API for getting system information with fallback to old API

* chore: apply linting
2025-02-10 18:43:20 +01:00
Mateusz FilipowiczandGitHub 7f5968314d feat: make error handling more verbose and collect more error information from API errors, support API V2 error format (#8)
feat: make error handling more verbose and collect more error information from Unifi Controller, support API V2 error format
2025-02-10 03:03:56 +01:00
Mateusz FilipowiczandGitHub 53bb1a13b9 feat: generate fields validation and use it when sending requests to API (#7)
* feat: generate fields validation and use it when issuing requests to API with soft (default) or hard modes

* chore: apply linter fixes

* feat: enable field validation on int fields

* feat: add validation for ^[\w]+$ fields

* feat: add validation for MAC address fields

* fix: trim wrappers for all comments

* feat: add validation for IPv4, IPv6 and IP(IPv4/IPv6) fields

* feat: add validation for numeric, non-zero based fields

* fix: one of validation can contain dot (.) sign in values

* feat: add second notation of MAC address validation

* fix: one of validation can start with ^( and end with )$

* feat: add option to disable validation and use soft validation by default

* chore: fix test

* docs: add readme about client-side validation
2025-02-09 21:08:21 +01:00
Mateusz FilipowiczandGitHub c7e81e2b18 feat: add validation of ClientConfig fields for improved data integrity (#5)
* feat: add validation of ClientConfig fields for improved data integrity

* chore: add tests for client config validation
2025-02-09 04:21:15 +01:00
Mateusz FilipowiczandMateusz Filipowicz d79f581c1f chore: apply linter fixes 2025-02-09 01:51:47 +01:00
Mateusz FilipowiczandMateusz Filipowicz 685572d5ce test: add tests for Unifi client 2025-02-09 01:51:47 +01:00
Mateusz FilipowiczandMateusz Filipowicz f79f21c4ad feat: new, more customizable client supporting API Key and user/password authentication 2025-02-09 01:51:47 +01:00
Mateusz FilipowiczandMateusz Filipowicz e629288cba feat(codegen): rename "fields" to "codegen" for more meaningful naming 2025-02-07 17:42:05 +01:00
Mateusz Filipowicz 88080fe551 feat: add support for DNS records 2025-02-07 15:41:34 +01:00
Mateusz Filipowicz c393dcbe71 fix: WAN network support was broken 2025-02-07 15:40:42 +01:00
Mateusz Filipowicz 4be261d2a8 feat: support update port profile API 2025-02-04 18:25:07 +01:00
Mateusz Filipowicz 5552bb8a2d fix: add ulp_user_id to fix account tests 2025-01-07 11:30:28 +01:00
Mateusz FilipowiczandGitHub 3fda37369e feat: removed -latest flag and instead support latest version marker, refactor (#233)
* feat: remove -latest flag and instead support latest version marker

* refactor: move determining unifi version, download URL and downloading resources and field definitions to dedicated files

* refactor: move writing version file to version.go file

* refactor: move code generation code to dedicated generator.go file

* chore: fix linting issues

* chore: add version tests
2025-01-07 12:10:23 +11:00
oldztimerandGitHub df68605117 Add Error.Is interface method on the custom error type APIError. (#162)
This method supports doing "errors.Is" checks so downstream can handle API errors more specifically.

In my case, since I copied your lazyClient example, but I'm using it in a server, the Login needs to be refreshed if an API call errors out with "api.err.LoginRequired".
There was no clean way to check for this specific error in order to refresh the login and retry.
2025-01-07 12:02:23 +11:00