From 251457480e4beac061eb506a062b6ea4b40bb435 Mon Sep 17 00:00:00 2001 From: MohitKatare-protean Date: Fri, 4 Apr 2025 12:04:45 +0530 Subject: [PATCH] Resolved router test cases --- pkg/plugin/implementation/router/router.go | 22 +++++++++++++++++++ .../implementation/router/router_test.go | 6 ++--- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/pkg/plugin/implementation/router/router.go b/pkg/plugin/implementation/router/router.go index 52e628b..f9316b0 100644 --- a/pkg/plugin/implementation/router/router.go +++ b/pkg/plugin/implementation/router/router.go @@ -153,6 +153,10 @@ func validateRules(rules []routingRule) error { if rule.Target.URL == "" { return fmt.Errorf("invalid rule: url is required for targetType 'url'") } + // Validate HTTPS scheme + if err := isValidHTTPSURL(rule.Target.URL); err != nil { + return fmt.Errorf("invalid URI %s in request body for url: %v", rule.Target.URL, err) + } if _, err := url.Parse(rule.Target.URL); err != nil { return fmt.Errorf("invalid URL - %s: %w", rule.Target.URL, err) } @@ -162,6 +166,9 @@ func validateRules(rules []routingRule) error { } case targetTypeBPP, targetTypeBAP: if rule.Target.URL != "" { + if err := isValidHTTPSURL(rule.Target.URL); err != nil { + return fmt.Errorf("invalid URI %s in request body for %s: %v", rule.Target.URL, rule.TargetType, err) + } if _, err := url.Parse(rule.Target.URL); err != nil { return fmt.Errorf("invalid URL - %s defined in routing config for target type %s: %w", rule.Target.URL, rule.TargetType, err) } @@ -234,6 +241,9 @@ func handleProtocolMapping(route *model.Route, npURI, endpoint string) (*model.R }, }, nil } + if err := isValidHTTPSURL(target); err != nil { + return nil, fmt.Errorf("invalid %s URI - %s in request body for %s: %v", strings.ToUpper(route.TargetType), target, endpoint, err) + } targetURL, err := url.Parse(target) if err != nil { return nil, fmt.Errorf("invalid %s URI - %s in request body for %s: %w", strings.ToUpper(route.TargetType), target, endpoint, err) @@ -248,3 +258,15 @@ func handleProtocolMapping(route *model.Route, npURI, endpoint string) (*model.R }, }, nil } + +// isValidHTTPSURL ensures the provided URL is a valid HTTPS URL. +func isValidHTTPSURL(rawURL string) error { + parsedURL, err := url.Parse(rawURL) + if err != nil { + return fmt.Errorf("invalid URL - %s: %v", rawURL, err) + } + if parsedURL.Scheme != "https" { + return fmt.Errorf("URL '%s' must use https scheme", rawURL) + } + return nil +} diff --git a/pkg/plugin/implementation/router/router_test.go b/pkg/plugin/implementation/router/router_test.go index 7937ca5..7688066 100644 --- a/pkg/plugin/implementation/router/router_test.go +++ b/pkg/plugin/implementation/router/router_test.go @@ -296,7 +296,7 @@ func TestValidateRulesFailure(t *testing.T) { Endpoints: []string{"search"}, }, }, - wantErr: "invalid URL - htp://invalid-url.com: URL 'htp://invalid-url.com' must use https scheme", + wantErr: "invalid URI htp://invalid-url.com in request body for url: URL 'htp://invalid-url.com' must use https scheme", }, { name: "Missing topic_id for targetType: publisher", @@ -326,7 +326,7 @@ func TestValidateRulesFailure(t *testing.T) { Endpoints: []string{"search"}, }, }, - wantErr: "invalid URL - htp://invalid-url.com defined in routing config for target type bpp", + wantErr: "invalid URI htp://invalid-url.com in request body for bpp: URL 'htp://invalid-url.com' must use https scheme", }, { name: "Invalid URL for BAP targetType", @@ -341,7 +341,7 @@ func TestValidateRulesFailure(t *testing.T) { Endpoints: []string{"search"}, }, }, - wantErr: "invalid URL - http://[invalid].com defined in routing config for target type bap", + wantErr: "invalid URI http://[invalid].com in request body for bap", }, }