55 lines
1.6 KiB
JavaScript
55 lines
1.6 KiB
JavaScript
const points = new Map();
|
|
|
|
function filterQueries(queries, filterStrings) {
|
|
const matchingDomains = new Set();
|
|
if (!queries || !queries.data) {
|
|
return matchingDomains;
|
|
}
|
|
|
|
for (const query of queries.data) {
|
|
const { domain, status } = query;
|
|
// Status 1: Blocked by gravity
|
|
// Status 4: Blocked by regex/wildcard
|
|
if (status === '1' || status === '4') {
|
|
for (const filterString of filterStrings) {
|
|
if (domain.toLowerCase().includes(filterString.toLowerCase())) {
|
|
matchingDomains.add(domain);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return matchingDomains;
|
|
}
|
|
|
|
function addPoint(domain, expirationSeconds, logger, config, discord) {
|
|
const now = Date.now();
|
|
const expiration = now + expirationSeconds * 1000;
|
|
points.set(domain, expiration);
|
|
logger.info(`Point added for ${domain}. Total points: ${points.size}`);
|
|
if (config.notifications && config.notifications.discordWebhookUrl) {
|
|
discord.sendMessage(config.notifications.discordWebhookUrl, `Point added for ${domain}. Total points: ${points.size}`, logger);
|
|
}
|
|
}
|
|
|
|
function getPointsCount() {
|
|
return points.size;
|
|
}
|
|
|
|
function checkAndExpirePoints(logger) {
|
|
const now = Date.now();
|
|
for (const [domain, expiration] of points.entries()) {
|
|
if (now > expiration) {
|
|
points.delete(domain);
|
|
logger.info(`Point expired for ${domain}. Total points: ${points.size}`);
|
|
}
|
|
}
|
|
}
|
|
|
|
function clearPoints(logger) {
|
|
points.clear();
|
|
logger.info('All points have been cleared.');
|
|
}
|
|
|
|
module.exports = { filterQueries, addPoint, getPointsCount, checkAndExpirePoints, clearPoints };
|