Skip to content

Commit ca4b4c2

Browse files
author
rathnapandi
committed
support #565
1 parent e3e52fa commit ca4b4c2

5 files changed

Lines changed: 106 additions & 1 deletion

File tree

‎modules/apim-adapter/src/main/java/com/axway/apim/adapter/APIManagerAdapter.java‎

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import com.axway.apim.lib.error.ErrorCode;
1515
import com.axway.apim.lib.utils.Utils;
1616
import com.axway.apim.lib.utils.rest.*;
17+
import com.fasterxml.jackson.core.type.TypeReference;
1718
import com.fasterxml.jackson.databind.JsonNode;
1819
import com.fasterxml.jackson.databind.ObjectMapper;
1920
import org.apache.commons.io.IOUtils;
@@ -251,7 +252,7 @@ public void switchOrgAndRole(User user, String targetOrgName) {
251252
if (organizationsIdToName == null)
252253
return;
253254

254-
for (Map.Entry<String,String> entry : organizationsIdToName.entrySet()) {
255+
for (Map.Entry<String, String> entry : organizationsIdToName.entrySet()) {
255256
String orgName = entry.getValue();
256257
if (orgName.equals(targetOrgName)) {
257258
String role = user.getOrgs2Role().get(entry.getKey());
@@ -598,6 +599,28 @@ public static String getCertInfo(InputStream certificate, String password, CaCer
598599
}
599600
}
600601

602+
603+
public List<CaCert> getCertInfoFromUrl(String url) throws AppException {
604+
try {
605+
URI uri = new URIBuilder(cmd.getAPIManagerURL()).setPath(cmd.getApiBasepath() + "/certinfoFromUrl").build();
606+
List<NameValuePair> params = new ArrayList<>();
607+
params.add(new BasicNameValuePair("url", url));
608+
params.add(new BasicNameValuePair("inbound", "true"));
609+
POSTRequest postRequest = new POSTRequest(new UrlEncodedFormEntity(params), uri);
610+
try (CloseableHttpResponse httpResponse = (CloseableHttpResponse) postRequest.execute()) {
611+
int statusCode = httpResponse.getStatusLine().getStatusCode();
612+
if (statusCode != 200) {
613+
String response = EntityUtils.toString(httpResponse.getEntity());
614+
throw new AppException("API-Manager failed to read certificate information from URL. Got response: '" + response + "'", ErrorCode.API_MANAGER_COMMUNICATION);
615+
}
616+
return mapper.readValue(httpResponse.getEntity().getContent(), new TypeReference<>() {
617+
});
618+
}
619+
} catch (Exception e) {
620+
throw new AppException("API-Manager failed to read certificate information from file.", ErrorCode.API_MANAGER_COMMUNICATION, e);
621+
}
622+
}
623+
601624
/**
602625
* Helper method to translate a Base64 encoded format
603626
* as it's needed by the API-Manager.

‎modules/apim-adapter/src/test/java/com/axway/apim/adapter/APIManagerAdapterTest.java‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import java.io.IOException;
1818
import java.io.InputStream;
1919
import java.util.HashMap;
20+
import java.util.List;
2021
import java.util.Map;
2122

2223
public class APIManagerAdapterTest extends WiremockWrapper {
@@ -279,4 +280,13 @@ public void getCertInfo() {
279280
Assert.fail("fail to process certificate");
280281
}
281282
}
283+
284+
285+
286+
@Test
287+
public void getCertInfoFromUrl() throws Exception {
288+
List<CaCert> caCerts = apiManagerAdapter.getCertInfoFromUrl("https://petstore3.swagger.io");
289+
Assert.assertNotNull(caCerts);
290+
Assert.assertEquals(3, caCerts.size());
291+
}
282292
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
[
2+
{
3+
"certBlob": "MIIFuzCCBKOgAwIBAgIQDA/hD1fRPCrIcxmhdMuzVDANBgkqhkiG9w0BAQsFADA8MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRwwGgYDVQQDExNBbWF6b24gUlNBIDIwNDggTTA0MB4XDTI1MTAyOTAwMDAwMFoXDTI2MTEyNzIzNTk1OVowFzEVMBMGA1UEAwwMKi5zd2FnZ2VyLmlvMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuy7sIxWIu1MSwu27YshvPWHTb1gmdgTqpSkAlqr1QMcr4kLdMtExIXFqYju47YkAWbwDD36OvNouvCsGqmpdZKBKhM/i5SEa0OEt9+qPSOo+CUC2dOC7MbXfsQJWNehg0S5+FodRwz6pccI9myrSUYulknGk65n5K4lGsUTdfRWOCswY5n6Vjh0tjvSaCATK17QT9iuJTgdoAnTIqUE71OHGXTKwun3nb9YNHQjY4S0vXbdIOloJlz+A93g7BaPfHesl/UzHZj5mlqi1dkQhstBTFjYVGU1mN4e5q2qGUpWkZJoBYaeB5ZqgaVvcok2xdAFrsi6Fm3Qwxd8W1qr8NwIDAQABo4IC3DCCAtgwHwYDVR0jBBgwFoAUH1KSYVaCVH+BZtgdPQqqMlyH3QgwHQYDVR0OBBYEFIsAMEqntVhlqbMBhcV+N69QsnOwMBcGA1UdEQQQMA6CDCouc3dhZ2dlci5pbzATBgNVHSAEDDAKMAgGBmeBDAECATAOBgNVHQ8BAf8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwOwYDVR0fBDQwMjAwoC6gLIYqaHR0cDovL2NybC5yMm0wNC5hbWF6b250cnVzdC5jb20vcjJtMDQuY3JsMHUGCCsGAQUFBwEBBGkwZzAtBggrBgEFBQcwAYYhaHR0cDovL29jc3AucjJtMDQuYW1hem9udHJ1c3QuY29tMDYGCCsGAQUFBzAChipodHRwOi8vY3J0LnIybTA0LmFtYXpvbnRydXN0LmNvbS9yMm0wNC5jZXIwDAYDVR0TAQH/BAIwADCCAX8GCisGAQQB1nkCBAIEggFvBIIBawFpAHYA2AlVO5RPev/IFhlvlE+Fq7D4/F6HVSYPFdEucrtFSxQAAAGaLZFbVwAABAMARzBFAiEAmfmelNXwYNyuWML8BFZWTu/lKBgFoApP0ctfrWRe5cwCICokXEIFmu1v9MBDDzZOpAU5AHmDSjvJcdhqvfApqxALAHcAwjF+V0UZo0XufzjespBB68fCIVoiv3/Vta12mtkOUs0AAAGaLZFbUQAABAMASDBGAiEA0Sc5UyEftg1ZzKRP/qfhZYlvFccze/B41zSywFE662oCIQDSaWymxHRhru8sL8ysM6NTReDzeBNtwtgW3xsgIq3crgB2AJROQ4f67MHvgfMZJCaoGGUBx9NfOAIBP3JnfVU3LhnYAAABmi2RW2QAAAQDAEcwRQIhAOXIUorOhb7Tk4BuWLv02Ob5/b3/mZ8BsGhJg9PaO5odAiBY8PXxWeBHajPu1ELPEnijyuxYdNE7aPpjwsiX5FuiBTANBgkqhkiG9w0BAQsFAAOCAQEAvXb8w2dc5DSNQ7zpRDKB1DEqiOAXfL9X8mnQfrTuPZ+oGuzsEow/SRMsTZw1XhuMPaakMT06fXrCbuc7VUZTMzYg/svTfAyDuPEXr1PM3LnXFPnJxB0r6rQP0AGUV4Khbo4YfgRZEa+y3N7tQ+LcykoY8A3AImVzskVZzKtDWMABZj60I2LLozbKjvqTsMJ+Vj1BQbIacNtIax4mSHc3u9uVTr5kmtU5WDyXFTRrDqh2vAcMFHkE6I7sm8OZXiP2QOBECCgeJlbms9ewdq5imOuOQ8O59eHyWHrYhc7N7bWV3VVnVIvuDF27Rtjc9RTpAc9h4QxlhxqSDiWqkZjhVA==",
4+
"name": "CN=*.swagger.io",
5+
"alias": "CN=*.swagger.io",
6+
"subject": "CN=*.swagger.io",
7+
"issuer": "CN=Amazon RSA 2048 M04, O=Amazon, C=US",
8+
"version": 3,
9+
"notValidBefore": 1761696000000,
10+
"notValidAfter": 1795823999000,
11+
"signatureAlgorithm": "RSA (2048 bits)",
12+
"sha1Fingerprint": "5B:7A:AA:6A:8A:7D:EF:24:5A:57:B5:FD:E5:C2:A8:C9:B4:2B:44:41",
13+
"md5Fingerprint": "65:5F:EF:A7:64:CB:1A:C7:02:4D:3E:BE:3A:CF:BD:F0",
14+
"expired": false,
15+
"notYetValid": false,
16+
"inbound": true,
17+
"outbound": false
18+
},
19+
{
20+
"certBlob": "MIIEXjCCA0agAwIBAgITB3MSTyqVLj7Rili9uF0bwM5fJzANBgkqhkiG9w0BAQsFADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAxMB4XDTIyMDgyMzIyMjYzNVoXDTMwMDgyMzIyMjYzNVowPDELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEcMBoGA1UEAxMTQW1hem9uIFJTQSAyMDQ4IE0wNDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM3pVR6AlQOp4xe776FdePXyejgA38mYx1ou9/jrpV6Sfn+/oqBKgwhY6ePsQHHQayWBJdBnv4Wz363qRI4XUh9swBFJ11TnZ3LqOMvHmWq2+loA0QPtOfXdJ2fHBLrBrngtJ/GB0p5olAVYrSZgvQGP16Rf8ddtNyxEEhYm3HuhmNi+vSeAq1tLYJPAvRCXonTpWdSDxY6hvdmxlqTYi82AtBXSfpGQ58HHM0hw0C6aQakghrwWi5fGslLOqzpimNMIsT7cqa0GJx6JfKqJqmQQNplO2h8n9ZsFJgBowof01ppdoLAWg6caMOM0om/VILKaa30F9W/r8Qjah7ltGVkCAwEAAaOCAVowggFWMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQUH1KSYVaCVH+BZtgdPQqqMlyH3QgwHwYDVR0jBBgwFoAUhBjMhTTsvAyUlC4IWZzHshBOCggwewYIKwYBBQUHAQEEbzBtMC8GCCsGAQUFBzABhiNodHRwOi8vb2NzcC5yb290Y2ExLmFtYXpvbnRydXN0LmNvbTA6BggrBgEFBQcwAoYuaHR0cDovL2NydC5yb290Y2ExLmFtYXpvbnRydXN0LmNvbS9yb290Y2ExLmNlcjA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLnJvb3RjYTEuYW1hem9udHJ1c3QuY29tL3Jvb3RjYTEuY3JsMBMGA1UdIAQMMAowCAYGZ4EMAQIBMA0GCSqGSIb3DQEBCwUAA4IBAQA+1O5UsAaNuW3lHzJtpNGwBnZd9QEYFtxpiAnIaV4qApnGS9OCw5ZPwie7YSlDZF5yyFPsFhUC2Q9uJHY/CRV1b5hIiGH0+6+w5PgKiY1MWuWT8VAaJjFxvuhM7a/efN2TIw1Wd6WCl6YRisunjQOrSP+unqC8A540JNyZ1JOE3jVqat3OZBGgMvihdj2wY23EpwesrKiQzkHzmvSH67PVW4ycbPy08HVZnBxZ5NrlGG9bwXR3fNTaz+c+Ej6c5AnwI3qkOFgSkg3Y75cdFz6pO/olK+e3AqygAcv0WjzmkDPuBjssuZjCHMC56oH3GJkV29Di2j5prHJbwZjG1inU",
21+
"name": "CN=Amazon RSA 2048 M04, O=Amazon, C=US",
22+
"alias": "CN=Amazon RSA 2048 M04, O=Amazon, C=US",
23+
"subject": "CN=Amazon RSA 2048 M04, O=Amazon, C=US",
24+
"issuer": "CN=Amazon Root CA 1, O=Amazon, C=US",
25+
"version": 3,
26+
"notValidBefore": 1661293595000,
27+
"notValidAfter": 1913754395000,
28+
"signatureAlgorithm": "RSA (2048 bits)",
29+
"sha1Fingerprint": "E7:B8:B5:A6:74:3C:E1:B2:F1:7B:04:1D:E5:95:58:A4:14:72:D7:0C",
30+
"md5Fingerprint": "E3:96:1B:FA:69:BF:76:E3:CC:56:BD:CB:F8:B8:99:78",
31+
"expired": false,
32+
"notYetValid": false,
33+
"inbound": true,
34+
"outbound": false
35+
},
36+
{
37+
"certBlob": "MIIEkjCCA3qgAwIBAgITBn+USionzfP6wq4rAfkI7rnExjANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTE1MDUyNTEyMDAwMFoXDTM3MTIzMTAxMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXjca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qwIFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQmjgSubJrIqg0CAwEAAaOCATEwggEtMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSEGMyFNOy8DJSULghZnMeyEE4KCDAfBgNVHSMEGDAWgBScXwDfqgHXMCs4iKK4bUqc8hGRgzB4BggrBgEFBQcBAQRsMGowLgYIKwYBBQUHMAGGImh0dHA6Ly9vY3NwLnJvb3RnMi5hbWF6b250cnVzdC5jb20wOAYIKwYBBQUHMAKGLGh0dHA6Ly9jcnQucm9vdGcyLmFtYXpvbnRydXN0LmNvbS9yb290ZzIuY2VyMD0GA1UdHwQ2MDQwMqAwoC6GLGh0dHA6Ly9jcmwucm9vdGcyLmFtYXpvbnRydXN0LmNvbS9yb290ZzIuY3JsMBEGA1UdIAQKMAgwBgYEVR0gADANBgkqhkiG9w0BAQsFAAOCAQEAYjdCXLwQtT6LLOkMm2xF4gcAevnFWAu5CIw+7bMlPLVvUOTNNWqnkzSWMiGpSESrnO09tKpzbeR/FoCJbM8oAxiDR3mjEH4wW6w7sGDgd9QIpuEdfF7Au/maeyKdpwAJfqxGF4PcnCZXmTA5YpaP7dreqsXMGz7KQ2hsVxa81Q4gLv7/wmpdLqBKbRRYh5TmOTFffHPLkIhqhBGWJ6bt2YFGpn6jcgAKUj6DiAdjd4lpFw85hdKrCEVN0FE6/V1dN2RMfjCyVSRCnTawXZwXgWHxyvkQAiSr6w10kY17RSlQOYiypok1JR4UakcjMS9cmvqtmg5iUaQqqcT5NJ0hGA==",
38+
"name": "CN=Amazon Root CA 1, O=Amazon, C=US",
39+
"alias": "CN=Amazon Root CA 1, O=Amazon, C=US",
40+
"subject": "CN=Amazon Root CA 1, O=Amazon, C=US",
41+
"issuer": "CN=Starfield Services Root Certificate Authority - G2, O=\"Starfield Technologies, Inc.\", L=Scottsdale, ST=Arizona, C=US",
42+
"version": 3,
43+
"notValidBefore": 1432555200000,
44+
"notValidAfter": 2145834000000,
45+
"signatureAlgorithm": "RSA (2048 bits)",
46+
"sha1Fingerprint": "06:B2:59:27:C4:2A:72:16:31:C1:EF:D9:43:1E:64:8F:A6:2E:1E:39",
47+
"md5Fingerprint": "E8:65:A2:2A:AE:52:4D:26:86:9A:F0:44:8D:6F:D8:96",
48+
"expired": false,
49+
"notYetValid": false,
50+
"inbound": true,
51+
"outbound": false
52+
}
53+
]
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"request": {
3+
"method": "POST",
4+
"urlPathPattern": "/api/portal/v1.4/certinfoFromUrl"
5+
},
6+
"response": {
7+
"status": 200,
8+
"bodyFileName": "certinfoFromUrl.json",
9+
"headers": {
10+
"Content-Type": "application/json"
11+
}
12+
}
13+
}

‎modules/apis/src/main/java/com/axway/apim/apiimport/actions/CreateNewAPI.java‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.axway.apim.adapter.apis.APIManagerAPIMethodAdapter;
44
import com.axway.apim.api.model.APIMethod;
5+
import com.axway.apim.api.model.CaCert;
56
import com.axway.apim.api.model.ServiceProfile;
67
import com.axway.apim.apiimport.DesiredAPI;
78
import com.axway.apim.apiimport.lib.params.APIImportParams;
@@ -79,6 +80,11 @@ public String execute(APIChangeState changes, boolean reCreation) throws AppExce
7980
ServiceProfile serviceProfile = serviceProfiles.get("_default");
8081
LOG.info("Updating API backendBasePath with value : {}", backendBasePath);
8182
serviceProfile.setBasePath(backendBasePath);
83+
if(EnvironmentProperties.OVERRIDE_CERTIFICATES) {
84+
//Ignore certificates downloaded from backend and use it from backendbasepath Issue #565.
85+
List<CaCert> caCerts = apiManagerAdapter.getCertInfoFromUrl(backendBasePath);
86+
createdAPI.setCaCerts(caCerts);
87+
}
8288
}
8389
}
8490
if(desiredAPI.getAuthenticationProfiles() != null) {

0 commit comments

Comments
 (0)