migration to DigitalOcean

File storage migrated to DigitalOcean Storage
This commit is contained in:
2020-11-11 19:42:22 +01:00
parent 66dc739870
commit cc72671911
10 changed files with 243 additions and 124 deletions

View File

@@ -9,7 +9,6 @@ exports.dbPort = process.env.DB_PORT;
exports.dbName = process.env.DB_NAME; exports.dbName = process.env.DB_NAME;
exports.cookiesSecret = process.env.COOKIES_SECRET; exports.cookiesSecret = process.env.COOKIES_SECRET;
exports.jwtSecret = process.env.JWT_SECRET; exports.jwtSecret = process.env.JWT_SECRET;
exports.CRM_KEY = process.env.CRM_KEY;
exports.CRM_USER = process.env.CRM_USER;
exports.CRM_EMAIL = process.env.CRM_EMAIL;
exports.MAIL_PASS = process.env.MAIL_PASS; exports.MAIL_PASS = process.env.MAIL_PASS;
exports.s3_key = process.env.S3_KEY;
exports.s3_secret = process.env.S3_SECRET;

View File

@@ -1,15 +1,12 @@
const mongoose = require("mongoose"); const mongoose = require("mongoose");
const { const {
dbPass, dbPass,
/* dbUser,
dbHost,
dbPort, */
dbName, dbName,
} = require("../config/index.js"); } = require("../config/index.js");
const loadMongoose = async () => { const loadMongoose = async () => {
const connection = await mongoose.connect( const connection = await mongoose.connect(
`mongodb+srv://menui_db_user:${dbPass}@menui-database.9quwf.mongodb.net/${dbName}?retryWrites=true&w=majority`, `mongodb+srv://restricted_user:${dbPass}@menui-database.9quwf.mongodb.net/${dbName}?retryWrites=true&w=majority`,
{ {
useNewUrlParser: true, useNewUrlParser: true,
useUnifiedTopology: true, useUnifiedTopology: true,
@@ -22,13 +19,3 @@ const loadMongoose = async () => {
}; };
module.exports = loadMongoose; module.exports = loadMongoose;
// AZURE
/* "mongodb://" +
dbHost +
":" +
dbPort +
"/" +
dbName +
"?ssl=true&replicaSet=globaldb", */

126
package-lock.json generated
View File

@@ -2036,6 +2036,53 @@
"integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
"dev": true "dev": true
}, },
"aws-sdk": {
"version": "2.789.0",
"resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.789.0.tgz",
"integrity": "sha512-Jqq+M4N0EgkyS4OPf05UHa7IWUcpuBdnpwMRgBnu4Ju6PxpOTh1UQcmYepVmIN3m6YVpLwFctEYzAMJFM3LT1A==",
"requires": {
"buffer": "4.9.2",
"events": "1.1.1",
"ieee754": "1.1.13",
"jmespath": "0.15.0",
"querystring": "0.2.0",
"sax": "1.2.1",
"url": "0.10.3",
"uuid": "3.3.2",
"xml2js": "0.4.19"
},
"dependencies": {
"events": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz",
"integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ="
},
"sax": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz",
"integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o="
},
"uuid": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
"integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
},
"xml2js": {
"version": "0.4.19",
"resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz",
"integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==",
"requires": {
"sax": ">=0.6.0",
"xmlbuilder": "~9.0.1"
}
},
"xmlbuilder": {
"version": "9.0.7",
"resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
"integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0="
}
}
},
"aws-sign2": { "aws-sign2": {
"version": "0.7.0", "version": "0.7.0",
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
@@ -2259,6 +2306,11 @@
} }
} }
}, },
"base64-js": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.0.tgz",
"integrity": "sha512-Jrdy04F2EKcNggUDfubMUPNAZg2vMquLQSm8sKLYJvz40ClFL1S8GKyDshGkNsbNNE5Z+fQavzU7nSK1I9JUGA=="
},
"bcrypt-pbkdf": { "bcrypt-pbkdf": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
@@ -2378,6 +2430,16 @@
"resolved": "https://registry.npmjs.org/bson/-/bson-1.1.4.tgz", "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.4.tgz",
"integrity": "sha512-S/yKGU1syOMzO86+dGpg2qGoDL0zvzcb262G+gqEy6TgP6rt6z6qxSFX/8X6vLC91P7G7C3nLs0+bvDzmvBA3Q==" "integrity": "sha512-S/yKGU1syOMzO86+dGpg2qGoDL0zvzcb262G+gqEy6TgP6rt6z6qxSFX/8X6vLC91P7G7C3nLs0+bvDzmvBA3Q=="
}, },
"buffer": {
"version": "4.9.2",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
"integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
"requires": {
"base64-js": "^1.0.2",
"ieee754": "^1.1.4",
"isarray": "^1.0.0"
}
},
"buffer-equal-constant-time": { "buffer-equal-constant-time": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
@@ -3435,6 +3497,11 @@
"resolved": "https://registry.npmjs.org/feature-policy/-/feature-policy-0.3.0.tgz", "resolved": "https://registry.npmjs.org/feature-policy/-/feature-policy-0.3.0.tgz",
"integrity": "sha512-ZtijOTFN7TzCujt1fnNhfWPFPSHeZkesff9AXZj+UEjYBynWNUIYpC87Ve4wHzyexQsImicLu7WsC2LHq7/xrQ==" "integrity": "sha512-ZtijOTFN7TzCujt1fnNhfWPFPSHeZkesff9AXZj+UEjYBynWNUIYpC87Ve4wHzyexQsImicLu7WsC2LHq7/xrQ=="
}, },
"file-type": {
"version": "3.9.0",
"resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz",
"integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek="
},
"fill-range": { "fill-range": {
"version": "7.0.1", "version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
@@ -3808,6 +3875,11 @@
} }
} }
}, },
"html-comment-regex": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz",
"integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ=="
},
"html-encoding-sniffer": { "html-encoding-sniffer": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz",
@@ -3865,6 +3937,11 @@
"safer-buffer": ">= 2.1.2 < 3" "safer-buffer": ">= 2.1.2 < 3"
} }
}, },
"ieee754": {
"version": "1.1.13",
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
"integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg=="
},
"ignore-by-default": { "ignore-by-default": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
@@ -4113,6 +4190,14 @@
"integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
"dev": true "dev": true
}, },
"is-svg": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz",
"integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=",
"requires": {
"html-comment-regex": "^1.1.0"
}
},
"is-typedarray": { "is-typedarray": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
@@ -5167,6 +5252,11 @@
} }
} }
}, },
"jmespath": {
"version": "0.15.0",
"resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz",
"integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc="
},
"js-tokens": { "js-tokens": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -5711,6 +5801,16 @@
"xtend": "^4.0.0" "xtend": "^4.0.0"
} }
}, },
"multer-s3": {
"version": "2.9.0",
"resolved": "https://registry.npmjs.org/multer-s3/-/multer-s3-2.9.0.tgz",
"integrity": "sha512-qLF8pCD5HhXLLd954q49B63x3bk6Fe0jqD3eM0FVcGtqhiSVuTrchEDAo0mnO5pc34cMuX/CVCCbPkGTjX2xUA==",
"requires": {
"file-type": "^3.3.0",
"is-svg": "^2.1.0",
"run-parallel": "^1.1.6"
}
},
"nanomatch": { "nanomatch": {
"version": "1.2.13", "version": "1.2.13",
"resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
@@ -6262,6 +6362,11 @@
"resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
"integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
}, },
"querystring": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
"integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA="
},
"range-parser": { "range-parser": {
"version": "1.2.1", "version": "1.2.1",
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
@@ -6642,6 +6747,11 @@
"integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==",
"dev": true "dev": true
}, },
"run-parallel": {
"version": "1.1.10",
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz",
"integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw=="
},
"safe-buffer": { "safe-buffer": {
"version": "5.1.2", "version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
@@ -7717,6 +7827,22 @@
"integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
"dev": true "dev": true
}, },
"url": {
"version": "0.10.3",
"resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz",
"integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=",
"requires": {
"punycode": "1.3.2",
"querystring": "0.2.0"
},
"dependencies": {
"punycode": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
"integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0="
}
}
},
"url-parse-lax": { "url-parse-lax": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",

View File

@@ -11,6 +11,7 @@
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"@azure/storage-blob": "^12.2.0-preview.1", "@azure/storage-blob": "^12.2.0-preview.1",
"aws-sdk": "^2.789.0",
"axios": "^0.20.0", "axios": "^0.20.0",
"bcryptjs": "^2.4.3", "bcryptjs": "^2.4.3",
"body-parser": "^1.19.0", "body-parser": "^1.19.0",
@@ -25,6 +26,7 @@
"jsonwebtoken": "^8.5.1", "jsonwebtoken": "^8.5.1",
"mongoose": "^5.9.22", "mongoose": "^5.9.22",
"multer": "^1.4.2", "multer": "^1.4.2",
"multer-s3": "^2.9.0",
"nodemailer": "^6.4.11", "nodemailer": "^6.4.11",
"nodemon": "^2.0.4", "nodemon": "^2.0.4",
"string-sanitizer": "^1.1.1", "string-sanitizer": "^1.1.1",

View File

@@ -1,7 +1,7 @@
const express = require("express"); const express = require("express");
const { validateUserToken, handleError } = require("../services/services.js"); const { validateUserToken, handleError } = require("../services/services.js");
const { uploadBlob } = require("../services/azureServices.js"); const { uploadBlob } = require("../services/oceanServices.js");
// Azure // FileStorage
const multer = require("multer"); const multer = require("multer");
var router = express.Router(); var router = express.Router();

View File

@@ -1,101 +0,0 @@
const azureBlob = require("@azure/storage-blob");
const getStream = require("into-stream");
const { newError } = require("./services.js");
// SETUP
const containerURL = `https://${process.env.AZURE_STORAGE_ACCOUNT_NAME}.blob.core.windows.net/img/`;
const container = "img";
const OneMB = 1024 * 1024;
const uploadOptions = { bufferSize: 4 * OneMB, maxBuffers: 2 };
const sharedKeyCredential = new azureBlob.StorageSharedKeyCredential(
process.env.AZURE_STORAGE_ACCOUNT_NAME,
process.env.AZURE_STORAGE_ACCOUNT_KEY
);
const pipeline = azureBlob.newPipeline(sharedKeyCredential);
const blobServiceClient = new azureBlob.BlobServiceClient(
`https://${process.env.AZURE_STORAGE_ACCOUNT_NAME}.blob.core.windows.net`,
pipeline
);
// CODE
async function renameBlob(blobURL) {
try {
const blobName = blobURL.replace(containerURL, "");
const containerClient = blobServiceClient.getContainerClient(container);
const tempBlob = containerClient.getBlobClient(blobName);
const newBlob = containerClient.getBlobClient(removePrefix(blobName));
await newBlob.syncCopyFromURL(tempBlob.url);
return newBlob.url;
} catch (e) {
throw newError("Unable to save image", 500);
}
}
async function uploadBlob(request, resp) {
const blobName = makeTempBlobName(request.file.originalname);
const stream = getStream(request.file.buffer);
const containerClient = blobServiceClient.getContainerClient(container);
const blockBlobClient = containerClient.getBlockBlobClient(blobName);
const response = {
imgURL: `https://${process.env.AZURE_STORAGE_ACCOUNT_NAME}.blob.core.windows.net/img/${blobName}`,
};
try {
await blockBlobClient
.uploadStream(
stream,
uploadOptions.bufferSize,
uploadOptions.maxBuffers,
{ blobHTTPHeaders: { blobContentType: "image/jpeg" } }
)
.then(() => {
setDeleteTempBlobTimer(blobName, containerClient, 1);
resp.send(response);
});
} catch (err) {
console.log(err);
throw newError("Unable to save image", 500);
}
}
function removePrefix(string) {
const newString = string.replace("TEMP_", "");
return newString;
}
function makeTempBlobName(originalName) {
const identifier = Math.random().toString().replace(/0\./, "");
return `TEMP_${identifier}-${originalName}`;
}
function setDeleteTempBlobTimer(blobName, containerClient, minutes) {
let blob = containerClient.getBlobClient(blobName);
setTimeout(() => {
blob.delete();
}, 1000 * 60 * minutes);
}
async function deleteImage(url) {
if (!url || url === "" || url === "empty") {
return;
} else {
try {
const containerClient = blobServiceClient.getContainerClient(container);
const containerUrl = containerClient.url + "/";
const blobName = url.replace(containerUrl, "");
console.log(`BLOB NAME = ${blobName}`);
const blob = containerClient.getBlobClient(blobName);
await blob.delete();
} catch (error) {
console.log(error);
}
}
}
exports.renameBlob = renameBlob;
exports.uploadBlob = uploadBlob;
exports.removePrefix = removePrefix;
exports.makeTempBlobName = makeTempBlobName;
exports.setDeleteTempBlobTimer = setDeleteTempBlobTimer;
exports.deleteImage = deleteImage;

View File

@@ -5,7 +5,7 @@ const Dish = require("../models/dish.js");
const User = require("../models/users.js"); const User = require("../models/users.js");
const Restaurant = require("../models/restaurant.js"); const Restaurant = require("../models/restaurant.js");
const { fetchMultipleRestaurants } = require("./databaseServices.js"); const { fetchMultipleRestaurants } = require("./databaseServices.js");
const { deleteImage } = require("./azureServices.js"); const { deleteImage } = require("./oceanServices.js");
async function createUser(request) { async function createUser(request) {
const password = await hashPass(request.body.password); const password = await hashPass(request.body.password);

View File

@@ -2,7 +2,7 @@ const Restaurant = require("../models/restaurant.js");
const Dish = require("../models/dish.js"); const Dish = require("../models/dish.js");
const User = require("../models/users.js"); const User = require("../models/users.js");
const Payments = require("../models/payments.js"); const Payments = require("../models/payments.js");
const { deleteImage } = require("./azureServices.js"); const { deleteImage } = require("./oceanServices.js");
const { const {
appendDishToLunchSet, appendDishToLunchSet,
removeDishFromLunchSet, removeDishFromLunchSet,

106
services/oceanServices.js Normal file
View File

@@ -0,0 +1,106 @@
const getStream = require("into-stream");
const { s3_key, s3_secret } = require('../config/index.js');
const aws = require('aws-sdk');
const spacesEndpoint = new aws.Endpoint('fra1.digitaloceanspaces.com');
const s3 = new aws.S3({
endpoint: spacesEndpoint,
accessKeyId: s3_key,
secretAccessKey: s3_secret
});
const { newError } = require("./services.js");
// SETUP
// CODE
async function renameBlob(blobURL) {
try {
const containerURL = "https://menuicdn.fra1.digitaloceanspaces.com/";
const key = blobURL.replace(containerURL, "");
s3.copyObject({
CopySource: "menuicdn/" + key,
Bucket: "menuicdn",
Key: removePrefix(key)
}, (err) => {
if (err) {
console.log(err)
} else {
deleteImage(blobURL)
}
});
const newUrl = containerURL + removePrefix(key);
return newUrl;
} catch (e) {
throw newError("Unable to save image", 500);
}
}
async function uploadBlob(request, resp) {
const blobName = makeTempBlobName(request.file.originalname);
const stream = getStream(request.file.buffer);
const response = {
imgURL: `https://menuicdn.fra1.digitaloceanspaces.com/${blobName}`,
};
try {
s3.upload({
Bucket: 'menuicdn',
Body: stream,
Key: blobName,
ACL: 'public-read',
ContentType: request.file.mimetype
}, (err, data) => {{
setDeleteTempBlobTimer(blobName, 15);
resp.send(response);
}
});
} catch (err) {
throw newError("Unable to save image", 500);
}
}
function removePrefix(string) {
const newString = string.replace("TEMP_", "");
return newString;
}
function makeTempBlobName(originalName) {
const identifier = Math.random().toString().replace(/0\./, "");
return `TEMP_${identifier}-${originalName}`;
}
function setDeleteTempBlobTimer(blobName, minutes) {
setTimeout(() => {
s3.deleteObject({
Key: blobName,
Bucket: "menuicdn"
}, (err) => {
console.log(err)
});
}, 1000 * 60 * minutes);
}
async function deleteImage(url) {
if (!url || url === "" || url === "empty") {
return;
} else {
try {
const containerUrl = "https://menuicdn.fra1.digitaloceanspaces.com/";
const key = url.replace(containerUrl, "");
s3.deleteObject({
Key: key,
Bucket: "menuicdn"
}, (err) => {
console.log(err)
})
} catch (error) {
console.log(error);
}
}
}
exports.renameBlob = renameBlob;
exports.uploadBlob = uploadBlob;
exports.removePrefix = removePrefix;
exports.makeTempBlobName = makeTempBlobName;
exports.setDeleteTempBlobTimer = setDeleteTempBlobTimer;
exports.deleteImage = deleteImage;

View File

@@ -3,7 +3,7 @@ const Dish = require("../models/dish.js");
const User = require("../models/users.js"); const User = require("../models/users.js");
const mongoose = require("mongoose"); const mongoose = require("mongoose");
const sanitizer = require("string-sanitizer"); const sanitizer = require("string-sanitizer");
const { renameBlob } = require("./azureServices.js"); const { renameBlob } = require("./oceanServices.js");
const jwt = require("jsonwebtoken"); const jwt = require("jsonwebtoken");
const bcrypt = require("bcryptjs"); const bcrypt = require("bcryptjs");
const { jwtSecret } = require("../config/index.js"); const { jwtSecret } = require("../config/index.js");