apim-developer-portal2
Version:
API management developer portal
136 lines (110 loc) • 3.59 kB
JavaScript
/*
* Important: this script is no longer maintained; new scripts are located in the scripts.v2 folder.
*/
const https = require("https");
const storage = require("azure-storage");
const managementEndpoint = process.argv[2];
const accessToken = process.argv[3];
const connectionString = process.argv[4];
const containerName = "content";
process.env["NODE_TLS_REJECT_UNAUTHORIZED"] = 0;
var options = {
port: 443,
method: "GET",
headers: {
"Authorization": accessToken,
"If-Match": "*"
}
};
const blobService = storage.createBlobService(connectionString);
async function request(method, url) {
return new Promise((resolve, reject) => {
options.method = method;
const req = https.request(url, options, (resp) => {
let data = "";
resp.on("data", (chunk) => {
data += chunk;
});
resp.on("end", () => {
if (data) {
try {
resolve(JSON.parse(data));
}
catch (e) {
console.log(url);
reject(e);
}
}
else {
resolve();
}
});
});
req.on("error", (e) => {
reject(e);
});
req.end();
});
}
async function listFilesInContainer() {
return new Promise((resolve, reject) => {
blobService.listBlobsSegmented(containerName, null, function (error, result) {
if (error) {
reject(error);
}
else {
resolve(result.entries.map(blob => blob.name));
}
});
});
}
async function getContentTypes() {
const data = await request("GET", `https://${managementEndpoint}/contentTypes?api-version=2018-06-01-preview`);
const contentTypes = data.value.map(x => x.id.replace("\/contentTypes\/", ""));
return contentTypes;
}
async function getContentItems(contentType) {
const data = await request("GET", `https://${managementEndpoint}/contentTypes/${contentType}/contentItems?api-version=2018-06-01-preview`);
const contentItems = data.value;
return contentItems;
}
async function deleteContent() {
const contentTypes = await getContentTypes();
for (const contentType of contentTypes) {
const contentItems = await getContentItems(contentType);
for (const contentItem of contentItems) {
await request("DELETE", `https://${managementEndpoint}${contentItem.id}?api-version=2018-06-01-preview`);
}
}
}
async function deleteBlobs() {
const blobNames = await listFilesInContainer(containerName);
for (const blobName of blobNames) {
console.log(`Deleting blob: ${blobName}`);
await deleteBlob(blobName);
}
}
async function deleteBlob(blobName) {
return new Promise((resolve, reject) => {
blobService.deleteBlob(containerName, blobName, function (error, result, response) {
if (!error) {
resolve();
}
else {
reject(error);
}
});
});
}
async function cleanup() {
try {
await deleteContent();
await deleteBlobs();
process.exit();
console.log("DONE");
}
catch (error) {
console.error(error);
}
}
cleanup();