diff --git a/package.json b/package.json index 4335c55..a9b6e25 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "serverless-wso2-apim", - "version": "0.7.0", + "version": "0.7.1", "description": "Serverless Framework plugin for WSO2 API Manager", "main": "src/index.js", "scripts": { diff --git a/src/3.2.0/wso2apim.js b/src/3.2.0/wso2apim.js index 3e39d56..ee0f17a 100644 --- a/src/3.2.0/wso2apim.js +++ b/src/3.2.0/wso2apim.js @@ -9,41 +9,42 @@ // * Use no console.log() at this level, only Promises being returned // ---------------- -const axios = require('axios'); -const https = require('https'); -const qs = require('qs'); -const FormData = require('form-data'); -const fs = require('fs'); -const utils = require('../utils/utils'); +const axios = require("axios"); +const https = require("https"); +const qs = require("qs"); +const FormData = require("form-data"); +const fs = require("fs"); +const utils = require("../utils/utils"); // Parse your swagger online @ https://apitools.dev/swagger-parser/online/ -const parser = require('swagger-parser'); +const parser = require("swagger-parser"); // Register a new client async function registerClient(wso2APIM) { try { let url = `https://${wso2APIM.host}:${wso2APIM.port}/client-registration/v0.17/register`; let { user, pass } = wso2APIM; - let authToken = user + ':' + pass; - let authTokenBase64 = Buffer.from(authToken).toString('base64'); + let authToken = user + ":" + pass; + let authTokenBase64 = Buffer.from(authToken).toString("base64"); var data = { - 'clientName': 'serverless-wso2-apim', - 'owner': user, - 'grantType': 'password refresh_token', - 'saasApp': true + clientName: "serverless-wso2-apim", + owner: user, + grantType: "password refresh_token", + saasApp: true, }; var config = { headers: { - 'Authorization': 'Basic ' + authTokenBase64, - 'Content-Type': 'application/json' + Authorization: "Basic " + authTokenBase64, + "Content-Type": "application/json", }, httpsAgent: new https.Agent({ - rejectUnauthorized: false - }) + rejectUnauthorized: false, + }), }; return new Promise((resolve, reject) => { - axios.post(url, data, config) + axios + .post(url, data, config) .then((res) => { resolve(res.data); }) @@ -52,42 +53,41 @@ async function registerClient(wso2APIM) { reject(err); }); }); - } - catch (err) { + } catch (err) { utils.renderError(err); } } - // Generate a new token async function generateToken(wso2APIM, clientId, clientSecret) { try { let url = `https://${wso2APIM.host}:${wso2APIM.port}/oauth2/token`; let { user, pass } = wso2APIM; - let scope = 'apim:api_create apim:api_view apim:api_publish apim:api_delete'; - let authToken = clientId + ':' + clientSecret; - let authTokenBase64 = Buffer.from(authToken).toString('base64'); + let scope = "apim:api_create apim:api_view apim:api_publish apim:api_delete"; + let authToken = clientId + ":" + clientSecret; + let authTokenBase64 = Buffer.from(authToken).toString("base64"); var data = qs.stringify({ - 'grant_type': 'password', - 'username': user, - 'password': pass, - 'scope': scope + grant_type: "password", + username: user, + password: pass, + scope: scope, }); var config = { headers: { - 'Authorization': 'Basic ' + authTokenBase64, - 'Content-Type': 'application/x-www-form-urlencoded' + Authorization: "Basic " + authTokenBase64, + "Content-Type": "application/x-www-form-urlencoded", }, httpsAgent: new https.Agent({ - rejectUnauthorized: false - }) + rejectUnauthorized: false, + }), }; return new Promise((resolve, reject) => { - axios.post(url, data, config) + axios + .post(url, data, config) .then((res) => { resolve({ - accessToken: res.data.access_token + accessToken: res.data.access_token, }); }) .catch((err) => { @@ -95,8 +95,7 @@ async function generateToken(wso2APIM, clientId, clientSecret) { reject(err); }); }); - } - catch (err) { + } catch (err) { utils.renderError(err); } } @@ -104,19 +103,20 @@ async function generateToken(wso2APIM, clientId, clientSecret) { async function isAPIDeployed(wso2APIM, accessToken, apiName, apiVersion, apiContext) { try { let url = `https://${wso2APIM.host}:${wso2APIM.port}/api/am/publisher/${wso2APIM.versionSlug}/apis`; - let queryStr = 'query=name:' + apiName + ' version:' + apiVersion + ' context:' + apiContext; - url = url + '?' + queryStr; + let queryStr = "query=name:" + apiName + " version:" + apiVersion + " context:" + apiContext; + url = url + "?" + queryStr; let config = { headers: { - 'Authorization': 'Bearer ' + accessToken + Authorization: "Bearer " + accessToken, }, httpsAgent: new https.Agent({ - rejectUnauthorized: false - }) + rejectUnauthorized: false, + }), }; return new Promise((resolve, reject) => { - axios.get(url, config) + axios + .get(url, config) .then((res) => { resolve(res.data); }) @@ -125,8 +125,7 @@ async function isAPIDeployed(wso2APIM, accessToken, apiName, apiVersion, apiCont reject(err); }); }); - } - catch (err) { + } catch (err) { utils.renderError(err); } } @@ -136,28 +135,28 @@ async function isCertUploaded(wso2APIM, accessToken, certAlias) { let url = `https://${wso2APIM.host}:${wso2APIM.port}/api/am/publisher/${wso2APIM.versionSlug}/certificates/${certAlias}`; let config = { headers: { - 'Authorization': 'Bearer ' + accessToken + Authorization: "Bearer " + accessToken, }, httpsAgent: new https.Agent({ - rejectUnauthorized: false - }) + rejectUnauthorized: false, + }), }; return new Promise((resolve, reject) => { - axios.get(url, config) + axios + .get(url, config) .then((res) => { resolve(res.data); }) .catch((err) => { // Ignore Certificate-not-found-for-that-Alias error gracefully - if (err.responseCode != '404') { + if (err.responseCode != "404") { utils.renderError(err); } reject(err); }); }); - } - catch (err) { + } catch (err) { utils.renderError(err); } } @@ -171,39 +170,41 @@ async function constructAPIDef(user, gatewayEnv, apiDef, apiId) { if (apiDef.backend.http.baseUrl) { backendBaseUrl = apiDef.backend.http.baseUrl; } - backendType = 'HTTP'; + backendType = "HTTP"; } // 2. JMS-based backend else if (apiDef.backend.jms) { if (apiDef.backend.jms.destination) { - backendBaseUrl = ['jms:', apiDef.backend.jms.destination].join('/'); - backendBaseUrl = [backendBaseUrl, qs.stringify(apiDef.backend.jms.parameters, { encode: false })].join('?'); + backendBaseUrl = ["jms:", apiDef.backend.jms.destination].join("/"); + backendBaseUrl = [backendBaseUrl, qs.stringify(apiDef.backend.jms.parameters, { encode: false })].join("?"); } - backendType = 'HTTP'; + backendType = "HTTP"; } // Construct mediation policies var mediationPolicies = []; if (apiDef.mediationPolicies) { if (apiDef.mediationPolicies.in) { - mediationPolicies.push({ 'name': apiDef.mediationPolicies.in, 'type': 'in' }); + mediationPolicies.push({ name: apiDef.mediationPolicies.in, type: "in" }); } if (apiDef.mediationPolicies.out) { - mediationPolicies.push({ 'name': apiDef.mediationPolicies.out, 'type': 'out' }); + mediationPolicies.push({ name: apiDef.mediationPolicies.out, type: "out" }); } if (apiDef.mediationPolicies.fault) { - mediationPolicies.push({ 'name': apiDef.mediationPolicies.fault, 'type': 'fault' }); + mediationPolicies.push({ name: apiDef.mediationPolicies.fault, type: "fault" }); } } let securityScheme = []; if (apiDef.securityScheme && apiDef.securityScheme.mutualssl && apiDef.securityScheme.mutualssl.enabled === true) { - securityScheme.push('mutualssl'); - securityScheme.push('mutualssl_mandatory'); + securityScheme.push("mutualssl"); + securityScheme.push("mutualssl_mandatory"); } - if(apiDef.securityScheme && apiDef.securityScheme.oauth2 && apiDef.securityScheme.oauth2.enabled === false) { - //do nothing + + if (apiDef.securityScheme && apiDef.securityScheme.oauth2 && apiDef.securityScheme.oauth2.enabled === true) { + securityScheme.push("oauth2"); + securityScheme.push("oauth_basic_auth_api_key_mandatory"); } else { - securityScheme.push('oauth2'); + securityScheme.push("oauth2"); } const wso2ApiDefinition = { id: apiId, @@ -212,43 +213,61 @@ async function constructAPIDef(user, gatewayEnv, apiDef, apiId) { context: apiDef.rootContext, version: apiDef.version, operations: await constructAPIOperations(apiDef.swaggerSpec), - lifeCycleStatus: 'CREATED', + lifeCycleStatus: "CREATED", isDefaultVersion: false, enableStore: true, type: backendType, - transport: ['https'], - tags: [...apiDef.tags, 'serverless-wso2-apim'], - policies: ['Unlimited'], - apiThrottlingPolicy: 'Unlimited', + transport: ["https"], + tags: [...apiDef.tags, "serverless-wso2-apim"], + policies: ["Unlimited"], + apiThrottlingPolicy: "Unlimited", securityScheme, maxTps: { - production: (apiDef.maxTps) ? apiDef.maxTps : undefined + production: apiDef.maxTps ? apiDef.maxTps : undefined, }, visibility: apiDef.subscriberVisibility || apiDef.visibility, endpointConfig: { production_endpoints: { - url: backendBaseUrl + url: backendBaseUrl, }, - endpoint_type: (apiDef.backend.endpointType) ? apiDef.backend.endpointType : 'http' + sandbox_endpoints: { + url: backendBaseUrl, + }, + endpoint_type: apiDef.backend.endpointType ? apiDef.backend.endpointType : "http", }, - endpointImplementationType: 'ENDPOINT', + endpointImplementationType: "ENDPOINT", endpointSecurity: null, - gatewayEnvironments: [ gatewayEnv ], + gatewayEnvironments: [gatewayEnv], mediationPolicies: mediationPolicies, - additionalProperties: ((apiDef.apiProperties) && (Object.keys(apiDef.apiProperties).length > 0)) ? apiDef.apiProperties : undefined, - subscriptionAvailability: 'CURRENT_TENANT', + additionalProperties: apiDef.apiProperties && Object.keys(apiDef.apiProperties).length > 0 ? apiDef.apiProperties : undefined, + subscriptionAvailability: "CURRENT_TENANT", subscriptionAvailableTenants: [], - businessInformation: apiDef.businessInformation ? { - businessOwnerEmail: apiDef.businessInformation.businessOwnerEmail, - technicalOwnerEmail: apiDef.businessInformation.technicalOwnerEmail, - technicalOwner: apiDef.businessInformation.technicalOwner, - businessOwner: apiDef.businessInformation.businessOwner - } : { - businessOwnerEmail: ((apiDef.swaggerSpec.info) && (apiDef.swaggerSpec.info.contact) && (apiDef.swaggerSpec.info.contact.email)) ? apiDef.swaggerSpec.info.contact.email : undefined, - technicalOwnerEmail: ((apiDef.swaggerSpec.info) && (apiDef.swaggerSpec.info.contact) && (apiDef.swaggerSpec.info.contact.email)) ? apiDef.swaggerSpec.info.contact.email : undefined, - technicalOwner: ((apiDef.swaggerSpec.info) && (apiDef.swaggerSpec.info.contact) && (apiDef.swaggerSpec.info.contact.name)) ? apiDef.swaggerSpec.info.contact.name : undefined, - businessOwner: ((apiDef.swaggerSpec.info) && (apiDef.swaggerSpec.info.contact) && (apiDef.swaggerSpec.info.contact.name)) ? apiDef.swaggerSpec.info.contact.name : undefined, - } + keyManagers: apiDef.securityScheme?.oauth2?.keyManager, + businessInformation: apiDef.businessInformation + ? { + businessOwnerEmail: apiDef.businessInformation.businessOwnerEmail, + technicalOwnerEmail: apiDef.businessInformation.technicalOwnerEmail, + technicalOwner: apiDef.businessInformation.technicalOwner, + businessOwner: apiDef.businessInformation.businessOwner, + } + : { + businessOwnerEmail: + apiDef.swaggerSpec.info && apiDef.swaggerSpec.info.contact && apiDef.swaggerSpec.info.contact.email + ? apiDef.swaggerSpec.info.contact.email + : undefined, + technicalOwnerEmail: + apiDef.swaggerSpec.info && apiDef.swaggerSpec.info.contact && apiDef.swaggerSpec.info.contact.email + ? apiDef.swaggerSpec.info.contact.email + : undefined, + technicalOwner: + apiDef.swaggerSpec.info && apiDef.swaggerSpec.info.contact && apiDef.swaggerSpec.info.contact.name + ? apiDef.swaggerSpec.info.contact.name + : undefined, + businessOwner: + apiDef.swaggerSpec.info && apiDef.swaggerSpec.info.contact && apiDef.swaggerSpec.info.contact.name + ? apiDef.swaggerSpec.info.contact.name + : undefined, + }, }; if (apiDef.cors) { wso2ApiDefinition.corsConfiguration = constructCorsConfiguration(apiDef); @@ -257,18 +276,17 @@ async function constructAPIDef(user, gatewayEnv, apiDef, apiId) { wso2ApiDefinition.visibleRoles = apiDef.subscriberVisibilityRoles; } if (apiDef.publisherVisibility) { - wso2ApiDefinition.accessControl = apiDef.publisherVisibility === 'PRIVATE' ? 'NONE' : apiDef.publisherVisibility; + wso2ApiDefinition.accessControl = apiDef.publisherVisibility === "PRIVATE" ? "NONE" : apiDef.publisherVisibility; } if (apiDef.publisherVisibilityRoles) { wso2ApiDefinition.accessControlRoles = apiDef.publisherVisibilityRoles; } - backendBaseUrl = ''; - backendType = ''; + backendBaseUrl = ""; + backendType = ""; return wso2ApiDefinition; - } - catch (err) { + } catch (err) { utils.renderError(err); } } @@ -276,22 +294,15 @@ async function constructAPIDef(user, gatewayEnv, apiDef, apiId) { function constructCorsConfiguration(apiDef) { const { origins, credentials, headers, methods } = apiDef.cors; const defaultAllowHeaders /* default WSO2 cors config */ = [ - 'Authorization', - 'Access-Control-Allow-Origin', - 'Content-Type', - 'SOAPAction', - ]; - const defaultAllowMethods /* default WSO2 cors config */ = [ - 'GET', - 'PUT', - 'POST', - 'DELETE', - 'PATCH', - 'OPTIONS', + "Authorization", + "Access-Control-Allow-Origin", + "Content-Type", + "SOAPAction", ]; + const defaultAllowMethods /* default WSO2 cors config */ = ["GET", "PUT", "POST", "DELETE", "PATCH", "OPTIONS"]; return { corsConfigurationEnabled: true, - accessControlAllowOrigins: origins || ['*'], + accessControlAllowOrigins: origins || ["*"], accessControlAllowCredentials: credentials || false, accessControlAllowHeaders: headers || defaultAllowHeaders, accessControlAllowMethods: methods || defaultAllowMethods, @@ -310,15 +321,15 @@ async function constructAPIOperations(apiDef) { // Traverse through verb properties var authType = undefined; for (var verbProp in swaggerObj.paths[pathObj][verbObj]) { - if (verbProp.toLowerCase() === 'x-auth-type') { + if (verbProp.toLowerCase() === "x-auth-type") { authType = swaggerObj.paths[pathObj][verbObj][verbProp]; } } wso2Operations.push({ target: pathObj, verb: verbObj, - authType: (authType) ? authType : 'Any', - throttlingPolicy: 'Unlimited' + authType: authType ? authType : "Any", + throttlingPolicy: "Unlimited", }); } } @@ -334,38 +345,35 @@ async function createAPIDef(wso2APIM, accessToken, apiDef) { let { user, gatewayEnv } = wso2APIM; var data = await constructAPIDef(user, gatewayEnv, apiDef); - // TODO - dynamically retrieve swaggerSpec version - let queryStr = 'openAPIVersion=V3'; - url = url + '?' + queryStr; + let queryStr = "openAPIVersion=V3"; + url = url + "?" + queryStr; var config = { headers: { - 'Authorization': 'Bearer ' + accessToken, - 'Content-Type': 'application/json' + Authorization: "Bearer " + accessToken, + "Content-Type": "application/json", }, httpsAgent: new https.Agent({ - rejectUnauthorized: false - }) + rejectUnauthorized: false, + }), }; return new Promise((resolve, reject) => { - axios.post(url, data, config) + axios + .post(url, data, config) .then((res) => { resolve({ apiId: res.data.id, apiName: res.data.name, apiContext: res.data.context, - apiStatus: res.data.status + apiStatus: res.data.status, }); }) .catch((err) => { - reject( - utils.renderError(err) - ); + reject(utils.renderError(err)); }); }); - } - catch (err) { + } catch (err) { utils.renderError(err); } } @@ -377,19 +385,20 @@ async function publishAPIDef(wso2APIM, accessToken, apiId) { var data = {}; var config = { headers: { - 'Authorization': 'Bearer ' + accessToken + Authorization: "Bearer " + accessToken, }, params: { - 'apiId': apiId, - 'action': 'Publish' + apiId: apiId, + action: "Publish", }, httpsAgent: new https.Agent({ - rejectUnauthorized: false - }) + rejectUnauthorized: false, + }), }; return new Promise((resolve, reject) => { - axios.post(url, data, config) + axios + .post(url, data, config) .then((res) => { resolve(res); }) @@ -398,8 +407,7 @@ async function publishAPIDef(wso2APIM, accessToken, apiId) { reject(err); }); }); - } - catch (err) { + } catch (err) { utils.renderError(err); } } @@ -410,15 +418,16 @@ async function listInvokableAPIUrl(wso2APIM, accessToken, apiId) { let url = `https://${wso2APIM.host}:${wso2APIM.port}/api/am/store/${wso2APIM.versionSlug}/apis/${apiId}`; var config = { headers: { - 'Authorization': 'Bearer ' + accessToken + Authorization: "Bearer " + accessToken, }, httpsAgent: new https.Agent({ - rejectUnauthorized: false - }) + rejectUnauthorized: false, + }), }; return new Promise((resolve, reject) => { - axios.get(url, config) + axios + .get(url, config) .then((res) => { resolve(res.data); }) @@ -427,46 +436,44 @@ async function listInvokableAPIUrl(wso2APIM, accessToken, apiId) { reject(err); }); }); - } - catch (err) { + } catch (err) { utils.renderError(err); } } - // Uploads backend certificate async function uploadCert(wso2APIM, accessToken, certAlias, cert, backendUrl) { try { let url = `https://${wso2APIM.host}:${wso2APIM.port}/api/am/publisher/${wso2APIM.versionSlug}/endpoint-certificates`; var data = new FormData(); - data.append('certificate', fs.createReadStream(cert)); - data.append('alias', certAlias); - data.append('endpoint', backendUrl); + data.append("certificate", fs.createReadStream(cert)); + data.append("alias", certAlias); + data.append("endpoint", backendUrl); var config = { headers: { - 'Authorization': 'Bearer ' + accessToken, - 'Content-Type': 'multipart/form-data' + Authorization: "Bearer " + accessToken, + "Content-Type": "multipart/form-data", }, httpsAgent: new https.Agent({ - rejectUnauthorized: false - }) + rejectUnauthorized: false, + }), }; return new Promise((resolve, reject) => { - axios.post(url, data, config) + axios + .post(url, data, config) .then((res) => { resolve(res); }) .catch((err) => { // Ignore Certificate-exists-for-that-Alias error gracefully - if (err.response.data.code != '409') { + if (err.response.data.code != "409") { utils.renderError(err); } reject(err); }); }); - } - catch (err) { + } catch (err) { utils.renderError(err); } } @@ -479,16 +486,17 @@ async function updateAPIDef(wso2APIM, accessToken, apiDef, apiId) { var data = await constructAPIDef(user, gatewayEnv, apiDef, apiId); var config = { headers: { - 'Authorization': 'Bearer ' + accessToken, - 'Content-Type': 'application/json' + Authorization: "Bearer " + accessToken, + "Content-Type": "application/json", }, httpsAgent: new https.Agent({ - rejectUnauthorized: false - }) + rejectUnauthorized: false, + }), }; return new Promise((resolve, reject) => { - axios.put(url, data, config) + axios + .put(url, data, config) .then((res) => { resolve(res.data); }) @@ -497,8 +505,7 @@ async function updateAPIDef(wso2APIM, accessToken, apiDef, apiId) { reject(err); }); }); - } - catch (err) { + } catch (err) { utils.renderError(err); } } @@ -509,15 +516,16 @@ async function removeAPIDef(wso2APIM, accessToken, apiId) { let url = `https://${wso2APIM.host}:${wso2APIM.port}/api/am/publisher/${wso2APIM.versionSlug}/apis/${apiId}`; let config = { headers: { - 'Authorization': 'Bearer ' + accessToken + Authorization: "Bearer " + accessToken, }, httpsAgent: new https.Agent({ - rejectUnauthorized: false - }) + rejectUnauthorized: false, + }), }; return new Promise((resolve, reject) => { - axios.delete(url, config) + axios + .delete(url, config) .then((res) => { resolve(res.data); }) @@ -526,8 +534,7 @@ async function removeAPIDef(wso2APIM, accessToken, apiId) { reject(err); }); }); - } - catch (err) { + } catch (err) { utils.renderError(err); } } @@ -538,51 +545,51 @@ async function removeCert(wso2APIM, accessToken, certAlias) { let url = `https://${wso2APIM.host}:${wso2APIM.port}/api/am/publisher/${wso2APIM.versionSlug}/certificates/${certAlias}`; let config = { headers: { - 'Authorization': 'Bearer ' + accessToken + Authorization: "Bearer " + accessToken, }, httpsAgent: new https.Agent({ - rejectUnauthorized: false - }) + rejectUnauthorized: false, + }), }; return new Promise((resolve, reject) => { - axios.delete(url, config) + axios + .delete(url, config) .then((res) => { resolve(res); }) .catch((err) => { // Ignore Certificate-not-found-for-that-Alias error gracefully - if (err.response.status != '404') { + if (err.response.status != "404") { utils.renderError(err); } reject(err); }); }); - } - catch (err) { + } catch (err) { utils.renderError(err); } } - // Updates backend certificate async function updateCert(wso2APIM, accessToken, certAlias, cert) { try { let url = `https://${wso2APIM.host}:${wso2APIM.port}/api/am/publisher/${wso2APIM.versionSlug}/endpoint-certificates/${certAlias}`; var data = new FormData(); - data.append('certificate', fs.createReadStream(cert)); + data.append("certificate", fs.createReadStream(cert)); let config = { headers: { - 'Authorization': 'Bearer ' + accessToken, - 'Content-Type': 'multipart/form-data' + Authorization: "Bearer " + accessToken, + "Content-Type": "multipart/form-data", }, httpsAgent: new https.Agent({ - rejectUnauthorized: false - }) + rejectUnauthorized: false, + }), }; return new Promise((resolve, reject) => { - axios.put(url, data, config) + axios + .put(url, data, config) .then((res) => { resolve(res); }) @@ -591,8 +598,7 @@ async function updateCert(wso2APIM, accessToken, certAlias, cert) { reject(err); }); }); - } - catch (err) { + } catch (err) { utils.renderError(err); } } @@ -603,16 +609,17 @@ async function listCertInfo(wso2APIM, accessToken, certAlias) { let url = `https://${wso2APIM.host}:${wso2APIM.port}/api/am/publisher/${wso2APIM.versionSlug}/certificates/${certAlias}`; let config = { headers: { - 'Authorization': 'Bearer ' + accessToken, - 'Accept': 'application/json' + Authorization: "Bearer " + accessToken, + Accept: "application/json", }, httpsAgent: new https.Agent({ - rejectUnauthorized: false - }) + rejectUnauthorized: false, + }), }; return new Promise((resolve, reject) => { - axios.get(url, config) + axios + .get(url, config) .then((res) => { resolve(res.data); }) @@ -621,8 +628,7 @@ async function listCertInfo(wso2APIM, accessToken, certAlias) { reject(err); }); }); - } - catch (err) { + } catch (err) { utils.renderError(err); } } @@ -632,34 +638,34 @@ async function uploadClientCert(wso2APIM, accessToken, certAlias, cert, apiId) { try { let url = `https://${wso2APIM.host}:${wso2APIM.port}/api/am/publisher/${wso2APIM.versionSlug}/apis/${apiId}/client-certificates`; var data = new FormData(); - data.append('certificate', fs.createReadStream(cert)); - data.append('alias', certAlias); - data.append('tier', 'unlimited'); + data.append("certificate", fs.createReadStream(cert)); + data.append("alias", certAlias); + data.append("tier", "unlimited"); var config = { headers: { - 'Authorization': 'Bearer ' + accessToken, - 'Content-Type': 'multipart/form-data' + Authorization: "Bearer " + accessToken, + "Content-Type": "multipart/form-data", }, httpsAgent: new https.Agent({ - rejectUnauthorized: false - }) + rejectUnauthorized: false, + }), }; return new Promise((resolve, reject) => { - axios.post(url, data, config) + axios + .post(url, data, config) .then((res) => { resolve(res); }) .catch((err) => { // Ignore Certificate-exists-for-that-Alias error gracefully - if (err.response.data.code != '409') { + if (err.response.data.code != "409") { utils.renderError(err); } reject(err); }); }); - } - catch (err) { + } catch (err) { utils.renderError(err); } } @@ -670,16 +676,17 @@ async function listClientCertInfo(wso2APIM, accessToken, certAlias, apiId) { let url = `https://${wso2APIM.host}:${wso2APIM.port}/api/am/publisher/${wso2APIM.versionSlug}/apis/${apiId}/client-certificates/${certAlias}`; let config = { headers: { - 'Authorization': 'Bearer ' + accessToken, - 'Accept': 'application/json' + Authorization: "Bearer " + accessToken, + Accept: "application/json", }, httpsAgent: new https.Agent({ - rejectUnauthorized: false - }) + rejectUnauthorized: false, + }), }; return new Promise((resolve, reject) => { - axios.get(url, config) + axios + .get(url, config) .then((res) => { resolve(res.data); }) @@ -688,8 +695,7 @@ async function listClientCertInfo(wso2APIM, accessToken, certAlias, apiId) { reject(err); }); }); - } - catch (err) { + } catch (err) { utils.renderError(err); } } @@ -699,19 +705,20 @@ async function updateClientCert(wso2APIM, accessToken, certAlias, cert, apiId) { try { let url = `https://${wso2APIM.host}:${wso2APIM.port}/api/am/publisher/${wso2APIM.versionSlug}/apis/${apiId}/client-certificates/${certAlias}`; var data = new FormData(); - data.append('certificate', fs.createReadStream(cert)); + data.append("certificate", fs.createReadStream(cert)); let config = { headers: { - 'Authorization': 'Bearer ' + accessToken, - 'Content-Type': 'multipart/form-data' + Authorization: "Bearer " + accessToken, + "Content-Type": "multipart/form-data", }, httpsAgent: new https.Agent({ - rejectUnauthorized: false - }) + rejectUnauthorized: false, + }), }; return new Promise((resolve, reject) => { - axios.put(url, data, config) + axios + .put(url, data, config) .then((res) => { resolve(res); }) @@ -720,8 +727,7 @@ async function updateClientCert(wso2APIM, accessToken, certAlias, cert, apiId) { reject(err); }); }); - } - catch (err) { + } catch (err) { utils.renderError(err); } } @@ -732,28 +738,28 @@ async function removeClientCert(wso2APIM, accessToken, certAlias, apiId) { let url = `https://${wso2APIM.host}:${wso2APIM.port}/api/am/publisher/${wso2APIM.versionSlug}/apis/${apiId}/client-certificates/${certAlias}`; let config = { headers: { - 'Authorization': 'Bearer ' + accessToken + Authorization: "Bearer " + accessToken, }, httpsAgent: new https.Agent({ - rejectUnauthorized: false - }) + rejectUnauthorized: false, + }), }; return new Promise((resolve, reject) => { - axios.delete(url, config) + axios + .delete(url, config) .then((res) => { resolve(res); }) .catch((err) => { // Ignore Certificate-not-found-for-that-Alias error gracefully - if (err.response.status != '404') { + if (err.response.status != "404") { utils.renderError(err); } reject(err); }); }); - } - catch (err) { + } catch (err) { utils.renderError(err); } } @@ -767,34 +773,34 @@ async function removeClientCert(wso2APIM, accessToken, certAlias, apiId) { * @param {*} swaggerSpec * @returns */ - async function upsertSwaggerSpec(wso2APIM, accessToken, apiId, swaggerSpec) { +async function upsertSwaggerSpec(wso2APIM, accessToken, apiId, swaggerSpec) { try { const url = `https://${wso2APIM.host}:${wso2APIM.port}/api/am/publisher/${wso2APIM.versionSlug}/apis/${apiId}/swagger`; const config = { headers: { - 'Authorization': 'Bearer ' + accessToken, - 'Content-Type': 'multipart/form-data' + Authorization: "Bearer " + accessToken, + "Content-Type": "multipart/form-data", }, httpsAgent: new https.Agent({ - rejectUnauthorized: false - }) + rejectUnauthorized: false, + }), }; const data = new FormData(); - data.append('apiDefinition', JSON.stringify(swaggerSpec)); + data.append("apiDefinition", JSON.stringify(swaggerSpec)); - return axios.put(url, data, config) - .then((_) => undefined).catch((err) => { + return axios + .put(url, data, config) + .then((_) => undefined) + .catch((err) => { utils.renderError(err); }); // eat the http response, not needed outside of this api layer - } - catch (err) { + } catch (err) { utils.renderError(err); throw err; } } - module.exports = { registerClient, generateToken,