This commit is contained in:
2026-08-22 11:09:05 -05:00
parent 798422988d
commit 410a33d9ac
1242 changed files with 250078 additions and 0 deletions
+24
View File
@@ -0,0 +1,24 @@
'use strict';
const fs = require('fs');
const path = require('path');
const txtPath = path.join(__dirname, '..', 'proxies.txt');
const jsonPath = path.join(__dirname, '..', 'proxies.json');
if (fs.existsSync(jsonPath)) {
process.stdout.write('migrate: proxies.json already exists. Skipping.\n');
process.exit(0);
}
if (!fs.existsSync(txtPath)) {
process.stdout.write('migrate: no proxies.txt found. Nothing to migrate.\n');
process.exit(0);
}
const { ProxyRegistry } = require('../src/proxy/registry');
const reg = new ProxyRegistry({ persistPath: jsonPath, txtPath, log: (l, m) => process.stdout.write(` [${l}] ${m}\n`) });
const n = reg.loadFromTxt(txtPath);
reg.save();
process.stdout.write(`migrate: imported ${n} proxies → ${jsonPath}\n`);
+95
View File
@@ -0,0 +1,95 @@
'use strict';
const http = require('http');
const { createApp } = require('../src/server');
async function request(server, opts) {
return new Promise((resolve, reject) => {
const port = server.address().port;
const headers = { ...(opts.headers || {}) };
if (opts.cookie) headers['Cookie'] = opts.cookie;
if (opts.body) headers['Content-Type'] = 'application/json';
const req = http.request({
hostname: '127.0.0.1',
port,
path: opts.path,
method: opts.method || 'GET',
headers,
}, (res) => {
const chunks = [];
res.on('data', (c) => chunks.push(c));
res.on('end', () => {
const body = Buffer.concat(chunks).toString('utf8');
let json = null;
try { json = JSON.parse(body); } catch (_) {}
resolve({ status: res.statusCode, headers: res.headers, body, json });
});
});
req.on('error', reject);
if (opts.body) req.write(JSON.stringify(opts.body));
req.end();
});
}
function assert(cond, msg) {
if (!cond) throw new Error('assertion failed: ' + msg);
process.stdout.write(`${msg}\n`);
}
async function main() {
const { server, shutdown } = createApp();
await new Promise((resolve) => server.listen(0, '127.0.0.1', resolve));
const port = server.address().port;
process.stdout.write(`smoke: server listening on 127.0.0.1:${port}\n`);
try {
const badLogin = await request(server, { method: 'POST', path: '/api/auth/login', body: { password: 'wrong' } });
assert(badLogin.status === 401, 'wrong password returns 401');
const login = await request(server, { method: 'POST', path: '/api/auth/login', body: { password: process.env.SITE_PASSWORD } });
assert(login.status === 200, 'correct password returns 200');
assert(login.json && login.json.success === true, 'login response has success: true');
const cookie = login.headers['set-cookie']?.[0]?.split(';')[0];
assert(cookie && cookie.startsWith('auth_token='), 'auth_token cookie set');
const checkAuth = await request(server, { path: '/api/auth/check', cookie });
assert(checkAuth.json && checkAuth.json.authenticated === true, 'auth check returns authenticated');
const stats = await request(server, { path: '/api/stats', cookie });
assert(stats.status === 200, 'GET /api/stats returns 200');
assert(stats.json && stats.json.activeBots === 0, 'initial activeBots is 0');
assert(typeof stats.json.totalBotsSpawned === 'number', 'totalBotsSpawned is a number');
const proxyList = await request(server, { path: '/api/proxy/list', cookie });
assert(proxyList.status === 200, 'GET /api/proxy/list returns 200');
assert(proxyList.json && Array.isArray(proxyList.json.proxies), 'proxies is an array');
const strategies = await request(server, { path: '/api/test/strategies', cookie });
assert(strategies.status === 200, 'GET /api/test/strategies returns 200');
assert(strategies.json && Array.isArray(strategies.json.available), 'strategies has available list');
const badStart = await request(server, {
method: 'POST', path: '/api/test/start', cookie,
body: { target: 'not-a-url', bots: 1 },
});
assert(badStart.status === 400, 'invalid target returns 400');
const healthz = await request(server, { path: '/api/healthz' });
assert(healthz.status === 200, 'GET /api/healthz returns 200');
assert(healthz.json && healthz.json.status, 'healthz has status');
const metrics = await request(server, { path: '/api/metrics' });
assert(metrics.status === 200, 'GET /api/metrics returns 200');
assert(metrics.body.includes('crackedflooder_bots_active'), 'metrics has crackedflooder_bots_active');
process.stdout.write('smoke: all checks passed\n');
shutdown();
setTimeout(() => process.exit(0), 1000);
} catch (err) {
process.stderr.write(`smoke FAILED: ${err.message}\n`);
shutdown();
setTimeout(() => process.exit(1), 1000);
}
}
main();