forked from Advisori-FTC/SoftwareSecurityGuru
-
Notifications
You must be signed in to change notification settings - Fork 0
/
sponsors.js
72 lines (70 loc) · 2.92 KB
/
sponsors.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
var fs = require('fs');
var path = require("path");
const sponsorPath = "contentlib/sponsors";
const pathToGithubCDN = 'https://raw.githubusercontent.com/Advisori-FTC/SoftwareSecurityGuru/main/';
module.exports = function (Partner) {
return new Promise((resolve, reject) => {
Partner.find().exec((err, partnerList) => {
let copyPartnerList = JSON.parse(JSON.stringify(partnerList));
fs.readdir(sponsorPath,{}, function(err,files){
if (err) {
throw err;
}
let multiPromises = [];
files.map(function (file) {
return path.join(sponsorPath, file);
}).filter(function (file) {
return !fs.statSync(file).isFile();
}).forEach(function (file) {
let found = false;
const directoryTitle = file.replace(sponsorPath + '/','');
partnerList.forEach( (partner) => {
if(partner.name === directoryTitle) {
found = true;
copyPartnerList.splice(copyPartnerList.findIndex((item) => {return item.name === directoryTitle;}),1);
}
});
multiPromises.push(createUpdatePartner(file.replace(sponsorPath + '/',''), found, Partner));
});
Promise.all(multiPromises).then(() => {
let multiPromisesDelete = [];
copyPartnerList.forEach( (partner) => {
multiPromisesDelete.push(deletePartner(partner.name, Partner));
});
Promise.all(multiPromisesDelete).then(() =>{
resolve();
})
});
});
});
});
}
function createUpdatePartner(directoryTitle, found, Partner){
return new Promise( (resolve, reject) => {
fs.readFile(sponsorPath + '/' +directoryTitle +'/url.txt',(err, url) => {
const partner = new Partner({
name: directoryTitle,
imageUrl: pathToGithubCDN + sponsorPath + '/' +directoryTitle +'/logo.png',
homepageUrl: url.toString('utf8')
});
if(found === false) {
partner.save((err, data) => {
resolve();
});
} else {
Partner.updateMany({ name: directoryTitle},{
$set: {
name: directoryTitle,
imageUrl: pathToGithubCDN + sponsorPath + '/' +directoryTitle +'/logo.png',
homepageUrl: url.toString('utf8')
}
}, (err,data) => {
resolve();
});
}
});
});
}
function deletePartner(title,Partner) {
return Partner.deleteOne({ name: title })
}