This commit is contained in:
Radek Davidek 2025-11-07 11:33:30 +01:00
parent 6bc3b273b3
commit 03ad7c5cf4
15 changed files with 670 additions and 690 deletions

View File

@ -101,8 +101,7 @@ public abstract class AbstractProcess {
System.setProperty("javax.net.ssl.trustStorePassword", config.getTrustStore().getPassword()); System.setProperty("javax.net.ssl.trustStorePassword", config.getTrustStore().getPassword());
} }
private SSLContext createSSLContext(String trustStorePath, String trustStorePassword) private SSLContext createSSLContext(String trustStorePath, String trustStorePassword) throws Exception {
throws Exception {
// Vytvoříme TrustStore // Vytvoříme TrustStore
KeyStore trustStore = KeyStore.getInstance("JKS"); KeyStore trustStore = KeyStore.getInstance("JKS");
try (FileInputStream fis = new FileInputStream(trustStorePath)) { try (FileInputStream fis = new FileInputStream(trustStorePath)) {
@ -120,10 +119,8 @@ public abstract class AbstractProcess {
return sslContext; return sslContext;
} }
protected void configureHttpsConnection(HttpsURLConnection connection) protected void configureHttpsConnection(HttpsURLConnection connection) throws Exception {
throws Exception { SSLContext sslContext = createSSLContext(System.getProperty("javax.net.ssl.trustStore"),
SSLContext sslContext = createSSLContext(
System.getProperty("javax.net.ssl.trustStore"),
System.getProperty("javax.net.ssl.trustStorePassword")); System.getProperty("javax.net.ssl.trustStorePassword"));
connection.setSSLSocketFactory(sslContext.getSocketFactory()); connection.setSSLSocketFactory(sslContext.getSocketFactory());
} }
@ -134,15 +131,14 @@ public abstract class AbstractProcess {
String clientId = register.getClientId(); String clientId = register.getClientId();
log.info("Registered with clientId: {}", clientId); log.info("Registered with clientId: {}", clientId);
TokenResponse token = getToken(endpoints.getPublisherTokenUrl(), endpoints.getWso2User(), TokenResponse token = getToken(endpoints.getPublisherTokenUrl(), endpoints.getWso2User(), register,
register, "apim:api_view apim:api_create apim:api_manage apim:api_delete apim:api_publish apim:subscription_view apim:subscription_block "
"apim:api_view apim:api_create apim:api_manage apim:api_delete apim:api_publish apim:subscription_view apim:subscription_block "+ + "apim:subscription_manage apim:external_services_discover apim:threat_protection_policy_create apim:threat_protection_policy_manage "
"apim:subscription_manage apim:external_services_discover apim:threat_protection_policy_create apim:threat_protection_policy_manage "+ + "apim:document_create apim:document_manage apim:mediation_policy_view apim:mediation_policy_create apim:mediation_policy_manage "
"apim:document_create apim:document_manage apim:mediation_policy_view apim:mediation_policy_create apim:mediation_policy_manage "+ + "apim:client_certificates_view apim:client_certificates_add apim:client_certificates_update apim:ep_certificates_view apim:ep_certificates_add "
"apim:client_certificates_view apim:client_certificates_add apim:client_certificates_update apim:ep_certificates_view apim:ep_certificates_add "+ + "apim:ep_certificates_update apim:publisher_settings apim:pub_alert_manage apim:shared_scope_manage apim:app_import_export apim:api_import_export "
"apim:ep_certificates_update apim:publisher_settings apim:pub_alert_manage apim:shared_scope_manage apim:app_import_export apim:api_import_export "+ + "apim:api_product_import_export apim:api_generate_key apim:common_operation_policy_view apim:common_operation_policy_manage apim:comment_write "
"apim:api_product_import_export apim:api_generate_key apim:common_operation_policy_view apim:common_operation_policy_manage apim:comment_write "+ + "apim:comment_view apim:admin apim:subscribe apim:api_key apim:app_manage apim:sub_manage apim:store_settings apim:sub_alert_manage");
"apim:comment_view apim:admin apim:subscribe apim:api_key apim:app_manage apim:sub_manage apim:store_settings apim:sub_alert_manage");
log.debug("Access token received {}", token.getAccess_token()); log.debug("Access token received {}", token.getAccess_token());
@ -516,8 +512,8 @@ public abstract class AbstractProcess {
String username = decodedstringparts[0]; String username = decodedstringparts[0];
String password = decodedstringparts[1]; String password = decodedstringparts[1];
httpHeaders.put("Authorization", "Basic ".concat(Base64.getEncoder() httpHeaders.put("Authorization",
.encodeToString(username.concat(":").concat(password).getBytes()))); "Basic ".concat(Base64.getEncoder().encodeToString(username.concat(":").concat(password).getBytes())));
return httpHeaders; return httpHeaders;
} }
} }

View File

@ -83,11 +83,10 @@ public class Wso2AppsToApicurio extends AbstractProcess {
Map<String, String> httpHeaders = Collections.singletonMap("Authorization", Map<String, String> httpHeaders = Collections.singletonMap("Authorization",
"Bearer " + tokenResponse.getAccess_token()); "Bearer " + tokenResponse.getAccess_token());
HttpResponse exportedZip = makeRequest("GET", HttpResponse exportedZip = makeRequest(
config.getSource().getAdminApiUrl() + "/export/applications?appName=" + app.getName() + "&appOwner=" "GET", config.getSource().getAdminApiUrl() + "/export/applications?appName=" + app.getName()
+ app.getOwner() + "&withKeys=true", + "&appOwner=" + app.getOwner() + "&withKeys=true",
httpHeaders, httpHeaders, Collections.emptyMap(), true);
Collections.emptyMap(), true);
List<ZipEntryData> zipEntries = ZipUtils.extractFilesFromZip(exportedZip.getResponseBytes()); List<ZipEntryData> zipEntries = ZipUtils.extractFilesFromZip(exportedZip.getResponseBytes());
@ -129,15 +128,11 @@ public class Wso2AppsToApicurio extends AbstractProcess {
} }
private void createApplicationInApicurio(ApplicationDetail appDetail, String group, String mainArtifactId, private void createApplicationInApicurio(ApplicationDetail appDetail, String group, String mainArtifactId,
byte[] content) byte[] content) throws Exception {
throws Exception { log.info("Creating new Application to Apicurio '{}' ({}).", appDetail.getName(), appDetail.getOwner());
log.info("Creating new Application to Apicurio '{}' ({}).", appDetail.getName(),
appDetail.getOwner());
// Create new artifact // Create new artifact
ArtifactMetaData meta = client.createArtifact(group, mainArtifactId, ArtifactMetaData meta = client.createArtifact(group, mainArtifactId, ARTIFACT_APPLICATION_DEFAULT_VERSION, null,
ARTIFACT_APPLICATION_DEFAULT_VERSION, null, null, null, null, appDetail.getName(), appDetail.getName(), null, null, null,
null,
appDetail.getName(), appDetail.getName(), null, null, null,
new ByteArrayInputStream(content), null); new ByteArrayInputStream(content), null);
// Create the three required rules // Create the three required rules

View File

@ -148,8 +148,7 @@ public class ExportApisToWso2FromV32 extends AbstractProcess {
return responseCode; return responseCode;
} }
public byte[] prepareApiZipFile32to45(SearchedVersion ver, List<ArtifactReference> ref) public byte[] prepareApiZipFile32to45(SearchedVersion ver, List<ArtifactReference> ref) throws Exception {
throws Exception {
String baseDir = ver.getName() + "-" + ver.getVersion() + "/"; String baseDir = ver.getName() + "-" + ver.getVersion() + "/";

View File

@ -46,8 +46,8 @@ public class ExportAppsToWso2FromV32 extends AbstractProcess {
TokenResponse token = authenticateToWso2AndGetToken(config.getTarget()); TokenResponse token = authenticateToWso2AndGetToken(config.getTarget());
ArtifactSearchResults apps = client.searchArtifacts(ARTIFACT_GROUP_APPLICATIONS, null, null, ArtifactSearchResults apps = client.searchArtifacts(ARTIFACT_GROUP_APPLICATIONS, null, null, null, null,
null, null, null, null, null, null); null, null, null, null);
log.info("Found {} Apps", apps.getCount()); log.info("Found {} Apps", apps.getCount());
@ -86,8 +86,8 @@ public class ExportAppsToWso2FromV32 extends AbstractProcess {
try { try {
log.info("Processing App {} of {}", index, total); log.info("Processing App {} of {}", index, total);
VersionSearchResults versions = client.listArtifactVersions(ARTIFACT_GROUP_APPLICATIONS, VersionSearchResults versions = client.listArtifactVersions(ARTIFACT_GROUP_APPLICATIONS, app.getId(), null,
app.getId(), null, null); null);
for (SearchedVersion ver : versions.getVersions()) { for (SearchedVersion ver : versions.getVersions()) {
processAppVersion(app, tokenResponse, ver, createAdminApp); processAppVersion(app, tokenResponse, ver, createAdminApp);
@ -112,8 +112,8 @@ public class ExportAppsToWso2FromV32 extends AbstractProcess {
ApplicationDetail appDetail = mapper.readValue(content, ApplicationDetail.class); ApplicationDetail appDetail = mapper.readValue(content, ApplicationDetail.class);
// Skip default admin application unless explicitly requested // Skip default admin application unless explicitly requested
if (DEFAULT_APPLICATION_NAME.equals(appDetail.getName()) if (DEFAULT_APPLICATION_NAME.equals(appDetail.getName()) && ADMIN_USERNAME.equals(appDetail.getOwner())
&& ADMIN_USERNAME.equals(appDetail.getOwner()) && !createAdminApp) { && !createAdminApp) {
adminsDefaultApplication = app; adminsDefaultApplication = app;
deleteWso2ApplicationIfExists(appDetail, tokenResponse); deleteWso2ApplicationIfExists(appDetail, tokenResponse);
log.info(" - Skipping import of admins-default-application for now."); log.info(" - Skipping import of admins-default-application for now.");
@ -138,10 +138,10 @@ public class ExportAppsToWso2FromV32 extends AbstractProcess {
if (appDetail.getKeyManagerWiseOAuthApp() != null if (appDetail.getKeyManagerWiseOAuthApp() != null
&& !appDetail.getKeyManagerWiseOAuthApp().isEmpty()) { && !appDetail.getKeyManagerWiseOAuthApp().isEmpty()) {
log.info(" - Application {} has {} Key Mappings to create", log.info(" - Application {} has {} Key Mappings to create", appDetail.getName(),
appDetail.getName(), appDetail.getKeyManagerWiseOAuthApp().size()); appDetail.getKeyManagerWiseOAuthApp().size());
for (Entry<String, Map<String, KeyManagerApp>> entry : appDetail for (Entry<String, Map<String, KeyManagerApp>> entry : appDetail.getKeyManagerWiseOAuthApp()
.getKeyManagerWiseOAuthApp().entrySet()) { .entrySet()) {
String keyType = entry.getKey(); String keyType = entry.getKey();
Map<String, KeyManagerApp> keyManagerApp = entry.getValue(); Map<String, KeyManagerApp> keyManagerApp = entry.getValue();
@ -153,13 +153,9 @@ public class ExportAppsToWso2FromV32 extends AbstractProcess {
log.info(" - Creating Key Mapping for Key Manager: {}", keyManager); log.info(" - Creating Key Mapping for Key Manager: {}", keyManager);
// Map to v4.5 request // Map to v4.5 request
ApplicationKeyMappingRequest45 keyMappingRequest = ApplicationKeyMappingRequest45 ApplicationKeyMappingRequest45 keyMappingRequest = ApplicationKeyMappingRequest45
.builder() .builder().consumerKey(oauthInfo.getClientId())
.consumerKey(oauthInfo.getClientId()) .consumerSecret(oauthInfo.getClientSecret()).keyManager(keyManager)
.consumerSecret(oauthInfo.getClientSecret()) .keyType(ApplicationKeyMappingRequest45.KeyType.valueOf(keyType)).build();
.keyManager(keyManager)
.keyType(ApplicationKeyMappingRequest45.KeyType
.valueOf(keyType))
.build();
byte[] kmData = mapper.writeValueAsBytes(keyMappingRequest); byte[] kmData = mapper.writeValueAsBytes(keyMappingRequest);
publishApplicationKeyMappingToWso2(createdApp.getApplicationId(), kmData, publishApplicationKeyMappingToWso2(createdApp.getApplicationId(), kmData,
@ -199,8 +195,7 @@ public class ExportAppsToWso2FromV32 extends AbstractProcess {
applicationId, response.getResponseCode()); applicationId, response.getResponseCode());
} }
} catch (Exception e) { } catch (Exception e) {
log.error("IO error while creating Key Mapping for Application {}: {}", applicationId, log.error("IO error while creating Key Mapping for Application {}: {}", applicationId, e.getMessage(), e);
e.getMessage(), e);
} }
} }
@ -225,8 +220,8 @@ public class ExportAppsToWso2FromV32 extends AbstractProcess {
log.info(" - Application {} (id={}) deleted successfully from WSO2", appDetail.getName(), log.info(" - Application {} (id={}) deleted successfully from WSO2", appDetail.getName(),
resolvedAppId); resolvedAppId);
} else { } else {
log.info(" - Application {} (id={}) deletion from WSO2 returned response code {}", log.info(" - Application {} (id={}) deletion from WSO2 returned response code {}", appDetail.getName(),
appDetail.getName(), resolvedAppId, response.getResponseCode()); resolvedAppId, response.getResponseCode());
} }
} catch (Exception e) { } catch (Exception e) {
log.error("IO error while deleting Application {} (id={}): {}", appDetail.getName(), resolvedAppId, log.error("IO error while deleting Application {} (id={}): {}", appDetail.getName(), resolvedAppId,

View File

@ -42,7 +42,8 @@ public class ApiDefinitionMapper32to45 {
: ""); : "");
data.setVersion(oldApi.getId() != null ? oldApi.getId().getVersion() : null); data.setVersion(oldApi.getId() != null ? oldApi.getId().getVersion() : null);
data.setProvider(oldApi.getId() != null ? oldApi.getId().getProviderName() : null); data.setProvider(oldApi.getId() != null ? oldApi.getId().getProviderName() : null);
//data.setContext(swaggerData.get("basePath") != null ? swaggerData.get("basePath").toString() : ""); // data.setContext(swaggerData.get("basePath") != null ?
// swaggerData.get("basePath").toString() : "");
data.setContext(oldApi.getContext()); data.setContext(oldApi.getContext());
data.setLifeCycleStatus(oldApi.getStatus()); data.setLifeCycleStatus(oldApi.getStatus());
data.setDefaultVersion(oldApi.isDefaultVersion()); data.setDefaultVersion(oldApi.isDefaultVersion());

View File

@ -1,13 +1,13 @@
package cz.trask.migration.model.v32; package cz.trask.migration.model.v32;
import lombok.Data;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data @Data
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor

View File

@ -26,28 +26,15 @@ public class Documents32 {
private String lastUpdatedBy = null; private String lastUpdatedBy = null;
public enum TypeEnum { public enum TypeEnum {
HOWTO, HOWTO, SAMPLES, PUBLIC_FORUM, SUPPORT_FORUM, API_MESSAGE_FORMAT, SWAGGER_DOC, OTHER
SAMPLES,
PUBLIC_FORUM,
SUPPORT_FORUM,
API_MESSAGE_FORMAT,
SWAGGER_DOC,
OTHER
} }
public enum SourceTypeEnum { public enum SourceTypeEnum {
INLINE, INLINE, MARKDOWN, URL, FILE
MARKDOWN,
URL,
FILE
} }
public enum VisibilityEnum { public enum VisibilityEnum {
OWNER_ONLY, OWNER_ONLY, PRIVATE, API_LEVEL
PRIVATE,
API_LEVEL
} }
@Override @Override

View File

@ -3,6 +3,7 @@ package cz.trask.migration.model.v32;
import java.util.List; import java.util.List;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data; import lombok.Data;
@Data @Data

View File

@ -1,12 +1,16 @@
package cz.trask.migration.model.v45; package cz.trask.migration.model.v45;
import lombok.Data;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import javax.validation.constraints.*;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data @Data
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor

View File

@ -1,13 +1,14 @@
package cz.trask.migration.model.v45; package cz.trask.migration.model.v45;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data @Data
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor

View File

@ -1,6 +1,7 @@
package cz.trask.migration.model.v45; package cz.trask.migration.model.v45;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;

View File

@ -1,7 +1,7 @@
package cz.trask.migration.model.v45; package cz.trask.migration.model.v45;
import lombok.Data;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
@Data @Data