From 55182f22ecf804ac13713abe9ecd57257b7172c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A3o=20Sim=C3=B5es?= Date: Tue, 21 Jan 2025 09:33:31 +0000 Subject: [PATCH] feat(teams_rules): support biso v2 fields With this commit, it's possible to create http policies with the new biso admin controls. --- .changelog/3848.txt | 3 ++ teams_rules.go | 34 ++++++++++++++++++---- teams_rules_test.go | 70 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 101 insertions(+), 6 deletions(-) create mode 100644 .changelog/3848.txt diff --git a/.changelog/3848.txt b/.changelog/3848.txt new file mode 100644 index 00000000000..2130569c4bc --- /dev/null +++ b/.changelog/3848.txt @@ -0,0 +1,3 @@ +```release-note:enhancement +teams_rules: add support for biso admin controls v2 +``` diff --git a/teams_rules.go b/teams_rules.go index aaadb53f091..393aaefed42 100644 --- a/teams_rules.go +++ b/teams_rules.go @@ -119,14 +119,36 @@ type TeamsL4OverrideSettings struct { } type TeamsBISOAdminControlSettings struct { - DisablePrinting bool `json:"dp"` - DisableCopyPaste bool `json:"dcp"` - DisableDownload bool `json:"dd"` - DisableUpload bool `json:"du"` - DisableKeyboard bool `json:"dk"` - DisableClipboardRedirection bool `json:"dcr"` + DisablePrinting bool `json:"dp"` + DisableCopyPaste bool `json:"dcp"` + DisableDownload bool `json:"dd"` + DisableUpload bool `json:"du"` + DisableKeyboard bool `json:"dk"` + DisableClipboardRedirection bool `json:"dcr"` + Copy TeamsTeamsBISOAdminControlSettingsValue `json:"copy"` + Download TeamsTeamsBISOAdminControlSettingsValue `json:"download"` + Keyboard TeamsTeamsBISOAdminControlSettingsValue `json:"keyboard"` + Paste TeamsTeamsBISOAdminControlSettingsValue `json:"paste"` + Printing TeamsTeamsBISOAdminControlSettingsValue `json:"printing"` + Upload TeamsTeamsBISOAdminControlSettingsValue `json:"upload"` + Version TeamsBISOAdminControlSettingsVersion `json:"version"` } +type TeamsBISOAdminControlSettingsVersion string + +const ( + TeamsBISOAdminControlSettingsV1 TeamsBISOAdminControlSettingsVersion = "v1" + TeamsBISOAdminControlSettingsV2 TeamsBISOAdminControlSettingsVersion = "v2" +) + +type TeamsTeamsBISOAdminControlSettingsValue string + +const ( + TeamsBISOAdminControlEnabled TeamsTeamsBISOAdminControlSettingsValue = "enabled" + TeamsBISOAdminControlDisabled TeamsTeamsBISOAdminControlSettingsValue = "disabled" + TeamsBISOAdminControlRemoteOnly TeamsTeamsBISOAdminControlSettingsValue = "remote_only" +) + type TeamsCheckSessionSettings struct { Enforce bool `json:"enforce"` Duration Duration `json:"duration"` diff --git a/teams_rules_test.go b/teams_rules_test.go index 18186832d15..47ba349c8ae 100644 --- a/teams_rules_test.go +++ b/teams_rules_test.go @@ -915,3 +915,73 @@ func TestTeamsDeleteRule(t *testing.T) { assert.NoError(t, err) } + +func TestTeamsCreateHttpPolicyWithBisoV2(t *testing.T) { + setup() + defer teardown() + + handler := func(w http.ResponseWriter, r *http.Request) { + assert.Equal(t, http.MethodPost, r.Method, "Expected method 'POST', got %s", r.Method) + w.Header().Set("content-type", "application/json") + fmt.Fprintf(w, `{ + "success": true, + "errors": [], + "messages": [], + "result": { + "name": "biso v2", + "description": "biso v2", + "precedence": 1000, + "enabled": true, + "action": "isolate", + "filters": [ + "http" + ], + "traffic": "http.conn.src.ip == 1.2.3.4", + "rule_settings": { + "biso_admin_controls": { + "version": "v2", + "copy": "remote_only", + "paste": "enabled", + "download": "disabled", + "keyboard": "enabled", + "printing": "disabled", + "upload": "enabled" + } + } + } + } + `) + } + + want := TeamsRule{ + Name: "biso v2", + Description: "biso v2", + Precedence: 1000, + Enabled: true, + Action: Isolate, + Filters: []TeamsFilterType{HttpFilter}, + Traffic: `http.conn.src.ip == 1.2.3.4`, + Identity: "", + DevicePosture: "", + RuleSettings: TeamsRuleSettings{ + BISOAdminControls: &TeamsBISOAdminControlSettings{ + Version: TeamsBISOAdminControlSettingsV2, + Copy: TeamsBISOAdminControlRemoteOnly, + Paste: TeamsBISOAdminControlEnabled, + Download: TeamsBISOAdminControlDisabled, + Keyboard: TeamsBISOAdminControlEnabled, + Printing: TeamsBISOAdminControlDisabled, + Upload: TeamsBISOAdminControlEnabled, + }, + }, + DeletedAt: nil, + } + + mux.HandleFunc("/accounts/"+testAccountID+"/gateway/rules", handler) + + actual, err := client.TeamsCreateRule(context.Background(), testAccountID, want) + + if assert.NoError(t, err) { + assert.Equal(t, want, actual) + } +}