@@ -29,57 +29,68 @@ func GetSupportedMiddlewareFactories() map[string]types.MiddlewareFactory {
2929 }
3030}
3131
32- // hasMiddlewareType checks if a middleware of the given type already exists
33- func hasMiddlewareType (middlewares []types.MiddlewareConfig , middlewareType string ) bool {
34- for _ , m := range middlewares {
35- if m .Type == middlewareType {
36- return true
37- }
38- }
39- return false
40- }
41-
4232// PopulateMiddlewareConfigs populates the MiddlewareConfigs slice based on the RunConfig settings
4333// This function serves as a bridge between the old configuration style and the new generic middleware system
44- // It appends default middlewares to any existing middlewares, avoiding duplicates
34+ //
35+ //nolint:gocyclo // Function complexity is acceptable for middleware configuration
4536func PopulateMiddlewareConfigs (config * RunConfig ) error {
46- // Start with existing middlewares (may already contain operator-provided middlewares)
47- middlewareConfigs := config .MiddlewareConfigs
48- var err error
37+ var middlewareConfigs []types.MiddlewareConfig
4938 // TODO: Consider extracting other middleware setup into helper functions like addUsageMetricsMiddleware
5039
51- // Authentication middleware (add if not already present)
52- if ! hasMiddlewareType (middlewareConfigs , auth .MiddlewareType ) {
53- authParams := auth.MiddlewareParams {
54- OIDCConfig : config .OIDCConfig ,
55- }
56- authConfig , err := types .NewMiddlewareConfig (auth .MiddlewareType , authParams )
57- if err != nil {
58- return fmt .Errorf ("failed to create auth middleware config: %w" , err )
59- }
60- middlewareConfigs = append (middlewareConfigs , * authConfig )
40+ // Authentication middleware (always present)
41+ authParams := auth.MiddlewareParams {
42+ OIDCConfig : config .OIDCConfig ,
43+ }
44+ authConfig , err := types .NewMiddlewareConfig (auth .MiddlewareType , authParams )
45+ if err != nil {
46+ return fmt .Errorf ("failed to create auth middleware config: %w" , err )
6147 }
48+ middlewareConfigs = append (middlewareConfigs , * authConfig )
6249
63- // Tools filter and override middleware (add if enabled and not already present)
64- hasToolFiltering := len (config .ToolsFilter ) > 0 || len (config .ToolsOverride ) > 0
65- if hasToolFiltering && ! hasMiddlewareType (middlewareConfigs , mcp .ToolFilterMiddlewareType ) {
66- middlewareConfigs = addToolFilterMiddlewares (
67- middlewareConfigs ,
68- config .ToolsFilter ,
69- config .ToolsOverride ,
70- )
50+ // Token exchange middleware (if configured)
51+ middlewareConfigs , err = addTokenExchangeMiddleware (middlewareConfigs , config .TokenExchangeConfig )
52+ if err != nil {
53+ return err
7154 }
7255
73- // MCP Parser middleware (add if not already present)
74- if ! hasMiddlewareType (middlewareConfigs , mcp .ParserMiddlewareType ) {
75- mcpParserParams := mcp.ParserMiddlewareParams {}
76- mcpParserConfig , err := types .NewMiddlewareConfig (mcp .ParserMiddlewareType , mcpParserParams )
56+ // Tools filter and override middleware (if enabled)
57+ if len (config .ToolsFilter ) > 0 || len (config .ToolsOverride ) > 0 {
58+ // Prepare overrides map (convert runner.ToolOverride -> mcp.ToolOverride)
59+ overrides := make (map [string ]mcp.ToolOverride )
60+ for actualName , tool := range config .ToolsOverride {
61+ overrides [actualName ] = mcp.ToolOverride {
62+ Name : tool .Name ,
63+ Description : tool .Description ,
64+ }
65+ }
66+
67+ // Add tool filter middleware with both filter and overrides
68+ toolFilterParams := mcp.ToolFilterMiddlewareParams {
69+ FilterTools : config .ToolsFilter ,
70+ ToolsOverride : overrides ,
71+ }
72+ toolFilterConfig , err := types .NewMiddlewareConfig (mcp .ToolFilterMiddlewareType , toolFilterParams )
73+ if err != nil {
74+ return fmt .Errorf ("failed to create tool filter middleware config: %w" , err )
75+ }
76+ middlewareConfigs = append (middlewareConfigs , * toolFilterConfig )
77+
78+ // Add tool call filter middleware with same params
79+ toolCallFilterConfig , err := types .NewMiddlewareConfig (mcp .ToolCallFilterMiddlewareType , toolFilterParams )
7780 if err != nil {
78- return fmt .Errorf ("failed to create MCP parser middleware config: %w" , err )
81+ return fmt .Errorf ("failed to create tool call filter middleware config: %w" , err )
7982 }
80- middlewareConfigs = append (middlewareConfigs , * mcpParserConfig )
83+ middlewareConfigs = append (middlewareConfigs , * toolCallFilterConfig )
8184 }
8285
86+ // MCP Parser middleware (always present)
87+ mcpParserParams := mcp.ParserMiddlewareParams {}
88+ mcpParserConfig , err := types .NewMiddlewareConfig (mcp .ParserMiddlewareType , mcpParserParams )
89+ if err != nil {
90+ return fmt .Errorf ("failed to create MCP parser middleware config: %w" , err )
91+ }
92+ middlewareConfigs = append (middlewareConfigs , * mcpParserConfig )
93+
8394 // Load application config for global settings
8495 configProvider := cfg .NewDefaultProvider ()
8596 appConfig := configProvider .GetConfig ()
@@ -91,31 +102,74 @@ func PopulateMiddlewareConfigs(config *RunConfig) error {
91102 }
92103
93104 // Telemetry middleware (if enabled)
94- middlewareConfigs = addTelemetryMiddleware (
95- middlewareConfigs ,
96- config .TelemetryConfig ,
97- config .Name ,
98- config .Transport .String (),
99- )
105+ if config .TelemetryConfig != nil {
106+ telemetryParams := telemetry.FactoryMiddlewareParams {
107+ Config : config .TelemetryConfig ,
108+ ServerName : config .Name ,
109+ Transport : config .Transport .String (),
110+ }
111+ telemetryConfig , err := types .NewMiddlewareConfig (telemetry .MiddlewareType , telemetryParams )
112+ if err != nil {
113+ return fmt .Errorf ("failed to create telemetry middleware config: %w" , err )
114+ }
115+ middlewareConfigs = append (middlewareConfigs , * telemetryConfig )
116+ }
100117
101118 // Authorization middleware (if enabled)
102- middlewareConfigs = addAuthzMiddleware (middlewareConfigs , config .AuthzConfigPath )
119+ if config .AuthzConfig != nil {
120+ authzParams := authz.FactoryMiddlewareParams {
121+ ConfigPath : config .AuthzConfigPath , // Keep for backwards compatibility
122+ ConfigData : config .AuthzConfig , // Use the loaded config data
123+ }
124+ authzConfig , err := types .NewMiddlewareConfig (authz .MiddlewareType , authzParams )
125+ if err != nil {
126+ return fmt .Errorf ("failed to create authorization middleware config: %w" , err )
127+ }
128+ middlewareConfigs = append (middlewareConfigs , * authzConfig )
129+ }
103130
104131 // Audit middleware (if enabled)
105- enableAudit := config .AuditConfig != nil
106- middlewareConfigs = addAuditMiddleware (
107- middlewareConfigs ,
108- enableAudit ,
109- config .AuditConfigPath ,
110- config .Name ,
111- config .Transport .String (),
112- )
132+ if config .AuditConfig != nil {
133+ auditParams := audit.MiddlewareParams {
134+ ConfigPath : config .AuditConfigPath , // Keep for backwards compatibility
135+ ConfigData : config .AuditConfig , // Use the loaded config data
136+ Component : config .AuditConfig .Component ,
137+ TransportType : config .Transport .String (), // Pass the actual transport type
138+ }
139+ auditConfig , err := types .NewMiddlewareConfig (audit .MiddlewareType , auditParams )
140+ if err != nil {
141+ return fmt .Errorf ("failed to create audit middleware config: %w" , err )
142+ }
143+ middlewareConfigs = append (middlewareConfigs , * auditConfig )
144+ }
113145
114146 // Set the populated middleware configs
115147 config .MiddlewareConfigs = middlewareConfigs
116148 return nil
117149}
118150
151+ // addTokenExchangeMiddleware adds token exchange middleware if configured
152+ func addTokenExchangeMiddleware (
153+ middlewares []types.MiddlewareConfig ,
154+ tokenExchangeConfig * tokenexchange.Config ,
155+ ) ([]types.MiddlewareConfig , error ) {
156+ if tokenExchangeConfig == nil {
157+ return middlewares , nil
158+ }
159+
160+ tokenExchangeParams := tokenexchange.MiddlewareParams {
161+ TokenExchangeConfig : tokenExchangeConfig ,
162+ }
163+ tokenExchangeMwConfig , err := types .NewMiddlewareConfig (
164+ tokenexchange .MiddlewareType ,
165+ tokenExchangeParams ,
166+ )
167+ if err != nil {
168+ return nil , fmt .Errorf ("failed to create token exchange middleware config: %w" , err )
169+ }
170+ return append (middlewares , * tokenExchangeMwConfig ), nil
171+ }
172+
119173// addUsageMetricsMiddleware adds usage metrics middleware if enabled
120174func addUsageMetricsMiddleware (middlewares []types.MiddlewareConfig , configDisabled bool ) ([]types.MiddlewareConfig , error ) {
121175 if ! usagemetrics .ShouldEnableMetrics (configDisabled ) {
0 commit comments