Skip to content

Commit 7bf9918

Browse files
committed
fix(modules-config): add cloud region URL parsing for CrowdStrike configuration
1 parent 1ae95e2 commit 7bf9918

File tree

1 file changed

+30
-1
lines changed

1 file changed

+30
-1
lines changed

plugins/modules-config/validations/crowdstrike.go

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package validations
33
import (
44
"context"
55
"fmt"
6+
"strings"
67
"time"
78

89
"github.com/crowdstrike/gofalcon/falcon"
@@ -43,10 +44,15 @@ func ValidateCrowdstrikeConfig(config *config.ModuleGroup) error {
4344
return fmt.Errorf("App Name is required in CROWDSTRIKE configuration")
4445
}
4546

47+
cloudType, err := extractCloudFromURL(cloud)
48+
if err != nil {
49+
return fmt.Errorf("invalid cloud region configuration: %w", err)
50+
}
51+
4652
client, err := falcon.NewClient(&falcon.ApiConfig{
4753
ClientId: clientID,
4854
ClientSecret: clientSecret,
49-
Cloud: falcon.Cloud(cloud),
55+
Cloud: cloudType,
5056
Context: context.Background(),
5157
})
5258
if err != nil {
@@ -74,3 +80,26 @@ func ValidateCrowdstrikeConfig(config *config.ModuleGroup) error {
7480

7581
return nil
7682
}
83+
84+
func extractCloudFromURL(cloudValue string) (falcon.CloudType, error) {
85+
trimmed := strings.TrimSpace(cloudValue)
86+
87+
urlToRegion := map[string]string{
88+
"api.crowdstrike.com": "us-1",
89+
"api.us-2.crowdstrike.com": "us-2",
90+
"api.eu-1.crowdstrike.com": "eu-1",
91+
"api.laggar.gcw.crowdstrike.com": "us-gov-1",
92+
"api.us-gov-2.crowdstrike.mil": "us-gov-2",
93+
}
94+
95+
if strings.Contains(trimmed, "://") || strings.Contains(trimmed, ".crowdstrike.") {
96+
for host, region := range urlToRegion {
97+
if strings.Contains(trimmed, host) {
98+
return falcon.CloudValidate(region)
99+
}
100+
}
101+
return 0, fmt.Errorf("unrecognized CrowdStrike URL: %s", trimmed)
102+
}
103+
104+
return falcon.CloudValidate(trimmed)
105+
}

0 commit comments

Comments
 (0)