@@ -3,6 +3,7 @@ package validations
33import (
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