@@ -54,7 +54,8 @@ type ExtractedRequestData struct {
5454 McpName string
5555 ContextName string
5656 UseCrateCluster bool
57- Authorization string
57+ CrateAuthorizationToken string
58+ McpAuthorizationToken string
5859 Headers map [string ][]string
5960 JQ string
6061 Category string
@@ -87,16 +88,18 @@ func mainHandler(s *shared, req *http.Request, res *response) (*response, *HttpE
8788 var config k8s.KubeConfig
8889 if data .UseCrateCluster {
8990 config = crateKubeconfig
90- config .SetUserToken (data .Authorization )
91+ config .SetUserToken (data .CrateAuthorizationToken )
9192 } else if data .ProjectName != "" && data .WorkspaceName != "" && data .McpName != "" {
92- config , err = openmcp .GetControlPlaneKubeconfig (s .crateKube , data .ProjectName , data .WorkspaceName , data .McpName , data .Authorization , crateKubeconfig )
93+ config , err = openmcp .GetControlPlaneKubeconfig (s .crateKube , data .ProjectName , data .WorkspaceName , data .McpName , data .CrateAuthorizationToken , crateKubeconfig )
9394 if err != nil {
9495 slog .Error ("failed to get control plane api config" , "err" , err )
9596 return nil , NewInternalServerError ("failed to get control plane api config" )
9697 }
97- if data .Authorization != "" {
98- config .SetUserToken (data .Authorization )
98+ if data .McpAuthorizationToken == "" {
99+ slog .Error ("MCP authorization token not provided" )
100+ return nil , NewBadRequestError ("MCP authorization token not provided" )
99101 }
102+ config .SetUserToken (data .McpAuthorizationToken )
100103 } else {
101104 slog .Error ("either use %s: true or provide %s, %s and %s headers" , useCrateClusterHeader , projectNameHeader , workspaceNameHeader , mcpName )
102105 return nil , NewBadRequestError (
@@ -138,6 +141,15 @@ func mainHandler(s *shared, req *http.Request, res *response) (*response, *HttpE
138141}
139142
140143func extractRequestData (r * http.Request ) (ExtractedRequestData , error ) {
144+ if r .Header .Get (authorizationHeader ) == "" {
145+ return ExtractedRequestData {}, fmt .Errorf ("%s header is required" , authorizationHeader )
146+ }
147+
148+ crateToken , mcpToken , err := parseAuthorizationHeaderWithDoubleTokens (r .Header .Get (authorizationHeader ))
149+ if err != nil {
150+ return ExtractedRequestData {}, fmt .Errorf ("invalid %s header: %w" , authorizationHeader , err )
151+ }
152+
141153 rd := ExtractedRequestData {
142154 Path : r .URL .Path ,
143155 Query : r .URL .Query (),
@@ -150,7 +162,8 @@ func extractRequestData(r *http.Request) (ExtractedRequestData, error) {
150162 WorkspaceName : r .Header .Get (workspaceNameHeader ),
151163 ContextName : r .Header .Get (contextHeader ),
152164 McpName : r .Header .Get (mcpName ),
153- Authorization : r .Header .Get (authorizationHeader ),
165+ CrateAuthorizationToken : crateToken ,
166+ McpAuthorizationToken : mcpToken ,
154167 JQ : r .Header .Get (jqHeader ),
155168 Category : r .Header .Get (categoryHeader ),
156169 }
@@ -166,10 +179,6 @@ func extractRequestData(r *http.Request) (ExtractedRequestData, error) {
166179 rd .UseCrateCluster = useCrateCluster
167180 }
168181
169- if rd .Authorization == "" {
170- return ExtractedRequestData {}, fmt .Errorf ("%s header is required" , authorizationHeader )
171- }
172-
173182 return rd , nil
174183}
175184
0 commit comments