@@ -26,6 +26,7 @@ import (
2626 corev3 "github.com/envoyproxy/go-control-plane/envoy/config/core/v3"
2727 envoy_config_ratelimit_v3 "github.com/envoyproxy/go-control-plane/envoy/config/ratelimit/v3"
2828 cors_filter_v3 "github.com/envoyproxy/go-control-plane/envoy/extensions/filters/http/cors/v3"
29+ header_to_metadata_v3 "github.com/envoyproxy/go-control-plane/envoy/extensions/filters/http/header_to_metadata/v3"
2930 ext_authv3 "github.com/envoyproxy/go-control-plane/envoy/extensions/filters/http/ext_authz/v3"
3031 local_ratelimit_v3 "github.com/envoyproxy/go-control-plane/envoy/extensions/filters/http/local_ratelimit/v3"
3132 luav3 "github.com/envoyproxy/go-control-plane/envoy/extensions/filters/http/lua/v3"
@@ -56,8 +57,10 @@ func getHTTPFilters() []*hcmv3.HttpFilter {
5657 lua := getLuaFilter ()
5758 cors := getCorsHTTPFilter ()
5859 localRateLimit := getHTTPLocalRateLimitFilter ()
60+ headerToMetadata := getHeaderToMetadataHTTPFilter ()
5961
6062 httpFilters := []* hcmv3.HttpFilter {
63+ headerToMetadata ,
6164 cors ,
6265 localRateLimit ,
6366 extAauth ,
@@ -385,3 +388,44 @@ func getMgwWebSocketWASMFilter() *hcmv3.HttpFilter {
385388 return & mgwWebSocketFilter
386389
387390}
391+
392+ func getHeaderToMetadataHTTPFilter () * hcmv3.HttpFilter {
393+ logger .LoggerOasparser .Debug ("Creating header-to-metadata HTTP filter" )
394+ headerToMetadataConf := header_to_metadata_v3.Config {
395+ ResponseRules : []* header_to_metadata_v3.Config_Rule {
396+ {
397+ Header : "x-choreo-host" ,
398+ OnHeaderPresent : & header_to_metadata_v3.Config_KeyValuePair {
399+ MetadataNamespace : "envoy.lb" ,
400+ Key : "choreo-upstream-host" ,
401+ Type : header_to_metadata_v3 .Config_STRING ,
402+ },
403+ Remove : true ,
404+ },
405+ },
406+ }
407+
408+ filterTypedConf , err := anypb .New (& headerToMetadataConf )
409+
410+ if err != nil {
411+ logger .LoggerOasparser .Error ("Error marshaling header-to-metadata filter configs. " , err )
412+ }
413+ logger .LoggerOasparser .Debug ("Successfully created header-to-metadata filter configuration" )
414+ filter := hcmv3.HttpFilter {
415+ Name : "envoy.filters.http.header_to_metadata" ,
416+ ConfigType : & hcmv3.HttpFilter_TypedConfig {TypedConfig : filterTypedConf },
417+ }
418+
419+ if (enableRouterConfigValidation ) {
420+ err = filter .Validate ()
421+ if err != nil {
422+ if panicOnValidationFailure {
423+ logger .LoggerOasparser .Fatal ("Error while validating header-to-metadata HTTP filter configs. " , err )
424+ } else {
425+ logger .LoggerOasparser .Error ("Error while validating header-to-metadata HTTP filter configs. " , err )
426+ }
427+ }
428+ }
429+
430+ return & filter
431+ }
0 commit comments