Files
PIholeDNS_HA_Connector/src/points.js

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 };