Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
114 changes: 0 additions & 114 deletions internal/server/handlerBtpSO.go

This file was deleted.

14 changes: 4 additions & 10 deletions internal/server/handlerCategory.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,13 +46,13 @@ func _categoryHandler(s *shared, req *http.Request, res *response) (*response, *

var config k8s.KubeConfig
if data.ProjectName != "" && data.WorkspaceName != "" && data.McpName != "" {
config, err = openmcp.GetControlPlaneKubeconfig(s.crateKube, data.ProjectName, data.WorkspaceName, data.McpName, data.CrateAuthorization, crateKubeconfig)
config, err = openmcp.GetControlPlaneKubeconfig(s.crateKube, data.ProjectName, data.WorkspaceName, data.McpName, data.Authorization, crateKubeconfig)
if err != nil {
slog.Error("failed to get control plane api config", "err", err)
return nil, NewInternalServerError("failed to get control plane api config")
}
if data.McpAuthorization != "" {
config.SetUserToken(data.McpAuthorization)
if data.Authorization != "" {
config.SetUserToken(data.Authorization)
}
} else {
slog.Error("either use %s: true or provide %s, %s and %s headers", useCrateClusterHeader, projectNameHeader, workspaceNameHeader, mcpName)
Expand Down Expand Up @@ -107,13 +107,7 @@ func _categoryHandler(s *shared, req *http.Request, res *response) (*response, *
var result []byte = append([]byte("["), bytes.Join(resultData, []byte(","))[:]...)
result = append(result, []byte("]")[:]...)

if data.JsonPath != "" {
result, err = ParseJsonPath(result, data.JsonPath)
if err != nil {
slog.Error("failed to parse json path", "err", err)
return nil, NewInternalServerError("failed to parse json path")
}
} else if data.JQ != "" {
if data.JQ != "" {
resultString, err := ParseJQ(result, data.JQ)
if err != nil {
slog.Error("failed to parse jq", "err", err)
Expand Down
45 changes: 8 additions & 37 deletions internal/server/handlerMain.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,9 @@ const (
projectNameHeader = "X-project"
workspaceNameHeader = "X-workspace"
mcpName = "X-mcp"
mcpAuthHeader = "X-mcp-authorization"
contextHeader = "X-context"
useCrateClusterHeader = "X-use-crate"
authorizationHeader = "Authorization"
jsonPathHeader = "X-jsonpath"
jqHeader = "X-jq"
categoryHeader = "X-category"
)
Expand All @@ -37,10 +35,8 @@ var prohibitedRequestHeaders = []string{
projectNameHeader,
workspaceNameHeader,
mcpName,
mcpAuthHeader,
contextHeader,
authorizationHeader,
jsonPathHeader,
"User-Agent",
"Host",
}
Expand All @@ -56,12 +52,10 @@ type ExtractedRequestData struct {
ProjectName string
WorkspaceName string
McpName string
McpAuthorization string
ContextName string
UseCrateCluster bool
CrateAuthorization string
Authorization string
Headers map[string][]string
JsonPath string
JQ string
Category string
}
Expand Down Expand Up @@ -93,15 +87,15 @@ func mainHandler(s *shared, req *http.Request, res *response) (*response, *HttpE
var config k8s.KubeConfig
if data.UseCrateCluster {
config = crateKubeconfig
config.SetUserToken(data.CrateAuthorization)
config.SetUserToken(data.Authorization)
} else if data.ProjectName != "" && data.WorkspaceName != "" && data.McpName != "" {
config, err = openmcp.GetControlPlaneKubeconfig(s.crateKube, data.ProjectName, data.WorkspaceName, data.McpName, data.CrateAuthorization, crateKubeconfig)
config, err = openmcp.GetControlPlaneKubeconfig(s.crateKube, data.ProjectName, data.WorkspaceName, data.McpName, data.Authorization, crateKubeconfig)
if err != nil {
slog.Error("failed to get control plane api config", "err", err)
return nil, NewInternalServerError("failed to get control plane api config")
}
if data.McpAuthorization != "" {
config.SetUserToken(data.McpAuthorization)
if data.Authorization != "" {
config.SetUserToken(data.Authorization)
}
} else {
slog.Error("either use %s: true or provide %s, %s and %s headers", useCrateClusterHeader, projectNameHeader, workspaceNameHeader, mcpName)
Expand All @@ -128,16 +122,11 @@ func mainHandler(s *shared, req *http.Request, res *response) (*response, *HttpE
}
}(k8sResp.Body)

if (data.JsonPath == "" && data.JQ == "") || k8sResp.StatusCode >= 400 {
if (data.JQ == "") || k8sResp.StatusCode >= 400 {
err = CopyResponse(res, k8sResp, nil, nil)
if err != nil {
return nil, NewInternalServerError("failed to copy response: %v", err)
}
} else if data.JsonPath != "" {
err := res.buildJsonPathResponse(k8sResp, err, data)
if err != nil {
return nil, NewInternalServerError("failed to build jsonpath response: %v", err)
}
} else {
err := res.buildJqResponse(k8sResp, data)
if err != nil {
Expand All @@ -160,10 +149,8 @@ func extractRequestData(r *http.Request) (ExtractedRequestData, error) {
ProjectName: r.Header.Get(projectNameHeader),
WorkspaceName: r.Header.Get(workspaceNameHeader),
ContextName: r.Header.Get(contextHeader),
McpAuthorization: r.Header.Get(mcpAuthHeader),
McpName: r.Header.Get(mcpName),
CrateAuthorization: r.Header.Get(authorizationHeader),
JsonPath: r.Header.Get(jsonPathHeader),
Authorization: r.Header.Get(authorizationHeader),
JQ: r.Header.Get(jqHeader),
Category: r.Header.Get(categoryHeader),
}
Expand All @@ -179,7 +166,7 @@ func extractRequestData(r *http.Request) (ExtractedRequestData, error) {
rd.UseCrateCluster = useCrateCluster
}

if rd.CrateAuthorization == "" {
if rd.Authorization == "" {
return ExtractedRequestData{}, fmt.Errorf("%s header is required", authorizationHeader)
}

Expand All @@ -202,19 +189,3 @@ func (r *response) buildJqResponse(k8sResp *http.Response, data ExtractedRequest
r.contentType = "application/json"
return err
}

func (r *response) buildJsonPathResponse(k8sResp *http.Response, err error, data ExtractedRequestData) error {
body, errR := io.ReadAll(k8sResp.Body)
if errR != nil {
return errors.Join(errors.New("failed to read api server response"), err)
}

parsedJson, err := ParseJsonPath(body, data.JsonPath)
if err != nil {
return errors.Join(errors.New("failed to parse response with jsonpath"), err)
}

err = CopyResponse(r, k8sResp, parsedJson, prohibitedResponseHeaders)
r.contentType = "application/json"
return err
}
31 changes: 0 additions & 31 deletions internal/server/handlerWellKnownKubeconfig.go

This file was deleted.

2 changes: 0 additions & 2 deletions internal/server/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,6 @@ func NewMiddleware(theCrateKube k8s.Kube, theDownstreamKube k8s.Kube) *http.Serv

mux := http.NewServeMux()

mux.HandleFunc("/.well-known/openmcp/kubeconfig", defaultHandler(shared, wellKnownKubeconfigHandler))
mux.HandleFunc("/btp-so", defaultHandler(shared, btpSOHandler))
mux.HandleFunc("/managed", defaultHandler(shared, managedHandler))
mux.HandleFunc("/c/", defaultHandler(shared, categoryHandler))
mux.HandleFunc("/", defaultHandler(shared, mainHandler))
Expand Down