func createHTTPConnectionManagerForSocketListener()

in grpc-xds/control-plane-go/pkg/xds/lds/http_connection_manager.go [38:98]


func createHTTPConnectionManagerForSocketListener(routeConfigurationName string, statPrefix string, enableRBAC bool) (*http_connection_managerv3.HttpConnectionManager, error) {
	routerFilterConfig, err := anypb.New(&routerv3.Router{})
	if err != nil {
		return nil, fmt.Errorf("could not marshall Router HTTP filter into Any instance: %w", err)
	}
	httpConnectionManager := http_connection_managerv3.HttpConnectionManager{
		CodecType:  http_connection_managerv3.HttpConnectionManager_AUTO,
		StatPrefix: statPrefix,
		HttpFilters: []*http_connection_managerv3.HttpFilter{
			{
				// Router must be the last HTTP filter.
				Name: envoyFilterHTTPRouterName,
				ConfigType: &http_connection_managerv3.HttpFilter_TypedConfig{
					TypedConfig: routerFilterConfig,
				},
			},
		},
		RouteSpecifier: &http_connection_managerv3.HttpConnectionManager_Rds{
			Rds: &http_connection_managerv3.Rds{
				ConfigSource: &corev3.ConfigSource{
					ConfigSourceSpecifier: &corev3.ConfigSource_Ads{
						Ads: &corev3.AggregatedConfigSource{},
					},
					ResourceApiVersion: corev3.ApiVersion_V3,
				},
				RouteConfigName: routeConfigurationName,
			},
		},
		ForwardClientCertDetails: http_connection_managerv3.HttpConnectionManager_APPEND_FORWARD,
		SetCurrentClientCertDetails: &http_connection_managerv3.HttpConnectionManager_SetCurrentClientCertDetails{
			Subject: wrapperspb.Bool(true),
			Dns:     true,
			Uri:     true,
		},
		UpgradeConfigs: []*http_connection_managerv3.HttpConnectionManager_UpgradeConfig{
			{
				UpgradeType: "websocket",
			},
		},
	}

	if enableRBAC {
		rbacFilterTypedConfig, err := anypb.New(&rbacfilterv3.RBAC{
			Rules: &rbacv3.RBAC{}, // Present and empty `Rules` mean DENY all. Override per route.
		})
		if err != nil {
			return nil, fmt.Errorf("could not marshall RBAC HTTP filter typedConfig into Any instance: %w", err)
		}
		// Prepend RBAC HTTP filter. Not append, as Router must be the last HTTP filter.
		httpConnectionManager.HttpFilters = append([]*http_connection_managerv3.HttpFilter{
			{
				Name: EnvoyFilterHTTPRBACName,
				ConfigType: &http_connection_managerv3.HttpFilter_TypedConfig{
					TypedConfig: rbacFilterTypedConfig,
				},
			},
		}, httpConnectionManager.HttpFilters...)
	}

	return &httpConnectionManager, nil
}