Skip to content

Commit fd8ee8e

Browse files
authored
fix: Fixed GET function in ZIA urlfilteringpolicies (#408)
* fix: Fixed function in ZIA
1 parent cbe492f commit fd8ee8e

File tree

7 files changed

+47
-40
lines changed

7 files changed

+47
-40
lines changed

CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
11
# Changelog
22

3+
# 3.8.18 (February 10, 2026)
4+
5+
## Notes
6+
- Golang: **v1.24**
7+
8+
### Bug Fixes
9+
10+
- [PR #408](https://github.com/zscaler/zscaler-sdk-go/pull/408) - Fixed `GET` function in ZIA `urlfilteringpolicies`.
11+
312
# 3.8.17 (February 9, 2026)
413

514
## Notes

docs/guides/release-notes.md

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,19 @@ Track all Zscaler SDK GO releases. New resources, features, and bug fixes will b
1313

1414
---
1515

16-
``Last updated: v3.8.17``
16+
``Last updated: v3.8.18``
1717

1818
---
1919

20+
# 3.8.18 (February 10, 2026)
21+
22+
## Notes
23+
- Golang: **v1.24**
24+
25+
### Bug Fixes
26+
27+
- [PR #408](https://github.com/zscaler/zscaler-sdk-go/pull/408) - Fixed `GET` function in ZIA `urlfilteringpolicies`.
28+
2029
# 3.8.17 (February 9, 2026)
2130

2231
## Notes

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ require (
1717
github.com/olekukonko/tablewriter v0.0.5
1818
github.com/stretchr/testify v1.11.1
1919
github.com/zscaler/zscaler-sdk-go/v2 v2.732.0
20-
golang.org/x/text v0.33.0
20+
golang.org/x/text v0.34.0
2121
gopkg.in/dnaeon/go-vcr.v4 v4.0.6
2222
gopkg.in/yaml.v3 v3.0.1
2323
)

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -480,8 +480,8 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
480480
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
481481
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
482482
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
483-
golang.org/x/text v0.33.0 h1:B3njUFyqtHDUI5jMn1YIr5B0IE2U0qck04r6d4KPAxE=
484-
golang.org/x/text v0.33.0/go.mod h1:LuMebE6+rBincTi9+xWTY8TztLzKHc/9C1uBCG27+q8=
483+
golang.org/x/text v0.34.0 h1:oL/Qq0Kdaqxa1KbNeMKwQq0reLCCaFtqu2eNuSeNHbk=
484+
golang.org/x/text v0.34.0/go.mod h1:homfLqTYRFyVYemLBFl5GgL/DWEiH5wcsQ5gSh1yziA=
485485
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
486486
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
487487
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=

tests/unit/zia/services/urlfiltering_test.go

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,11 @@ func TestURLFilteringRules_Get_SDK(t *testing.T) {
2121
defer server.Close()
2222

2323
ruleID := 12345
24-
path := "/zia/api/v1/urlFilteringRules"
24+
path := "/zia/api/v1/urlFilteringRules/12345"
2525

26-
// Get uses GetAll internally and finds by ID
27-
server.On("GET", path, common.SuccessResponse([]urlfilteringpolicies.URLFilteringRule{
28-
{ID: 1, Name: "Other Rule", Action: "ALLOW"},
29-
{ID: ruleID, Name: "Block Social Media", Action: "BLOCK", State: "ENABLED"},
26+
// Get retrieves a single rule by ID via direct API call
27+
server.On("GET", path, common.SuccessResponse(urlfilteringpolicies.URLFilteringRule{
28+
ID: ruleID, Name: "Block Social Media", Action: "BLOCK", State: "ENABLED",
3029
}))
3130

3231
service, err := common.CreateTestService(context.Background(), server, "123456")
@@ -115,11 +114,10 @@ func TestURLFilteringRules_Update_SDK(t *testing.T) {
115114

116115
ruleID := 12345
117116
path := "/zia/api/v1/urlFilteringRules/12345"
118-
listPath := "/zia/api/v1/urlFilteringRules"
119117

120-
// Mock GetAll call that Update performs to fetch CBIProfile
121-
server.On("GET", listPath, common.SuccessResponse([]urlfilteringpolicies.URLFilteringRule{
122-
{ID: ruleID, Name: "Updated URL Rule", CBIProfile: &urlfilteringpolicies.CBIProfile{ID: "cbi-id"}},
118+
// Mock Get call that Update performs to fetch CBIProfile (direct by ID)
119+
server.On("GET", path, common.SuccessResponse(urlfilteringpolicies.URLFilteringRule{
120+
ID: ruleID, Name: "Updated URL Rule", CBIProfile: &urlfilteringpolicies.CBIProfile{ID: "cbi-id"},
123121
}))
124122

125123
server.On("PUT", path, common.SuccessResponse(urlfilteringpolicies.URLFilteringRule{

zscaler/zia/services/urlcategories/urlcategories.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,9 @@ type URLCategory struct {
6363
// Super Category of the URL category. This field is required when creating custom URL categories.
6464
SuperCategory string `json:"superCategory,omitempty"`
6565

66+
// Super Category of the URL category. This field is required when creating custom URL categories.
67+
CategoryGroup string `json:"categoryGroup,omitempty"`
68+
6669
// Specifies the type of URL match, such as using exact URLs or regex patterns.
6770
// For regex, the patterns can be specified using the regexPatterns and regexPatternsRetainingParentCategory fields.
6871
// For exact URLs, specify the required URLs, keywords, or IP ranges using the appropriate fields.

zscaler/zia/services/urlfilteringpolicies/urlfilteringpolicies.go

Lines changed: 15 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -214,20 +214,14 @@ type URLAdvancedPolicySettings struct {
214214
}
215215

216216
func Get(ctx context.Context, service *zscaler.Service, ruleID int) (*URLFilteringRule, error) {
217-
var urlFilteringPolicies []URLFilteringRule
218-
err := common.ReadAllPages(ctx, service.Client, urlFilteringPoliciesEndpoint, &urlFilteringPolicies)
217+
var rule URLFilteringRule
218+
err := service.Client.Read(ctx, fmt.Sprintf("%s/%d", urlFilteringPoliciesEndpoint, ruleID), &rule)
219219
if err != nil {
220220
return nil, err
221221
}
222222

223-
for _, urlFilteringPolicy := range urlFilteringPolicies {
224-
if urlFilteringPolicy.ID == ruleID {
225-
service.Client.GetLogger().Printf("[DEBUG]Returning url filtering rules from Get: %d", urlFilteringPolicy.ID)
226-
return &urlFilteringPolicy, nil
227-
}
228-
}
229-
230-
return nil, fmt.Errorf("no url filtering rule found with id: %d", ruleID)
223+
service.Client.GetLogger().Printf("[DEBUG]Returning url filtering rules from Get: %d", rule.ID)
224+
return &rule, nil
231225
}
232226

233227
func GetByName(ctx context.Context, service *zscaler.Service, urlFilteringPolicyName string) (*URLFilteringRule, error) {
@@ -265,17 +259,11 @@ func Update(ctx context.Context, service *zscaler.Service, ruleID int, rule *URL
265259

266260
// Check if CBIProfile is nil or has empty ID, or if CBIProfileID is 0
267261
if rule.CBIProfile == nil || rule.CBIProfile.ID == "" || rule.CBIProfileID == 0 {
268-
// If CBIProfile object is empty, fetch it using GetByName as Get by ID is not currently returnign the full CBIProfile object with the uuid ID
269-
var urlFilteringPolicies []URLFilteringRule
270-
err := common.ReadAllPages(ctx, service.Client, urlFilteringPoliciesEndpoint, &urlFilteringPolicies)
271-
if err != nil {
272-
return nil, nil, err
273-
}
274-
for _, urlFilteringPolicy := range urlFilteringPolicies {
275-
if urlFilteringPolicy.ID == ruleID {
276-
rule.CBIProfile = urlFilteringPolicy.CBIProfile
277-
rule.CBIProfileID = urlFilteringPolicy.CBIProfileID
278-
}
262+
// If CBIProfile object is empty, fetch it using Get by ID
263+
existingRule, err := Get(ctx, service, ruleID)
264+
if err == nil && existingRule != nil {
265+
rule.CBIProfile = existingRule.CBIProfile
266+
rule.CBIProfileID = existingRule.CBIProfileID
279267
}
280268
}
281269
resp, err := service.Client.UpdateWithPut(ctx, fmt.Sprintf("%s/%d", urlFilteringPoliciesEndpoint, ruleID), *rule)
@@ -299,12 +287,12 @@ func Delete(ctx context.Context, service *zscaler.Service, ruleID int) (*http.Re
299287

300288
// GetAll returns the all rules.
301289
func GetAll(ctx context.Context, service *zscaler.Service) ([]URLFilteringRule, error) {
302-
var urlFilteringPolicies []URLFilteringRule
303-
err := common.ReadAllPages(ctx, service.Client, urlFilteringPoliciesEndpoint, &urlFilteringPolicies)
304-
if err != nil {
305-
return nil, err
306-
}
307-
return urlFilteringPolicies, nil
290+
var rules []URLFilteringRule
291+
292+
// Use service.Client.Read directly since the API doesn't support pagination
293+
// The API returns all results in a single response
294+
err := service.Client.Read(ctx, urlFilteringPoliciesEndpoint, &rules)
295+
return rules, err
308296
}
309297

310298
func GetUrlAndAppSettings(ctx context.Context, service *zscaler.Service) (*URLAdvancedPolicySettings, error) {

0 commit comments

Comments
 (0)