Unlink scripts submodule and commit contents as normal directory

This commit is contained in:
Kyle Speight committed 2026-06-14 03:42:18 -07:00
1 parent 4f7dea111f
commit 6488b3ea85
48 files changed
+2876 -1

No files matched your search

+200
View File
@@ -0,0 +1,200 @@
const { prettyName } = require('./repo.js');
const logger = require('./logger.js');
/**
* @typedef {
* | 'DNS_COMPROMISE'
* | 'DNS_POISONING'
* | 'DDOS_ATTACK'
* | 'PORT_SCAN'
* | 'MASS_SCANNER'
* | 'EXPLOITED_HOST'
* | 'MALWARE_HOSTING'
* | 'CNC_BEACONING'
* | 'CRYPTOJACKING'
* | 'PHISHING'
* | 'HACKING'
* | 'SQL_INJECTION'
* | 'COMMAND_INJECTION'
* | 'SPAM_ACTIVITY'
* | 'BAD_WEB_BOT'
* | 'PATH_TRAVERSAL'
* | 'BRUTE_FORCE'
* | 'SSH'
* | 'FTP'
* | 'EMAIL'
* | 'HTTP'
* | 'RDP'
* | 'TELNET'
* | 'SMB'
* | 'MONGODB'
* | 'REDIS'
* | 'OTHER_ABUSE'
* | 'FRAUD_ORDERS'
* | 'PING_OF_DEATH'
* | 'FRAUD_VOIP'
* | 'OPEN_PROXY'
* | 'WEB_SPAM'
* | 'EMAIL_SPAM'
* | 'BLOG_SPAM'
* | 'VPN_IP'
* | 'SPOOFING'
* | 'WEB_APP_ATTACK'
* | 'IOT_TARGETED'
* | 'IGNORING_ROBOTS_TXT'
* } Flag
*/
/** @type {Record<Flag, Flag>} */
const FLAGS = Object.freeze({
DNS_COMPROMISE: 'DNS_COMPROMISE',
DNS_POISONING: 'DNS_POISONING',
DDOS_ATTACK: 'DDOS_ATTACK',
PORT_SCAN: 'PORT_SCAN',
MASS_SCANNER: 'MASS_SCANNER',
EXPLOITED_HOST: 'EXPLOITED_HOST',
MALWARE_HOSTING: 'MALWARE_HOSTING',
CNC_BEACONING: 'CNC_BEACONING',
CRYPTOJACKING: 'CRYPTOJACKING',
PHISHING: 'PHISHING',
HACKING: 'HACKING',
SQL_INJECTION: 'SQL_INJECTION',
COMMAND_INJECTION: 'COMMAND_INJECTION',
SPAM_ACTIVITY: 'SPAM_ACTIVITY',
BAD_WEB_BOT: 'BAD_WEB_BOT',
PATH_TRAVERSAL: 'PATH_TRAVERSAL',
BRUTE_FORCE: 'BRUTE_FORCE',
SSH: 'SSH',
FTP: 'FTP',
EMAIL: 'EMAIL',
HTTP: 'HTTP',
RDP: 'RDP',
TELNET: 'TELNET',
SMB: 'SMB',
MONGODB: 'MONGODB',
REDIS: 'REDIS',
OTHER_ABUSE: 'OTHER_ABUSE',
FRAUD_ORDERS: 'FRAUD_ORDERS',
PING_OF_DEATH: 'PING_OF_DEATH',
FRAUD_VOIP: 'FRAUD_VOIP',
OPEN_PROXY: 'OPEN_PROXY',
WEB_SPAM: 'WEB_SPAM',
EMAIL_SPAM: 'EMAIL_SPAM',
BLOG_SPAM: 'BLOG_SPAM',
VPN_IP: 'VPN_IP',
SPOOFING: 'SPOOFING',
WEB_APP_ATTACK: 'WEB_APP_ATTACK',
IOT_TARGETED: 'IOT_TARGETED',
IGNORING_ROBOTS_TXT: 'IGNORING_ROBOTS_TXT',
});
const MAPPINGS = Object.freeze({
SniffCat: new Map([
['DNS_COMPROMISE', 1],
['DNS_POISONING', 2],
['DDOS_ATTACK', 3],
['PORT_SCAN', 4],
['MASS_SCANNER', 5],
['EXPLOITED_HOST', 6],
['MALWARE_HOSTING', 7],
['CNC_BEACONING', 8],
['CRYPTOJACKING', 9],
['PHISHING', 10],
['HACKING', 11],
['SQL_INJECTION', 12],
['COMMAND_INJECTION', 13],
['SPAM_ACTIVITY', 14],
['BAD_WEB_BOT', 15],
['PATH_TRAVERSAL', 16],
['BRUTE_FORCE', 17],
['SSH', 18],
['FTP', 19],
['EMAIL', 20],
['HTTP', 21],
['RDP', 22],
['TELNET', 23],
['SMB', 24],
['MONGODB', 25],
['REDIS', 26],
['OTHER_ABUSE', 27],
]),
AbuseIPDB: new Map([
['DNS_COMPROMISE', 1],
['DNS_POISONING', 2],
['FRAUD_ORDERS', 3],
['DDOS_ATTACK', 4],
['FTP', 5],
['PING_OF_DEATH', 6],
['PHISHING', 7],
['FRAUD_VOIP', 8],
['OPEN_PROXY', 9],
['WEB_SPAM', 10],
['EMAIL_SPAM', 11],
['BLOG_SPAM', 12],
['VPN_IP', 13],
['PORT_SCAN', 14],
['HACKING', 15],
['SQL_INJECTION', 16],
['SPOOFING', 17],
['BRUTE_FORCE', 18],
['BAD_WEB_BOT', 19],
['EXPLOITED_HOST', 20],
['WEB_APP_ATTACK', 21],
['SSH', 22],
['IOT_TARGETED', 23],
]),
});
const FALLBACK_IDS = {
SniffCat: MAPPINGS.SniffCat.get(FLAGS.OTHER_ABUSE),
AbuseIPDB: MAPPINGS.AbuseIPDB.get(FLAGS.HACKING),
};
const createFlagCollection = () => {
const flags = new Set();
const list = () => Array.from(flags);
const toIDs = (integration = prettyName) => {
const map = MAPPINGS[integration];
if (!map) throw new Error(`Unsupported integration: ${integration}`);
const fallbackID = FALLBACK_IDS[integration];
if (typeof fallbackID !== 'number') {
throw new Error(`No fallback ID defined for integration: ${integration}`);
}
const currentFlags = list();
if (currentFlags.length === 0) return [fallbackID];
const ids = currentFlags
.map(f => map.get(f) ?? fallbackID)
.filter(id => typeof id === 'number');
return ids.length > 0 ? ids : [fallbackID];
};
const api = {
add: /** @param {...Flag} items */ (...items) => {
for (const item of items) {
if (Object.prototype.hasOwnProperty.call(FLAGS, item)) {
flags.add(item);
} else {
logger.warn(`Invalid abuse flag ignored! flag='${item}' integration='${prettyName}'`, { discord: true, ping: false });
}
}
return api;
},
list,
toIDs,
toString: (integration = prettyName) => toIDs(integration).join(','),
};
return api;
};
module.exports = {
/** @type {Record<Flag, Flag>} */
FLAGS,
createFlagCollection,
};