use of org.json.simple.parser.ParseException in project carbon-apimgt by wso2.
the class SequenceUtils method updateRestToSoapConvertedSequences.
/**
* Updates the api sequences where user will be able to edits the generated sequences
* <p>
* Note: this method is directly invoked from the jaggery layer
*
* @param name api name
* @param version api version
* @param provider api provider
* @param seqType to identify the sequence is whether in/out sequence
* @param content sequence content
* @throws APIManagementException throws exceptions on unsuccessful persistence in registry or json parsing of the content
*/
public static void updateRestToSoapConvertedSequences(String name, String version, String provider, String seqType, String content) throws APIManagementException {
if (provider != null) {
provider = APIUtil.replaceEmailDomain(provider);
}
provider = (provider != null ? provider.trim() : null);
name = (name != null ? name.trim() : null);
version = (version != null ? version.trim() : null);
boolean isTenantFlowStarted = false;
JSONParser jsonParser = new JSONParser();
try {
String tenantDomain = MultitenantUtils.getTenantDomain(APIUtil.replaceEmailDomainBack(provider));
if (tenantDomain != null && !MultitenantConstants.SUPER_TENANT_DOMAIN_NAME.equals(tenantDomain)) {
isTenantFlowStarted = true;
PrivilegedCarbonContext.startTenantFlow();
PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantDomain(tenantDomain, true);
}
RegistryService registryService = ServiceReferenceHolder.getInstance().getRegistryService();
int tenantId;
UserRegistry registry;
tenantId = ServiceReferenceHolder.getInstance().getRealmService().getTenantManager().getTenantId(tenantDomain);
APIUtil.loadTenantRegistry(tenantId);
registry = registryService.getGovernanceSystemRegistry(tenantId);
JSONObject sequences = (JSONObject) jsonParser.parse(content);
for (Object sequence : sequences.keySet()) {
String sequenceContent = (String) ((JSONObject) sequences.get(sequence)).get("content");
String resourcePath = APIConstants.API_LOCATION + RegistryConstants.PATH_SEPARATOR + APIUtil.replaceEmailDomain(provider) + RegistryConstants.PATH_SEPARATOR + name + RegistryConstants.PATH_SEPARATOR + version + RegistryConstants.PATH_SEPARATOR + SOAPToRESTConstants.SOAP_TO_REST_RESOURCE + RegistryConstants.PATH_SEPARATOR + seqType + RegistryConstants.PATH_SEPARATOR + sequence + ".xml";
Resource regResource;
if (registry.resourceExists(resourcePath)) {
regResource = registry.get(resourcePath);
regResource.setContent(sequenceContent);
if (log.isDebugEnabled()) {
log.debug("Api sequence content for " + resourcePath + " is: " + sequenceContent);
}
regResource.setMediaType("text/xml");
registry.put(resourcePath, regResource);
}
}
} catch (ParseException e) {
handleException("Error occurred while parsing the sequence json", e);
} catch (UserStoreException e) {
handleException("Error while reading tenant information", e);
} catch (RegistryException e) {
handleException("Error when create registry instance", e);
} catch (org.wso2.carbon.registry.api.RegistryException e) {
handleException("Error while creating registry resource", e);
} finally {
if (isTenantFlowStarted) {
PrivilegedCarbonContext.endTenantFlow();
}
}
}
use of org.json.simple.parser.ParseException in project carbon-apimgt by wso2.
the class APIProviderImpl method updateAPI.
/**
* Updates an existing API
*
* @param api API
* @throws org.wso2.carbon.apimgt.api.APIManagementException if failed to update API
* @throws org.wso2.carbon.apimgt.api.FaultGatewaysException on Gateway Failure
*/
@Override
public void updateAPI(API api) throws APIManagementException, FaultGatewaysException {
boolean isValid = isAPIUpdateValid(api);
if (!isValid) {
throw new APIManagementException(" User doesn't have permission for update");
}
API oldApi = getAPIbyUUID(api.getUuid(), api.getOrganization());
String organization = api.getOrganization();
if (!oldApi.getStatus().equals(api.getStatus())) {
// Use changeAPIStatus for that kind of updates.
throw new APIManagementException("Invalid API update operation involving API status changes");
}
validateKeyManagers(api);
Gson gson = new Gson();
Map<String, String> oldMonetizationProperties = gson.fromJson(oldApi.getMonetizationProperties().toString(), HashMap.class);
if (oldMonetizationProperties != null && !oldMonetizationProperties.isEmpty()) {
Map<String, String> newMonetizationProperties = gson.fromJson(api.getMonetizationProperties().toString(), HashMap.class);
if (newMonetizationProperties != null) {
for (Map.Entry<String, String> entry : oldMonetizationProperties.entrySet()) {
String newValue = newMonetizationProperties.get(entry.getKey());
if (StringUtils.isAllBlank(newValue)) {
newMonetizationProperties.put(entry.getKey(), entry.getValue());
}
}
JSONParser parser = new JSONParser();
try {
JSONObject jsonObj = (JSONObject) parser.parse(gson.toJson(newMonetizationProperties));
api.setMonetizationProperties(jsonObj);
} catch (ParseException e) {
throw new APIManagementException("Error when parsing monetization properties ", e);
}
}
}
String publishedDefaultVersion = getPublishedDefaultVersion(api.getId());
// Update WSDL in the registry
if (api.getWsdlUrl() != null && api.getWsdlResource() == null) {
updateWsdlFromUrl(api);
}
if (api.getWsdlResource() != null) {
updateWsdlFromResourceFile(api);
}
boolean updatePermissions = false;
if (APIUtil.isAccessControlEnabled()) {
if (!oldApi.getAccessControl().equals(api.getAccessControl()) || (APIConstants.API_RESTRICTED_VISIBILITY.equals(oldApi.getAccessControl()) && !api.getAccessControlRoles().equals(oldApi.getAccessControlRoles())) || !oldApi.getVisibility().equals(api.getVisibility()) || (APIConstants.API_RESTRICTED_VISIBILITY.equals(oldApi.getVisibility()) && !api.getVisibleRoles().equals(oldApi.getVisibleRoles()))) {
updatePermissions = true;
}
} else if (!oldApi.getVisibility().equals(api.getVisibility()) || (APIConstants.API_RESTRICTED_VISIBILITY.equals(oldApi.getVisibility()) && !api.getVisibleRoles().equals(oldApi.getVisibleRoles()))) {
updatePermissions = true;
}
updateEndpointSecurity(oldApi, api);
String apiUUid = updateApiArtifact(api, true, updatePermissions);
api.setUuid(apiUUid);
if (!oldApi.getContext().equals(api.getContext())) {
api.setApiHeaderChanged(true);
}
int tenantId;
String tenantDomain = MultitenantUtils.getTenantDomain(APIUtil.replaceEmailDomainBack(api.getId().getProviderName()));
try {
tenantId = ServiceReferenceHolder.getInstance().getRealmService().getTenantManager().getTenantId(tenantDomain);
} catch (UserStoreException e) {
throw new APIManagementException("Error in retrieving Tenant Information while updating api :" + api.getId().getApiName(), e);
}
validateResourceThrottlingTiers(api, tenantDomain);
// get product resource mappings on API before updating the API. Update uri templates on api will remove all
// product mappings as well.
List<APIProductResource> productResources = apiMgtDAO.getProductMappingsForAPI(api);
updateAPI(api, tenantId, userNameWithoutChange);
updateProductResourceMappings(api, organization, productResources);
if (log.isDebugEnabled()) {
log.debug("Successfully updated the API: " + api.getId() + " in the database");
}
JSONObject apiLogObject = new JSONObject();
apiLogObject.put(APIConstants.AuditLogConstants.NAME, api.getId().getApiName());
apiLogObject.put(APIConstants.AuditLogConstants.CONTEXT, api.getContext());
apiLogObject.put(APIConstants.AuditLogConstants.VERSION, api.getId().getVersion());
apiLogObject.put(APIConstants.AuditLogConstants.PROVIDER, api.getId().getProviderName());
APIUtil.logAuditMessage(APIConstants.AuditLogConstants.API, apiLogObject.toString(), APIConstants.AuditLogConstants.UPDATED, this.username);
// update doc visibility
List<Documentation> docsList = getAllDocumentation(api.getId());
if (docsList != null) {
Iterator it = docsList.iterator();
while (it.hasNext()) {
Object docsObject = it.next();
Documentation docs = (Documentation) docsObject;
updateDocVisibility(api, docs);
}
}
// notify key manager with API update
registerOrUpdateResourceInKeyManager(api, tenantDomain);
int apiId = apiMgtDAO.getAPIID(api.getUuid());
if (publishedDefaultVersion != null) {
if (api.isPublishedDefaultVersion() && !api.getId().getVersion().equals(publishedDefaultVersion)) {
APIIdentifier previousDefaultVersionIdentifier = new APIIdentifier(api.getId().getProviderName(), api.getId().getApiName(), publishedDefaultVersion);
sendUpdateEventToPreviousDefaultVersion(previousDefaultVersionIdentifier, organization);
}
}
APIEvent apiEvent = new APIEvent(UUID.randomUUID().toString(), System.currentTimeMillis(), APIConstants.EventType.API_UPDATE.name(), tenantId, tenantDomain, api.getId().getApiName(), apiId, api.getUuid(), api.getId().getVersion(), api.getType(), api.getContext(), APIUtil.replaceEmailDomainBack(api.getId().getProviderName()), api.getStatus());
APIUtil.sendNotification(apiEvent, APIConstants.NotifierType.API.name());
// Extracting API details for the recommendation system
if (recommendationEnvironment != null) {
RecommenderEventPublisher extractor = new RecommenderDetailsExtractor(api, tenantDomain, APIConstants.ADD_API);
Thread recommendationThread = new Thread(extractor);
recommendationThread.start();
}
}
use of org.json.simple.parser.ParseException in project carbon-apimgt by wso2.
the class APIProviderImpl method getAPIbyUUID.
@Override
public API getAPIbyUUID(String uuid, String organization) throws APIManagementException {
Organization org = new Organization(organization);
try {
PublisherAPI publisherAPI = apiPersistenceInstance.getPublisherAPI(org, uuid);
if (publisherAPI != null) {
API api = APIMapper.INSTANCE.toApi(publisherAPI);
APIIdentifier apiIdentifier = api.getId();
apiIdentifier.setUuid(uuid);
api.setId(apiIdentifier);
checkAccessControlPermission(userNameWithoutChange, api.getAccessControl(), api.getAccessControlRoles());
// ///////////////// Do processing on the data object//////////
populateRevisionInformation(api, uuid);
populateAPIInformation(uuid, organization, api);
loadMediationPoliciesToAPI(api, organization);
populateAPIStatus(api);
populateDefaultVersion(api);
return api;
} else {
String msg = "Failed to get API. API artifact corresponding to artifactId " + uuid + " does not exist";
throw new APIMgtResourceNotFoundException(msg);
}
} catch (APIPersistenceException e) {
throw new APIManagementException("Failed to get API", e);
} catch (OASPersistenceException e) {
throw new APIManagementException("Error while retrieving the OAS definition", e);
} catch (ParseException e) {
throw new APIManagementException("Error while parsing the OAS definition", e);
} catch (AsyncSpecPersistenceException e) {
throw new APIManagementException("Error while retrieving the Async API definition", e);
}
}
use of org.json.simple.parser.ParseException in project carbon-apimgt by wso2.
the class APIProviderImpl method updateEndpointSecurity.
private void updateEndpointSecurity(API oldApi, API api) throws APIManagementException {
try {
if (api.isEndpointSecured() && StringUtils.isBlank(api.getEndpointUTPassword()) && !StringUtils.isBlank(oldApi.getEndpointUTPassword())) {
if (log.isDebugEnabled()) {
log.debug("Given endpoint security password is empty");
}
api.setEndpointUTUsername(oldApi.getEndpointUTUsername());
api.setEndpointUTPassword(oldApi.getEndpointUTPassword());
if (log.isDebugEnabled()) {
log.debug("Using the previous username and password for endpoint security");
}
} else {
String endpointConfig = api.getEndpointConfig();
String oldEndpointConfig = oldApi.getEndpointConfig();
if (StringUtils.isNotEmpty(endpointConfig) && StringUtils.isNotEmpty(oldEndpointConfig)) {
JSONObject endpointConfigJson = (JSONObject) new JSONParser().parse(endpointConfig);
JSONObject oldEndpointConfigJson = (JSONObject) new JSONParser().parse(oldEndpointConfig);
if ((endpointConfigJson.get(APIConstants.ENDPOINT_SECURITY) != null) && (oldEndpointConfigJson.get(APIConstants.ENDPOINT_SECURITY) != null)) {
JSONObject endpointSecurityJson = (JSONObject) endpointConfigJson.get(APIConstants.ENDPOINT_SECURITY);
JSONObject oldEndpointSecurityJson = (JSONObject) oldEndpointConfigJson.get(APIConstants.ENDPOINT_SECURITY);
if (endpointSecurityJson.get(APIConstants.ENDPOINT_SECURITY_PRODUCTION) != null) {
if (oldEndpointSecurityJson.get(APIConstants.ENDPOINT_SECURITY_PRODUCTION) != null) {
EndpointSecurity endpointSecurity = new ObjectMapper().convertValue(endpointSecurityJson.get(APIConstants.ENDPOINT_SECURITY_PRODUCTION), EndpointSecurity.class);
EndpointSecurity oldEndpointSecurity = new ObjectMapper().convertValue(oldEndpointSecurityJson.get(APIConstants.ENDPOINT_SECURITY_PRODUCTION), EndpointSecurity.class);
if (endpointSecurity.isEnabled() && oldEndpointSecurity.isEnabled() && StringUtils.isBlank(endpointSecurity.getPassword())) {
endpointSecurity.setUsername(oldEndpointSecurity.getUsername());
endpointSecurity.setPassword(oldEndpointSecurity.getPassword());
if (endpointSecurity.getType().equals(APIConstants.ENDPOINT_SECURITY_TYPE_OAUTH)) {
endpointSecurity.setUniqueIdentifier(oldEndpointSecurity.getUniqueIdentifier());
endpointSecurity.setGrantType(oldEndpointSecurity.getGrantType());
endpointSecurity.setTokenUrl(oldEndpointSecurity.getTokenUrl());
endpointSecurity.setClientId(oldEndpointSecurity.getClientId());
endpointSecurity.setClientSecret(oldEndpointSecurity.getClientSecret());
endpointSecurity.setCustomParameters(oldEndpointSecurity.getCustomParameters());
}
}
endpointSecurityJson.replace(APIConstants.ENDPOINT_SECURITY_PRODUCTION, new JSONParser().parse(new ObjectMapper().writeValueAsString(endpointSecurity)));
}
}
if (endpointSecurityJson.get(APIConstants.ENDPOINT_SECURITY_SANDBOX) != null) {
if (oldEndpointSecurityJson.get(APIConstants.ENDPOINT_SECURITY_SANDBOX) != null) {
EndpointSecurity endpointSecurity = new ObjectMapper().convertValue(endpointSecurityJson.get(APIConstants.ENDPOINT_SECURITY_SANDBOX), EndpointSecurity.class);
EndpointSecurity oldEndpointSecurity = new ObjectMapper().convertValue(oldEndpointSecurityJson.get(APIConstants.ENDPOINT_SECURITY_SANDBOX), EndpointSecurity.class);
if (endpointSecurity.isEnabled() && oldEndpointSecurity.isEnabled() && StringUtils.isBlank(endpointSecurity.getPassword())) {
endpointSecurity.setUsername(oldEndpointSecurity.getUsername());
endpointSecurity.setPassword(oldEndpointSecurity.getPassword());
if (endpointSecurity.getType().equals(APIConstants.ENDPOINT_SECURITY_TYPE_OAUTH)) {
endpointSecurity.setUniqueIdentifier(oldEndpointSecurity.getUniqueIdentifier());
endpointSecurity.setGrantType(oldEndpointSecurity.getGrantType());
endpointSecurity.setTokenUrl(oldEndpointSecurity.getTokenUrl());
endpointSecurity.setClientId(oldEndpointSecurity.getClientId());
endpointSecurity.setClientSecret(oldEndpointSecurity.getClientSecret());
endpointSecurity.setCustomParameters(oldEndpointSecurity.getCustomParameters());
}
}
endpointSecurityJson.replace(APIConstants.ENDPOINT_SECURITY_SANDBOX, new JSONParser().parse(new ObjectMapper().writeValueAsString(endpointSecurity)));
}
endpointConfigJson.replace(APIConstants.ENDPOINT_SECURITY, endpointSecurityJson);
}
}
api.setEndpointConfig(endpointConfigJson.toJSONString());
}
}
} catch (ParseException | JsonProcessingException e) {
throw new APIManagementException("Error while processing endpoint security for API " + api.getId().toString(), e);
}
}
use of org.json.simple.parser.ParseException in project carbon-apimgt by wso2.
the class APIProviderImpl method getAPIProductbyUUID.
public APIProduct getAPIProductbyUUID(String uuid, String organization) throws APIManagementException {
try {
Organization org = new Organization(organization);
PublisherAPIProduct publisherAPIProduct = apiPersistenceInstance.getPublisherAPIProduct(org, uuid);
if (publisherAPIProduct != null) {
APIProduct product = APIProductMapper.INSTANCE.toApiProduct(publisherAPIProduct);
product.setID(new APIProductIdentifier(publisherAPIProduct.getProviderName(), publisherAPIProduct.getApiProductName(), publisherAPIProduct.getVersion(), uuid));
checkAccessControlPermission(userNameWithoutChange, product.getAccessControl(), product.getAccessControlRoles());
populateRevisionInformation(product, uuid);
populateAPIProductInformation(uuid, organization, product);
populateAPIStatus(product);
populateAPITier(product);
return product;
} else {
String msg = "Failed to get API Product. API Product artifact corresponding to artifactId " + uuid + " does not exist";
throw new APIMgtResourceNotFoundException(msg);
}
} catch (APIPersistenceException | OASPersistenceException | ParseException e) {
String msg = "Failed to get API Product";
throw new APIManagementException(msg, e);
}
}
Aggregations