diff --git a/apps/database-abstractor/src/main/java/com/akto/action/DbAction.java b/apps/database-abstractor/src/main/java/com/akto/action/DbAction.java index d389c28933..e55116e457 100644 --- a/apps/database-abstractor/src/main/java/com/akto/action/DbAction.java +++ b/apps/database-abstractor/src/main/java/com/akto/action/DbAction.java @@ -409,6 +409,20 @@ public String updateApiCollectionNameForVxlan() { return Action.SUCCESS.toUpperCase(); } + String transportType; + public String updateTransportType() { + try { + ApiCollection apiCollection = ApiCollectionsDao.instance.getMeta(apiCollectionId); + if (apiCollection != null) { + ApiCollectionsDao.instance.updateTransportType(apiCollection, transportType); + } + } catch (Exception e) { + loggerMaker.errorAndAddToDb(e, "error in updateTransportType " + e.toString()); + return Action.ERROR.toUpperCase(); + } + return Action.SUCCESS.toUpperCase(); + } + public String updateModuleInfo() { try { DbLayer.updateModuleInfo(moduleInfo); @@ -4109,4 +4123,12 @@ public void setTestingRunResultId(String testingRunResultId) { public void setUrlType(String urlType) { this.urlType = urlType; } + + public String getTransportType() { + return transportType; + } + + public void setTransportType(String transportType) { + this.transportType = transportType; + } } diff --git a/apps/database-abstractor/src/main/resources/struts.xml b/apps/database-abstractor/src/main/resources/struts.xml index d1713349a0..e350efd5db 100644 --- a/apps/database-abstractor/src/main/resources/struts.xml +++ b/apps/database-abstractor/src/main/resources/struts.xml @@ -68,6 +68,17 @@ + + + + + + 422 + false + ^actionErrors.* + + + diff --git a/libs/dao/src/main/java/com/akto/dao/ApiCollectionsDao.java b/libs/dao/src/main/java/com/akto/dao/ApiCollectionsDao.java index a6b1a86aa9..d8f256fd55 100644 --- a/libs/dao/src/main/java/com/akto/dao/ApiCollectionsDao.java +++ b/libs/dao/src/main/java/com/akto/dao/ApiCollectionsDao.java @@ -74,6 +74,14 @@ public Map getApiCollectionsMetaMap() { return apiCollectionsMap; } + public void updateTransportType(ApiCollection apiCollection, String transportType) { + Bson filter = Filters.eq(ApiCollection.ID, apiCollection.getId()); + Bson update = Updates.set(ApiCollection.MCP_TRANSPORT_TYPE, transportType); + ApiCollectionsDao.instance.updateOne(filter, update); + apiCollection.setMcpTransportType(transportType); + } + + public List getMetaAll() { return ApiCollectionsDao.instance.findAll(new BasicDBObject(), Projections.exclude("urls")); } diff --git a/libs/dao/src/main/java/com/akto/dto/ApiCollection.java b/libs/dao/src/main/java/com/akto/dto/ApiCollection.java index c246ff67d5..f9b34b2f1e 100644 --- a/libs/dao/src/main/java/com/akto/dto/ApiCollection.java +++ b/libs/dao/src/main/java/com/akto/dto/ApiCollection.java @@ -58,6 +58,10 @@ public class ApiCollection { String sseCallbackUrl; public static final String SSE_CALLBACK_URL = "sseCallbackUrl"; + private String mcpTransportType; + public static final String MCP_TRANSPORT_TYPE = "mcpTransportType"; + + private static final List ENV_KEYWORDS_WITH_DOT = Arrays.asList( "staging", "preprod", "qa", "demo", "dev", "test", "svc", "localhost", "local", "intranet", "lan", "example", "invalid", @@ -69,6 +73,14 @@ public class ApiCollection { "kubernetes", "internal" ); + public String getMcpTransportType() { + return mcpTransportType; + } + + public void setMcpTransportType(String mcpTransportType) { + this.mcpTransportType = mcpTransportType; + } + public enum Type { API_GROUP diff --git a/libs/utils/src/main/java/com/akto/data_actor/ClientActor.java b/libs/utils/src/main/java/com/akto/data_actor/ClientActor.java index cb5f5180c1..5276b511a5 100644 --- a/libs/utils/src/main/java/com/akto/data_actor/ClientActor.java +++ b/libs/utils/src/main/java/com/akto/data_actor/ClientActor.java @@ -220,6 +220,24 @@ public void updateApiCollectionNameForVxlan(int vxlanId, String name) { } } + public void updateTransportType(int apiCollectionId, String transportType) { + Map> headers = buildHeaders(); + BasicDBObject obj = new BasicDBObject(); + obj.put("apiCollectionId", apiCollectionId); + obj.put("transportType", transportType); + OriginalHttpRequest request = new OriginalHttpRequest(url + "/updateTransportType", "", "POST", obj.toString(), headers, ""); + try { + OriginalHttpResponse response = ApiExecutor.sendRequest(request, true, null, false, null); + if (response.getStatusCode() != 200) { + loggerMaker.errorAndAddToDb("non 2xx response in updateTransportType", LoggerMaker.LogDb.RUNTIME); + return; + } + } catch (Exception e) { + loggerMaker.errorAndAddToDb("error updating transport type" + e + " apiCollectionId " + apiCollectionId + + " transportType " + transportType, LoggerMaker.LogDb.RUNTIME); + } + } + public APIConfig fetchApiConfig(String configName) { Map> headers = buildHeaders(); String queryParams = "?configName="+configName; diff --git a/libs/utils/src/main/java/com/akto/data_actor/DataActor.java b/libs/utils/src/main/java/com/akto/data_actor/DataActor.java index 7034d26033..c951ec95dc 100644 --- a/libs/utils/src/main/java/com/akto/data_actor/DataActor.java +++ b/libs/utils/src/main/java/com/akto/data_actor/DataActor.java @@ -55,6 +55,8 @@ public abstract class DataActor { public abstract void updateApiCollectionNameForVxlan(int vxlanId, String name); + public abstract void updateTransportType(int apiCollectionId, String transportType); + public abstract APIConfig fetchApiConfig(String configName); public abstract void bulkWriteSingleTypeInfo(List writesForApiInfo); diff --git a/libs/utils/src/main/java/com/akto/data_actor/DbActor.java b/libs/utils/src/main/java/com/akto/data_actor/DbActor.java index 36d25eab7d..07a68ab969 100644 --- a/libs/utils/src/main/java/com/akto/data_actor/DbActor.java +++ b/libs/utils/src/main/java/com/akto/data_actor/DbActor.java @@ -1,5 +1,6 @@ package com.akto.data_actor; +import com.akto.dao.ApiCollectionsDao; import com.akto.dto.*; import com.akto.dto.ApiInfo.ApiInfoKey; import com.akto.dto.billing.Organization; @@ -69,6 +70,11 @@ public void updateApiCollectionNameForVxlan(int vxlanId, String name) { DbLayer.updateApiCollectionName(vxlanId, name); } + @Override + public void updateTransportType(int apiCollectionId, String transportType) { + ApiCollectionsDao.instance.updateTransportType(ApiCollectionsDao.instance.getMeta(apiCollectionId), transportType); + } + public APIConfig fetchApiConfig(String configName) { return DbLayer.fetchApiconfig(configName); }