Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
2 changes: 1 addition & 1 deletion apim-apk-agent/gradle.properties
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
group=org.wso2.apk
version=1.3.0-SNAPSHOT
version=1.3.1-SNAPSHOT
file=main.go
docker_image_name=apim-apk-agent
42 changes: 33 additions & 9 deletions apim-apk-agent/pkg/managementserver/rest_server.go
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,7 @@ func StartInternalServer(port uint) {
}

func createAPIYaml(apiCPEvent *APICPEvent) (string, string, string) {

config, err := config.ReadConfigs()
provider := "admin"
if err == nil {
Expand All @@ -171,6 +172,7 @@ func createAPIYaml(apiCPEvent *APICPEvent) (string, string, string) {
primarySandboxEndpointID := ""
primaryProdcutionURL := ""
primarySandboxURL := ""
logger.LoggerMgtServer.Debugf("Production Multi-endpoint configs: %d", len(multiEndpoints.ProdEndpoints))
for _, endpoint := range multiEndpoints.ProdEndpoints {
prodCount++
var endpointName string
Expand Down Expand Up @@ -214,6 +216,7 @@ func createAPIYaml(apiCPEvent *APICPEvent) (string, string, string) {
},
})
}
logger.LoggerMgtServer.Debugf("Sandbox Multi-endpoint configs: %d", len(multiEndpoints.SandEndpoints))
for _, endpoint := range multiEndpoints.SandEndpoints {
sandCount++
var endpointName string
Expand Down Expand Up @@ -264,11 +267,12 @@ func createAPIYaml(apiCPEvent *APICPEvent) (string, string, string) {
logger.LoggerMgtServer.Errorf("Error occured while extracting operations from open API: %s, \nError: %+v", apiCPEvent.API.Definition, operationsErr)
operations = []APIOperation{}
}
sandEndpoint := ""
sandEndpoint := apiCPEvent.API.SandEndpoint
if apiCPEvent.API.SandEndpoint != "" {
sandEndpoint = fmt.Sprintf("%s://%s", apiCPEvent.API.EndpointProtocol, apiCPEvent.API.SandEndpoint)
}
prodEndpoint := ""
prodEndpoint := apiCPEvent.API.ProdEndpoint
logger.LoggerMgtServer.Infof("Sandbox Endpoint: %s, Production Endpoint: %s", sandEndpoint, prodEndpoint)
if apiCPEvent.API.ProdEndpoint != "" {
prodEndpoint = fmt.Sprintf("%s://%s", apiCPEvent.API.EndpointProtocol, apiCPEvent.API.ProdEndpoint)
}
Expand All @@ -289,7 +293,14 @@ func createAPIYaml(apiCPEvent *APICPEvent) (string, string, string) {
apiCPEvent.API.AIConfiguration.LLMProviderID + "\"}"
}
logger.LoggerMgtServer.Debugf("Subtype Configuration: %+v", subTypeConfiguration)

sandboxSecType := apiCPEvent.API.SandEndpointSecurity.SecurityType
if sandboxSecType == "" {
sandboxSecType = "NONE"
}
prodSecType := apiCPEvent.API.ProdEndpointSecurity.SecurityType
if prodSecType == "" {
prodSecType = "NONE"
}
data := map[string]interface{}{
"type": "api",
"version": "v4.6.0",
Expand Down Expand Up @@ -322,7 +333,7 @@ func createAPIYaml(apiCPEvent *APICPEvent) (string, string, string) {
"apiKeyValue": apiCPEvent.API.SandEndpointSecurity.APIKeyValue,
"apiKeyIdentifier": apiCPEvent.API.SandEndpointSecurity.APIKeyName,
"apiKeyIdentifierType": "HEADER",
"type": apiCPEvent.API.SandEndpointSecurity.SecurityType,
"type": sandboxSecType,
"username": apiCPEvent.API.SandEndpointSecurity.BasicUsername,
"password": apiCPEvent.API.SandEndpointSecurity.BasicPassword,
"enabled": apiCPEvent.API.SandEndpointSecurity.Enabled,
Expand All @@ -336,7 +347,7 @@ func createAPIYaml(apiCPEvent *APICPEvent) (string, string, string) {
"apiKeyValue": apiCPEvent.API.ProdEndpointSecurity.APIKeyValue,
"apiKeyIdentifier": apiCPEvent.API.ProdEndpointSecurity.APIKeyName,
"apiKeyIdentifierType": "HEADER",
"type": apiCPEvent.API.ProdEndpointSecurity.SecurityType,
"type": prodSecType,
"username": apiCPEvent.API.ProdEndpointSecurity.BasicUsername,
"password": apiCPEvent.API.ProdEndpointSecurity.BasicPassword,
"enabled": apiCPEvent.API.ProdEndpointSecurity.Enabled,
Expand Down Expand Up @@ -364,10 +375,12 @@ func createAPIYaml(apiCPEvent *APICPEvent) (string, string, string) {
//data["data"].(map[string]interface{})["egress"] = true
}
// TODO when we start to process sandbox we need to have this if condition. For now we remove sandbox endpoint always.
// if apiCPEvent.API.SandEndpoint == "" {
delete(data["data"].(map[string]interface{})["endpointConfig"].(map[string]interface{}), "sandbox_endpoints")
// }
if apiCPEvent.API.SandEndpoint == "" {
logger.LoggerMgtServer.Debug("Sandbox endpoint is empty. Removing sandbox endpoints from the endpoint config")
delete(data["data"].(map[string]interface{})["endpointConfig"].(map[string]interface{}), "sandbox_endpoints")
}
if apiCPEvent.API.ProdEndpoint == "" {
logger.LoggerMgtServer.Debug("Production endpoint is empty. Removing production endpoints from the endpoint config")
delete(data["data"].(map[string]interface{})["endpointConfig"].(map[string]interface{}), "production_endpoints")
}
if apiCPEvent.API.CORSPolicy != nil {
Expand All @@ -385,6 +398,7 @@ func createAPIYaml(apiCPEvent *APICPEvent) (string, string, string) {

// Handle Production fields
if apiCPEvent.API.ProdAIRL != nil {
logger.LoggerMgtServer.Infof("Production AIRL is not nil")
maxTps["production"] = apiCPEvent.API.ProdAIRL.RequestCount
maxTps["productionTimeUnit"] = strings.ToUpper(apiCPEvent.API.ProdAIRL.TimeUnit)

Expand All @@ -406,6 +420,7 @@ func createAPIYaml(apiCPEvent *APICPEvent) (string, string, string) {

// Handle Sandbox fields
if apiCPEvent.API.SandAIRL != nil {
logger.LoggerMgtServer.Infof("Sandbox AIRL is not nil")
maxTps["sandbox"] = apiCPEvent.API.SandAIRL.RequestCount
maxTps["sandboxTimeUnit"] = strings.ToUpper(apiCPEvent.API.SandAIRL.TimeUnit)

Expand Down Expand Up @@ -577,6 +592,7 @@ func createAPIYaml(apiCPEvent *APICPEvent) (string, string, string) {

// Attach endpoint_security to configMap
configMap["endpoint_security"] = endpointSecurityMap
logger.LoggerMgtServer.Debugf("Endpoint Security Map: %+v", endpointSecurityMap)

// Put endpointConfig in the main endpointMap
endpointMap["endpointConfig"] = configMap
Expand All @@ -586,15 +602,23 @@ func createAPIYaml(apiCPEvent *APICPEvent) (string, string, string) {
}

var endpointsData map[string]interface{}
logger.LoggerMgtServer.Debugf("Prod Count: %d || Sand Count: %d", prodCount, sandCount)
if prodCount > 1 || sandCount > 1 {
endpointsData = map[string]interface{}{
"type": "endpoints",
"version": "v4.6.0",
"data": dataArr,
}
}
logger.LoggerMgtServer.Debugf("\n\nSandbox Endpoint Sec Config: %+v\n\n", apiCPEvent.API.SandEndpointSecurity)
logger.LoggerMgtServer.Debugf("\n\nProd Endpoint Sec Config: %+v\n\n", apiCPEvent.API.ProdEndpointSecurity)

if primaryProductionEndpointID != "" || primarySandboxEndpointID != "" {
logger.LoggerMgtServer.Debugf("Multi-endpoint config enabled")
logger.LoggerMgtServer.Debugf("\n\nPrimary Production Endpoint ID: %s || Primary Sandbox Endpoint ID: %s\n\n", primaryProductionEndpointID, primarySandboxEndpointID)
logger.LoggerMgtServer.Debugf("Primary Production URL: %s", primaryProdcutionURL)
logger.LoggerMgtServer.Debugf("Primary Sandbox URL: %s", primarySandboxURL)

data["data"].(map[string]interface{})["primaryProductionEndpointId"] = primaryProductionEndpointID
data["data"].(map[string]interface{})["primarySandboxEndpointId"] = primarySandboxEndpointID
data["data"].(map[string]interface{})["endpointImplementationType"] = "ENDPOINT"
Expand Down Expand Up @@ -640,7 +664,7 @@ func createAPIYaml(apiCPEvent *APICPEvent) (string, string, string) {
}

var requestOperationPolicies []OperationPolicy
if apiCPEvent.API.AIModelBasedRoundRobin != nil {
if apiCPEvent.API.AIModelBasedRoundRobin != nil && apiCPEvent.API.APIType != "GraphQL" {
aiModelBasedRoundRobin := apiCPEvent.API.AIModelBasedRoundRobin
logger.LoggerMgtServer.Debugf("AIModelBasedRoundRobin : %+v", aiModelBasedRoundRobin)
wrr := ModelBasedRoundRobinConfig{
Expand Down
2 changes: 1 addition & 1 deletion apim-apk-agent/pkg/transformer/transformer.go
Original file line number Diff line number Diff line change
Expand Up @@ -613,7 +613,7 @@ func getReqAndResInterceptors(reqPolicyCount, resPolicyCount int, reqPolicies []

if resPolicyCount > 0 {
for _, resPolicy := range resPolicies {
if resPolicy.PolicyName == constants.InterceptorService {
if strings.HasSuffix(resPolicy.PolicyName, constants.InterceptorService) {
interceptorServiceURL := resPolicy.Parameters[interceptorServiceURL].(string)
includes := resPolicy.Parameters[includes].(string)
substrings := strings.Split(includes, ",")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@ metadata:
type: Opaque
data:
wso2.crt: |
LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUR1VENDQXFHZ0F3SUJBZ0lVWjNyWUtWTlpUL2FUTWpPQ21qc0JsUDlsT3ZRd0RRWUpLb1pJaHZjTkFRRUwKQlFBd1pERUxNQWtHQTFVRUJoTUNWVk14Q3pBSkJnTlZCQWdNQWtOQk1SWXdGQVlEVlFRSERBMU5iM1Z1ZEdGcApiaUJXYVdWM01RMHdDd1lEVlFRS0RBUlhVMDh5TVEwd0N3WURWUVFMREFSWFUwOHlNUkl3RUFZRFZRUUREQWxzCmIyTmhiR2h2YzNRd0hoY05NalV3TWpFek1UTXdNREV4V2hjTk1qY3dOVEU1TVRNd01ERXhXakJrTVFzd0NRWUQKVlFRR0V3SlZVekVMTUFrR0ExVUVDQXdDUTBFeEZqQVVCZ05WQkFjTURVMXZkVzUwWVdsdUlGWnBaWGN4RFRBTApCZ05WQkFvTUJGZFRUekl4RFRBTEJnTlZCQXNNQkZkVFR6SXhFakFRQmdOVkJBTU1DV3h2WTJGc2FHOXpkRENDCkFTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBSy9UejlGdnUxTXplUko5WWxFUGdCT3MKcitvQU5QeUJHZkhlSlV5M0pKdlZPWGhMdTZMWEZVcGxDZlBXcWVoZUxwTUlVeE5xTFZkaTN1ZU5mYnFYOVppbgorQU5weDVtK0Z0d2tqNXdjVFBDbmpEcnJobk81TFRReHJvdDlldHB5NTFIZ1ZXdTJpVTVsTWVSb0k0d0FkaWRnCndkS2NaS1JDRWV1UnlkU1hlekwwQ0dXRXAzdGRBNS8vc0o1bGl5WjF4ckIyODZrRUpyS2VHRE9KNWlUNWh3TFkKZEpUYzBQbGRJRjhIU2UvYnNXQWxEL05ZUUEyb0N4SUYxdmUvTVBlT2FMOGtmQml0eXQxNlJ0cDdQa25pUXZtNwp5VldjT01ja01uc0FhOTh0UHFtSFVwNHc5dnVEdHlDaG94dVkyWXg0VjBlaXFpUlFKQmRKcitpOUtCWlV2S01DCkF3RUFBYU5qTUdFd0ZBWURWUjBSQkEwd0M0SUpiRzlqWVd4b2IzTjBNQjBHQTFVZERnUVdCQlRCL2J3SzNZL0EKdUlYb05vOGxOdVdMNFZKSEJUQUxCZ05WSFE4RUJBTUNCUEF3SFFZRFZSMGxCQll3RkFZSUt3WUJCUVVIQXdFRwpDQ3NHQVFVRkJ3TUNNQTBHQ1NxR1NJYjNEUUVCQ3dVQUE0SUJBUUNsN2xXZm0xU05YeHh6MFBjY1R2WGIzVXV0CmowWUVlRms3NGJSMEFGa1ozV1RFT2NoVFpPYTNlakpwcHBMU2l3QWVSYldENm82LzBSMDRsTGdmQWU3WTVha2gKOFg5N0ozR0dob2pjbjlKclMrRkNDanhmSVQ2MXF3QXdzYUdKbWdvSUFwTEdhOUhLOTFWL0NnemkvbHdPalhpNgpSYWZpMEROSTkxWHJJQ3lNR292K1Z3bzV5YmJWeVk3bGFOMk5WTnVRa0dKbXZNNDZ3YjkrMmpuNFN6T3pZdU93Ck1ISmlYRFNoOVpidWFLaU5pQXRiaVZnWXNLbWZyaWFzVmVhd1oxbFFEcFhKQUJ0K0EyTm5BNFlySTNJSjZvazYKaFpqcmdKcWQyYzVhZGpEdzgrTERNR1lZNTIwamNhdjVuRXVMYWliMmJkRkRYSzZOaGtCMElBV2cwbFNHCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUR1VENDQXFHZ0F3SUJBZ0lVWUg5M2xBVG9wdGR3NXF6NXU5TUJtS0xvSjljd0RRWUpLb1pJaHZjTkFRRUwKQlFBd1pERUxNQWtHQTFVRUJoTUNWVk14Q3pBSkJnTlZCQWdNQWtOQk1SWXdGQVlEVlFRSERBMU5iM1Z1ZEdGcApiaUJXYVdWM01RMHdDd1lEVlFRS0RBUlhVMDh5TVEwd0N3WURWUVFMREFSWFUwOHlNUkl3RUFZRFZRUUREQWxzCmIyTmhiR2h2YzNRd0hoY05NalV3T0RFek1UQXhOVEF3V2hjTk1qY3hNakkyTVRBeE5UQXdXakJrTVFzd0NRWUQKVlFRR0V3SlZVekVMTUFrR0ExVUVDQXdDUTBFeEZqQVVCZ05WQkFjTURVMXZkVzUwWVdsdUlGWnBaWGN4RFRBTApCZ05WQkFvTUJGZFRUekl4RFRBTEJnTlZCQXNNQkZkVFR6SXhFakFRQmdOVkJBTU1DV3h2WTJGc2FHOXpkRENDCkFTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTFV6VXBlczJtZDZJTUhlekFsKzBHQ1IKLzhxSlpsRzFDcFZ3OVBGemtrTUovYlgrK2hMNG8xNGMwNHdiRk93WFpFQXcrSHBIdmpBbDYyOFhhbHRHYXZrOAoyZ3hpaG9McjdoZkp2R2xOOTZ4aFNTMW5Ialh4OHVaUmtXQkRPWTFodXZ2QTF4a3lUcDR3cW44OGRJeWlHckwrCkRKdlNlZlhzbTlwMWN4dFM3dnJtZXZiRTR2aTVqT1pNeHp2QjVFVHRkMk90d1g4M0NHckJkSXV2YzhlMkNvQzQKOFpaMXlkMnhZMWpiTmUvb0V1QTB0ZTE4Q2tCTWlPczhUeVNCZjhRTGp5a1A3ZW9OaEk1Sm5uMXZUYjE3SnQ4WAo3ekxRb2pGSVBpS211ZGR2d2krMklDdUNLNGNiOWpQbFhmSHNGSUptWk1RZ2wvcDJXR3VkdWljRWt3WS9jY2NDCkF3RUFBYU5qTUdFd0ZBWURWUjBSQkEwd0M0SUpiRzlqWVd4b2IzTjBNQjBHQTFVZERnUVdCQlJOR1B2SzhyNTgKeGJvL29PS3Y1QzJNMlZLbGFqQUxCZ05WSFE4RUJBTUNCUEF3SFFZRFZSMGxCQll3RkFZSUt3WUJCUVVIQXdFRwpDQ3NHQVFVRkJ3TUNNQTBHQ1NxR1NJYjNEUUVCQ3dVQUE0SUJBUUJMS1hwSHR4MnBzQWJaSzd3MVAveG4xRC9OCmxTK3l6dDlXSVJrOXZpMUFOUElwaG82R3RRVkNKaVdaMiszWTVpTGk4Z2szYkxlLytydVRKWjdEMkJIbXMzaGUKblZqay9mT3I5SkFtSUIwcXB4Y1ZqT004ODNOTDRReUFFU0pYSDB5cEFEVkhGbXBWUTlCZWdiTnUyQUtZd3NiNQo2Qmoxd0RGZDQ2WENjcmE1cmVoWXZPK2VGTU5QelI1V1pDRmdsb296bVFCWERxMThUL1BwODRqOGdLT2FIUWpGClFJQVovS1RQUW1FT1E3K2lhY0JoZENmc3oweE5aMTRaaEpkV012QmRWUC90RitwVU8zZyswRnVqSWF6OTJ3YkYKUnp6QmovUmNYdTI4NytuRXVURkZ4SmR3eXU4OENIRUc4Vk1aOEZHWGU0dWUxekJtN2FUNU5MaVgycmpOCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
Loading