Files
phishing/scripts/sortAll.mjs
T
Jaco Greeff 0ca51f6897 Check for unique entries (#62)
* Check for unique entries

* Update scripts/sortAll.mjs

* Updated CHANGELOG

* 0.4
2021-01-24 09:21:35 +01:00

65 lines
1.9 KiB
JavaScript

// Copyright 2020-2021 @polkadot/phishing authors & contributors
// SPDX-License-Identifier: Apache-2.0
import fs from 'fs';
function sortSection (values) {
return values.sort((a, b) => a.localeCompare(b));
}
function sortAddress (values) {
return Object
.entries(values)
.sort(([a], [b]) => a.localeCompare(b))
.map(([key, addresses]) => [key, sortSection(addresses)])
.reduce((all, [key, addresses]) => ({ ...all, [key]: addresses }), {});
}
function isUnique (type, list) {
const others = [];
list.forEach((entry) => {
if (others.includes(entry)) {
throw new Error(`${entry} is duplicated in ${type}`);
} else {
others.push(entry);
}
});
return true;
}
const addr = JSON.parse(fs.readFileSync('address.json', 'utf-8'));
const all = JSON.parse(fs.readFileSync('all.json', 'utf-8'));
const meta = JSON.parse(fs.readFileSync('urlmeta.json', 'utf-8'));
// sorted order for all entries
const allow = sortSection(all.allow);
const deny = sortSection(all.deny);
// check for unique entries
isUnique('all.json/allow', allow);
isUnique('all.json/deny', deny);
isUnique('address.json', Object.keys(addr));
// rewrite with all our entries (newline included)
fs.writeFileSync('address.json', `${JSON.stringify(sortAddress(addr), null, 2)}\n`);
fs.writeFileSync('all.json', `${JSON.stringify({ allow, deny }, null, 2)}\n`);
// find out what we don't have
const urls = meta.map(({ url }) => url);
const now = new Date();
const date = `${now.getUTCFullYear()}-${`00${now.getUTCMonth() + 1}`.slice(-2)}-${`00${now.getUTCDate()}`.slice(-2)}`;
// rewrite with all our entries (newline included)
fs.writeFileSync('urlmeta.json', `${JSON.stringify(
meta
.concat(
deny
.filter((url) => !urls.includes(url))
.map((url) => ({ date, url }))
)
.sort((a, b) => b.date.localeCompare(a.date) || a.url.localeCompare(b.url)),
null, 2
)}\n`);