Skip to content

Commit 4ce3f58

Browse files
committed
Add federated gateway agent core implementation
1 parent 648a0b7 commit 4ce3f58

File tree

14 files changed

+454
-94
lines changed

14 files changed

+454
-94
lines changed

components/apimgt/org.wso2.carbon.apimgt.api/src/main/java/org/wso2/carbon/apimgt/api/APIConstants.java

+29
Original file line numberDiff line numberDiff line change
@@ -97,4 +97,33 @@ public static class AIAPIConstants {
9797
public static final String LLM_PROVIDER = "LLM_PROVIDER";
9898
public static final String LLM_PROVIDER_TENANT_ALL = "ALL";
9999
}
100+
101+
public static class FederatedGatewayConstants {
102+
public static final String CORS_FEATURE = "cors";
103+
public static final String SCHEMA_VALIDATION_FEATURE = "schemaValidation";
104+
public static final String RESPONSE_CACHING_FEATURE = "responseCaching";
105+
public static final String TRANSPORTS_HTTP_FEATURE = "transportsHTTP";
106+
public static final String TRANSPORTS_HTTPS_FEATURE = "transportsHTTPS";
107+
public static final String TRANSPORTS_MUTUAL_SSL_FEATURE = "transportsMutualSSL";
108+
public static final String API_LEVEL_RATE_LIMITING_FEATURE = "apiLevelRateLimiting";
109+
public static final String OPERATION_LEVEL_RATE_LIMITING_FEATURE = "operationLevelRateLimiting";
110+
public static final String OPERATION_SECURITY_FEATURE = "operationSecurity";
111+
public static final String OPERATION_SCOPES_FEATURE = "operationScopes";
112+
public static final String OPERATION_LEVEL_POLICIES_FEATURE = "operationLevelPolicies";
113+
public static final String MONETIZATION_FEATURE = "monetization";
114+
public static final String SUBSCRIPTIONS_FEATURE = "subscriptions";
115+
public static final String OAUTH2_FEATURE = "oauth2";
116+
public static final String APIKEY_FEATURE = "apikey";
117+
public static final String BASIC_AUTH_FEATURE = "basicAuth";
118+
public static final String AUDIENCE_VALIDATION_FEATURE = "audienceValidation";
119+
public static final String ENDPOINTS_REST_FEATURE = "restEndpoints";
120+
public static final String ENDPOINTS_SERVICE_FEATURE = "serviceEndpoints";
121+
public static final String ENDPOINTS_SOAP_FEATURE = "soapEndpoints";
122+
public static final String ENDPOINTS_DYNAMIC_FEATURE = "dynamicEndpoints";
123+
public static final String ENDPOINTS_MOCK_FEATURE = "mockEndpoints";
124+
public static final String ENDPOINTS_LAMBDA_FEATURE = "lambdaEndpoints";
125+
public static final String ENDPOINTS_SEQUENCE_BACKEND_FEATURE = "sequenceEndpoints";
126+
127+
128+
}
100129
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package org.wso2.carbon.apimgt.api.model;
2+
3+
import org.wso2.carbon.apimgt.api.APIManagementException;
4+
5+
import java.io.FileInputStream;
6+
7+
public interface FederatedGatewayAgent {
8+
9+
/**
10+
* Deploy API to the federated gateway
11+
*
12+
* @param apiArchive API archive file
13+
* @throws APIManagementException
14+
*/
15+
void deployAPI(FileInputStream apiArchive) throws APIManagementException;
16+
17+
/**
18+
* Undeploy API from the federated gateway
19+
*
20+
* @param apiId
21+
* @throws APIManagementException
22+
*/
23+
void undeployAPI(String apiId) throws APIManagementException;
24+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package org.wso2.carbon.apimgt.api.model;
2+
3+
import org.wso2.carbon.apimgt.api.APIConstants;
4+
5+
import java.util.HashMap;
6+
import java.util.List;
7+
import java.util.Map;
8+
9+
public interface FederatedGatewayAgentConfiguration {
10+
Map<String, Boolean> featureConfigurations = new HashMap<>();
11+
12+
/**
13+
* This method used to get Type
14+
*/
15+
public String getType();
16+
17+
/**
18+
* This method returns the Gateway Agent implementation class name
19+
*
20+
* @return gateway agent implementation class name
21+
*/
22+
public String getImplementation();
23+
24+
/**
25+
* This method returns the Configurations related to federated gateway registration
26+
*
27+
* @return List<ConfigurationDto> connectionConfigurations
28+
*/
29+
public List<ConfigurationDto> getConnectionConfigurations();
30+
31+
/**
32+
* This method returns the Configurations related to features supported in federated gateway registration
33+
* By default all features are enabled. If a feature is not supported, it should be disabled at the specific federated
34+
* gateway implementation level.
35+
*
36+
* @return Map<String, Boolean> featureConfigurations
37+
*/
38+
public default Map<String, Boolean> getFeatureConfigurations() {
39+
featureConfigurations.put(APIConstants.FederatedGatewayConstants.CORS_FEATURE, true);
40+
featureConfigurations.put(APIConstants.FederatedGatewayConstants.SCHEMA_VALIDATION_FEATURE, true);
41+
featureConfigurations.put(APIConstants.FederatedGatewayConstants.RESPONSE_CACHING_FEATURE, true);
42+
featureConfigurations.put(APIConstants.FederatedGatewayConstants.TRANSPORTS_HTTP_FEATURE, true);
43+
featureConfigurations.put(APIConstants.FederatedGatewayConstants.TRANSPORTS_HTTPS_FEATURE, true);
44+
featureConfigurations.put(APIConstants.FederatedGatewayConstants.TRANSPORTS_MUTUAL_SSL_FEATURE, true);
45+
featureConfigurations.put(APIConstants.FederatedGatewayConstants.API_LEVEL_RATE_LIMITING_FEATURE, true);
46+
featureConfigurations.put(APIConstants.FederatedGatewayConstants.OPERATION_LEVEL_RATE_LIMITING_FEATURE, true);
47+
featureConfigurations.put(APIConstants.FederatedGatewayConstants.OPERATION_SECURITY_FEATURE, true);
48+
featureConfigurations.put(APIConstants.FederatedGatewayConstants.OPERATION_SCOPES_FEATURE, true);
49+
featureConfigurations.put(APIConstants.FederatedGatewayConstants.OPERATION_LEVEL_POLICIES_FEATURE, true);
50+
featureConfigurations.put(APIConstants.FederatedGatewayConstants.MONETIZATION_FEATURE, true);
51+
featureConfigurations.put(APIConstants.FederatedGatewayConstants.SUBSCRIPTIONS_FEATURE, true);
52+
featureConfigurations.put(APIConstants.FederatedGatewayConstants.OAUTH2_FEATURE, true);
53+
featureConfigurations.put(APIConstants.FederatedGatewayConstants.APIKEY_FEATURE, true);
54+
featureConfigurations.put(APIConstants.FederatedGatewayConstants.BASIC_AUTH_FEATURE, true);
55+
featureConfigurations.put(APIConstants.FederatedGatewayConstants.AUDIENCE_VALIDATION_FEATURE, true);
56+
featureConfigurations.put(APIConstants.FederatedGatewayConstants.ENDPOINTS_REST_FEATURE, true);
57+
featureConfigurations.put(APIConstants.FederatedGatewayConstants.ENDPOINTS_SERVICE_FEATURE, true);
58+
featureConfigurations.put(APIConstants.FederatedGatewayConstants.ENDPOINTS_SOAP_FEATURE, true);
59+
featureConfigurations.put(APIConstants.FederatedGatewayConstants.ENDPOINTS_DYNAMIC_FEATURE, true);
60+
featureConfigurations.put(APIConstants.FederatedGatewayConstants.ENDPOINTS_MOCK_FEATURE, true);
61+
featureConfigurations.put(APIConstants.FederatedGatewayConstants.ENDPOINTS_LAMBDA_FEATURE, true);
62+
featureConfigurations.put(APIConstants.FederatedGatewayConstants.ENDPOINTS_SEQUENCE_BACKEND_FEATURE, true);
63+
return featureConfigurations;
64+
}
65+
66+
/**
67+
* This method used to get Display Name
68+
*
69+
* @return String displayName
70+
*/
71+
public default String getDisplayName() {
72+
return getType();
73+
}
74+
}

components/apimgt/org.wso2.carbon.apimgt.impl/src/main/java/org/wso2/carbon/apimgt/impl/APIConstants.java

+6
Original file line numberDiff line numberDiff line change
@@ -3265,4 +3265,10 @@ public static class TransactionCounter {
32653265

32663266
//Property for enabling application update capabilities for users in the same organization.
32673267
public static final String ORGANIZATION_WIDE_APPLICATION_UPDATE_ENABLED = "orgWideAppUpdateEnabled";
3268+
3269+
public static class FederatedGatewayConstants {
3270+
3271+
public static final String FEDERATED_GATEWAY_TYPE = "type";
3272+
3273+
}
32683274
}

components/apimgt/org.wso2.carbon.apimgt.impl/src/main/java/org/wso2/carbon/apimgt/impl/internal/APIManagerComponent.java

+34
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import org.wso2.carbon.apimgt.api.APIMgtInternalException;
4141
import org.wso2.carbon.apimgt.api.LLMProviderService;
4242
import org.wso2.carbon.apimgt.api.OrganizationResolver;
43+
import org.wso2.carbon.apimgt.api.model.FederatedGatewayAgentConfiguration;
4344
import org.wso2.carbon.apimgt.api.model.KeyManagerConnectorConfiguration;
4445
import org.wso2.carbon.apimgt.api.model.WorkflowTaskService;
4546
import org.wso2.carbon.apimgt.api.quotalimiter.ResourceQuotaLimiter;
@@ -1111,4 +1112,37 @@ protected void setWorkflowTaskService(WorkflowTaskService workflowTaskService) {
11111112
protected void unsetWorkflowTaskService(WorkflowTaskService workflowTaskService) {
11121113
ServiceReferenceHolder.getInstance().setWorkflowTaskService(null);
11131114
}
1115+
1116+
/**
1117+
* Initialize the Gateway Connector configuration Service dependency
1118+
*
1119+
* @param gatewayAgentConfiguration {@link FederatedGatewayAgentConfiguration} service reference.
1120+
*/
1121+
@Reference(
1122+
name = "gateway.connector.service",
1123+
service = FederatedGatewayAgentConfiguration.class,
1124+
cardinality = ReferenceCardinality.MULTIPLE,
1125+
policy = ReferencePolicy.DYNAMIC,
1126+
unbind = "removeFederatedGatewayAgentConfiguration")
1127+
protected void addFederatedGatewayAgentConfiguration(
1128+
FederatedGatewayAgentConfiguration gatewayAgentConfiguration) {
1129+
1130+
ServiceReferenceHolder.getInstance()
1131+
.addFederatedGatewayAgentConfiguration(gatewayAgentConfiguration.getType(),
1132+
gatewayAgentConfiguration);
1133+
}
1134+
1135+
/**
1136+
* Remove the Gateway Connector configuration Service dependency
1137+
*
1138+
* @param gatewayAgentConfiguration
1139+
* @param properties properties
1140+
*/
1141+
protected void removeFederatedGatewayAgentConfiguration(
1142+
FederatedGatewayAgentConfiguration gatewayAgentConfiguration, Map<String, Object> properties) {
1143+
if (properties.containsKey(APIConstants.FederatedGatewayConstants.FEDERATED_GATEWAY_TYPE)){
1144+
String type = (String) properties.get(APIConstants.FederatedGatewayConstants.FEDERATED_GATEWAY_TYPE);
1145+
ServiceReferenceHolder.getInstance().removeFederatedGatewayAgentConfiguration(type);
1146+
}
1147+
}
11141148
}

components/apimgt/org.wso2.carbon.apimgt.impl/src/main/java/org/wso2/carbon/apimgt/impl/internal/ServiceReferenceHolder.java

+19
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import org.wso2.carbon.apimgt.api.APIDefinition;
2020
import org.wso2.carbon.apimgt.api.LLMProviderService;
2121
import org.wso2.carbon.apimgt.api.OrganizationResolver;
22+
import org.wso2.carbon.apimgt.api.model.FederatedGatewayAgentConfiguration;
2223
import org.wso2.carbon.apimgt.api.model.KeyManagerConnectorConfiguration;
2324
import org.wso2.carbon.apimgt.api.model.WorkflowTaskService;
2425
import org.wso2.carbon.apimgt.api.quotalimiter.ResourceQuotaLimiter;
@@ -82,6 +83,8 @@ public class ServiceReferenceHolder {
8283

8384
private Map<String, LLMProviderService> llmProviderServiceMap = new HashMap();
8485

86+
private Map<String, FederatedGatewayAgentConfiguration> federatedGatewayAgentConfigurationMap = new HashMap<>();
87+
8588
private ServiceReferenceHolder() {
8689

8790
}
@@ -401,4 +404,20 @@ public Map<String, LLMProviderService> getLLMProviderServiceMap() {
401404
return this.llmProviderServiceMap;
402405
}
403406

407+
public void addFederatedGatewayAgentConfiguration(String type,
408+
FederatedGatewayAgentConfiguration gatewayAgentConfiguration) {
409+
410+
federatedGatewayAgentConfigurationMap.put(type, gatewayAgentConfiguration);
411+
}
412+
413+
public void removeFederatedGatewayAgentConfiguration(String type) {
414+
415+
federatedGatewayAgentConfigurationMap.remove(type);
416+
}
417+
418+
public Map<String, FederatedGatewayAgentConfiguration> getFederatedGatewayConnectorConfigurations() {
419+
420+
return federatedGatewayAgentConfigurationMap;
421+
}
422+
404423
}

components/apimgt/org.wso2.carbon.apimgt.impl/src/main/java/org/wso2/carbon/apimgt/impl/utils/APIUtil.java

+6-29
Original file line numberDiff line numberDiff line change
@@ -89,36 +89,8 @@
8989
import org.wso2.carbon.apimgt.api.doc.model.Operation;
9090
import org.wso2.carbon.apimgt.api.doc.model.Parameter;
9191
import org.wso2.carbon.apimgt.api.dto.KeyManagerConfigurationDTO;
92-
import org.wso2.carbon.apimgt.api.model.API;
93-
import org.wso2.carbon.apimgt.api.model.APICategory;
94-
import org.wso2.carbon.apimgt.api.model.APIIdentifier;
95-
import org.wso2.carbon.apimgt.api.model.APIProduct;
96-
import org.wso2.carbon.apimgt.api.model.APIProductIdentifier;
97-
import org.wso2.carbon.apimgt.api.model.APIPublisher;
98-
import org.wso2.carbon.apimgt.api.model.APIRevision;
99-
import org.wso2.carbon.apimgt.api.model.APIStatus;
100-
import org.wso2.carbon.apimgt.api.model.APIStore;
101-
import org.wso2.carbon.apimgt.api.model.Application;
102-
import org.wso2.carbon.apimgt.api.model.ApplicationInfoKeyManager;
103-
import org.wso2.carbon.apimgt.api.model.CORSConfiguration;
104-
import org.wso2.carbon.apimgt.api.model.Documentation;
105-
import org.wso2.carbon.apimgt.api.model.DocumentationType;
106-
import org.wso2.carbon.apimgt.api.model.EndpointSecurity;
107-
import org.wso2.carbon.apimgt.api.model.Environment;
108-
import org.wso2.carbon.apimgt.api.model.Identifier;
109-
import org.wso2.carbon.apimgt.api.model.KeyManagerConfiguration;
110-
import org.wso2.carbon.apimgt.api.model.KeyManagerConnectorConfiguration;
111-
import org.wso2.carbon.apimgt.api.model.Mediation;
112-
import org.wso2.carbon.apimgt.api.model.OperationPolicyData;
113-
import org.wso2.carbon.apimgt.api.model.OperationPolicyDefinition;
114-
import org.wso2.carbon.apimgt.api.model.OperationPolicySpecification;
92+
import org.wso2.carbon.apimgt.api.model.*;
11593
import org.wso2.carbon.apimgt.api.model.Provider;
116-
import org.wso2.carbon.apimgt.api.model.Scope;
117-
import org.wso2.carbon.apimgt.api.model.ServiceEntry;
118-
import org.wso2.carbon.apimgt.api.model.Tier;
119-
import org.wso2.carbon.apimgt.api.model.URITemplate;
120-
import org.wso2.carbon.apimgt.api.model.VHost;
121-
import org.wso2.carbon.apimgt.api.model.WebsubSubscriptionConfiguration;
12294
import org.wso2.carbon.apimgt.api.model.graphql.queryanalysis.GraphqlComplexityInfo;
12395
import org.wso2.carbon.apimgt.api.model.policy.AIAPIQuotaLimit;
12496
import org.wso2.carbon.apimgt.api.model.policy.APIPolicy;
@@ -10988,4 +10960,9 @@ public static Boolean isOrgWideAppUpdateEnabled() {
1098810960
return Boolean.getBoolean(
1098910961
APIConstants.ORGANIZATION_WIDE_APPLICATION_UPDATE_ENABLED);
1099010962
}
10963+
10964+
public static Map<String, FederatedGatewayAgentConfiguration> getFederatedGatewayConfigurations() {
10965+
10966+
return ServiceReferenceHolder.getInstance().getFederatedGatewayConnectorConfigurations();
10967+
}
1099110968
}

0 commit comments

Comments
 (0)