Skip to content

Commit 5a73955

Browse files
committed
Add changes to modify external gateway API invocation URL in portal tryout
1 parent 9e38cc9 commit 5a73955

File tree

7 files changed

+87
-21
lines changed

7 files changed

+87
-21
lines changed

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

+32-9
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,8 @@
8888
import org.wso2.carbon.apimgt.api.model.policy.PolicyConstants;
8989
import org.wso2.carbon.apimgt.api.model.webhooks.Subscription;
9090
import org.wso2.carbon.apimgt.api.model.webhooks.Topic;
91+
import org.wso2.carbon.apimgt.impl.deployer.ExternalGatewayDeployer;
92+
import org.wso2.carbon.apimgt.impl.deployer.exceptions.DeployerException;
9193
import org.wso2.carbon.apimgt.impl.dto.ai.ApiChatConfigurationDTO;
9294
import org.wso2.carbon.apimgt.impl.caching.CacheProvider;
9395
import org.wso2.carbon.apimgt.impl.dao.ApiMgtDAO;
@@ -3435,8 +3437,17 @@ private String getOpenAPIDefinitionForDeployment(API api, String environmentName
34353437
apiTenantDomain = MultitenantUtils.getTenantDomain(
34363438
APIUtil.replaceEmailDomainBack(api.getId().getProviderName()));
34373439
hostsWithSchemes = getHostWithSchemeMappingForEnvironment(api, apiTenantDomain, environmentName);
3438-
api.setContext(getBasePath(apiTenantDomain, api.getContext()));
3439-
updatedDefinition = oasParser.getOASDefinitionForStore(api, definition, hostsWithSchemes, kmId);
3440+
3441+
Environment environment = APIUtil.getEnvironments().get(environmentName);
3442+
Map<String, ExternalGatewayDeployer> externalGatewayDeployers = ServiceReferenceHolder.getInstance().getExternalGatewayDeployers();
3443+
ExternalGatewayDeployer gatewayDeployer = externalGatewayDeployers.get(environment.getProvider());
3444+
if (gatewayDeployer != null) {
3445+
api.setContext("");
3446+
updatedDefinition = oasParser.getOASDefinitionForStore(api, definition, hostsWithSchemes, kmId);
3447+
} else {
3448+
api.setContext(getBasePath(apiTenantDomain, api.getContext()));
3449+
updatedDefinition = oasParser.getOASDefinitionForStore(api, definition, hostsWithSchemes, kmId);
3450+
}
34403451
return updatedDefinition;
34413452
}
34423453

@@ -3607,13 +3618,25 @@ private Map<String, String> getHostWithSchemeMappingForEnvironment(API api, Stri
36073618
}
36083619

36093620
VHost vhost = VHostUtils.getVhostFromEnvironment(environment, host);
3610-
if (StringUtils.containsIgnoreCase(api.getTransports(), APIConstants.HTTP_PROTOCOL)
3611-
&& vhost.getHttpPort() != -1) {
3612-
hostsWithSchemes.put(APIConstants.HTTP_PROTOCOL, vhost.getHttpUrl());
3613-
}
3614-
if (StringUtils.containsIgnoreCase(api.getTransports(), APIConstants.HTTPS_PROTOCOL)
3615-
&& vhost.getHttpsPort() != -1) {
3616-
hostsWithSchemes.put(APIConstants.HTTPS_PROTOCOL, vhost.getHttpsUrl());
3621+
Map<String, ExternalGatewayDeployer> externalGatewayDeployers = ServiceReferenceHolder.getInstance().getExternalGatewayDeployers();
3622+
ExternalGatewayDeployer gatewayDeployer = externalGatewayDeployers.get(environment.getProvider());
3623+
try {
3624+
if (StringUtils.containsIgnoreCase(api.getTransports(), APIConstants.HTTP_PROTOCOL)
3625+
&& vhost.getHttpPort() != -1) {
3626+
String httpUrl = gatewayDeployer != null ?
3627+
gatewayDeployer.getResolvedAPIInvocationUrl(api.getUuid(), vhost.getHttpUrl(), environment) :
3628+
vhost.getHttpUrl();
3629+
hostsWithSchemes.put(APIConstants.HTTP_PROTOCOL, httpUrl);
3630+
}
3631+
if (StringUtils.containsIgnoreCase(api.getTransports(), APIConstants.HTTPS_PROTOCOL)
3632+
&& vhost.getHttpsPort() != -1) {
3633+
String httpsUrl = gatewayDeployer != null ?
3634+
gatewayDeployer.getResolvedAPIInvocationUrl(api.getUuid(), vhost.getHttpsUrl(), environment) :
3635+
vhost.getHttpsUrl();
3636+
hostsWithSchemes.put(APIConstants.HTTPS_PROTOCOL, httpsUrl);
3637+
}
3638+
} catch (DeployerException e) {
3639+
throw new APIManagementException(e.getMessage());
36173640
}
36183641
}
36193642
return hostsWithSchemes;

components/apimgt/org.wso2.carbon.apimgt.impl/src/main/java/org/wso2/carbon/apimgt/impl/dao/ApiMgtDAO.java

+20-4
Original file line numberDiff line numberDiff line change
@@ -15225,8 +15225,8 @@ private void addGatewayVhosts(Connection connection, int id, List<VHost> vhosts)
1522515225
prepStmt.setInt(1, id);
1522615226
prepStmt.setString(2, vhost.getHost());
1522715227
prepStmt.setString(3, vhost.getHttpContext());
15228-
prepStmt.setString(4, vhost.getHttpPort().toString());
15229-
prepStmt.setString(5, vhost.getHttpsPort().toString());
15228+
prepStmt.setString(4, (vhost.getHttpPort() != null) ? vhost.getHttpPort().toString() : "N/A");
15229+
prepStmt.setString(5, (vhost.getHttpsPort() != null) ? vhost.getHttpsPort().toString() : "N/A");
1523015230
prepStmt.setString(6, (vhost.getWsPort() != null) ? vhost.getWsPort().toString() : "N/A");
1523115231
prepStmt.setString(7, (vhost.getWssPort() != null) ? vhost.getWssPort().toString() : "N/A");
1523215232
prepStmt.addBatch();
@@ -15271,8 +15271,24 @@ private List<VHost> getVhostGatewayEnvironments(Connection connection, Integer e
1527115271
while (rs.next()) {
1527215272
String host = rs.getString("HOST");
1527315273
String httpContext = rs.getString("HTTP_CONTEXT");
15274-
Integer httpPort = rs.getInt("HTTP_PORT");
15275-
Integer httpsPort = rs.getInt("HTTPS_PORT");
15274+
Integer httpPort;
15275+
String httpPortValue = rs.getString("HTTP_PORT");
15276+
if ("N/A".equals(httpPortValue)) {
15277+
// Handle the "N/A" case
15278+
httpPort = null;
15279+
} else {
15280+
// Parse the integer value
15281+
httpPort = Integer.parseInt(httpPortValue);
15282+
}
15283+
Integer httpsPort;
15284+
String httpsPortValue = rs.getString("HTTPS_PORT");
15285+
if ("N/A".equals(httpsPortValue)) {
15286+
// Handle the "N/A" case
15287+
httpsPort = null;
15288+
} else {
15289+
// Parse the integer value
15290+
httpsPort = Integer.parseInt(httpsPortValue);
15291+
}
1527615292
Integer wsPort;
1527715293
String wsPortValue = rs.getString("WS_PORT");
1527815294
if ("N/A".equals(wsPortValue)) {

components/apimgt/org.wso2.carbon.apimgt.impl/src/main/java/org/wso2/carbon/apimgt/impl/deployer/ExternalGatewayDeployer.java

+10
Original file line numberDiff line numberDiff line change
@@ -88,4 +88,14 @@ public boolean undeploy(String apiID, String apiName, String apiVersion, String
8888
* @return List<String> validation result
8989
*/
9090
public List<String> validateApi(API api) throws DeployerException;
91+
92+
/**
93+
* This method returns the resolved API invocation URL by replacing all placeholders appropriately
94+
*
95+
* @return String resolved url
96+
*/
97+
public default String getResolvedAPIInvocationUrl(String apiId, String url, Environment environment)
98+
throws DeployerException {
99+
return url;
100+
}
91101
}

components/apimgt/org.wso2.carbon.apimgt.rest.api.admin.v1/src/gen/java/org/wso2/carbon/apimgt/rest/api/admin/v1/dto/VHostDTO.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public VHostDTO host(String host) {
4040
@ApiModelProperty(example = "mg.wso2.com", required = true, value = "")
4141
@JsonProperty("host")
4242
@NotNull
43-
@Pattern(regexp="^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\\-]*[A-Za-z0-9])$") @Size(min=1,max=255) public String getHost() {
43+
@Size(min=1,max=255) public String getHost() {
4444
return host;
4545
}
4646
public void setHost(String host) {

components/apimgt/org.wso2.carbon.apimgt.rest.api.admin.v1/src/main/resources/admin-api.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -4832,7 +4832,7 @@ components:
48324832
maxLength: 255
48334833
minLength: 1
48344834
# hostname regex as per RFC 1123 (http://tools.ietf.org/html/rfc1123) and appended *
4835-
pattern: '^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$'
4835+
#pattern: '^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$'
48364836
type: string
48374837
example: mg.wso2.com
48384838
httpContext:

components/apimgt/org.wso2.carbon.apimgt.rest.api.common/src/main/resources/admin-api.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -4832,7 +4832,7 @@ components:
48324832
maxLength: 255
48334833
minLength: 1
48344834
# hostname regex as per RFC 1123 (http://tools.ietf.org/html/rfc1123) and appended *
4835-
pattern: '^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$'
4835+
#pattern: '^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$'
48364836
type: string
48374837
example: mg.wso2.com
48384838
httpContext:

components/apimgt/org.wso2.carbon.apimgt.rest.api.store.v1/src/main/java/org/wso2/carbon/apimgt/rest/api/store/v1/mappings/APIMappingUtil.java

+22-5
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@
4242
import org.wso2.carbon.apimgt.api.model.VHost;
4343
import org.wso2.carbon.apimgt.impl.APIConstants;
4444
import org.wso2.carbon.apimgt.impl.APIType;
45+
import org.wso2.carbon.apimgt.impl.deployer.ExternalGatewayDeployer;
46+
import org.wso2.carbon.apimgt.impl.deployer.exceptions.DeployerException;
47+
import org.wso2.carbon.apimgt.impl.internal.ServiceReferenceHolder;
4548
import org.wso2.carbon.apimgt.impl.utils.APIUtil;
4649
import org.wso2.carbon.apimgt.impl.utils.VHostUtils;
4750
import org.wso2.carbon.apimgt.rest.api.common.RestApiCommonUtil;
@@ -567,11 +570,25 @@ private static APIEndpointURLsDTO fromAPIRevisionToEndpoints(APIDTO apidto, Envi
567570
boolean isGQLSubscription = StringUtils.equalsIgnoreCase(APIConstants.GRAPHQL_API, apidto.getType())
568571
&& isGraphQLSubscriptionsAvailable(apidto);
569572
if (!isWs) {
570-
if (apidto.getTransport().contains(APIConstants.HTTP_PROTOCOL)) {
571-
apiurLsDTO.setHttp(vHost.getHttpUrl() + context);
572-
}
573-
if (apidto.getTransport().contains(APIConstants.HTTPS_PROTOCOL)) {
574-
apiurLsDTO.setHttps(vHost.getHttpsUrl() + context);
573+
//prevent context appending in case the gateway is an external one
574+
Map<String, ExternalGatewayDeployer> externalGatewayDeployers = ServiceReferenceHolder.getInstance().
575+
getExternalGatewayDeployers();
576+
ExternalGatewayDeployer gatewayDeployer = externalGatewayDeployers.get(environment.getProvider());
577+
context = gatewayDeployer != null ? "" : context;
578+
try {
579+
String httpUrl = gatewayDeployer != null ? gatewayDeployer.getResolvedAPIInvocationUrl(
580+
apidto.getId(), vHost.getHttpUrl(), environment) : vHost.getHttpUrl();
581+
String httpsUrl = gatewayDeployer != null ? gatewayDeployer.getResolvedAPIInvocationUrl(
582+
apidto.getId(), vHost.getHttpsUrl(), environment) : vHost.getHttpsUrl();
583+
584+
if (apidto.getTransport().contains(APIConstants.HTTP_PROTOCOL)) {
585+
apiurLsDTO.setHttp(httpUrl + context);
586+
}
587+
if (apidto.getTransport().contains(APIConstants.HTTPS_PROTOCOL)) {
588+
apiurLsDTO.setHttps(httpsUrl + context);
589+
}
590+
} catch (DeployerException e) {
591+
throw new APIManagementException(e.getMessage());
575592
}
576593
}
577594
if (isWs || isGQLSubscription) {

0 commit comments

Comments
 (0)