40 lines
1.3 KiB
TypeScript

import { getActiveBlocklistDomains } from "../../db/domains";
export default defineEventHandler(async (event) => {
const query = getQuery(event);
const format = (query.format as string) ?? "hosts";
const rows = await getActiveBlocklistDomains();
const domainList = rows.map((d) => d.domain);
let content = "";
let filename = "rebreak-blocklist";
const contentType = "text/plain";
if (format === "hosts") {
filename += ".hosts";
content = `# Rebreak Gambling Blocklist\n# Generated: ${new Date().toISOString()}\n# Format: /etc/hosts\n\n`;
content += domainList
.map((d) => `0.0.0.0 ${d}\n0.0.0.0 www.${d}`)
.join("\n");
} else if (format === "ublock") {
filename += ".txt";
content = `! Rebreak Gambling Blocklist\n! Generated: ${new Date().toISOString()}\n! Expires: 1 day\n\n`;
content += domainList.map((d) => `||${d}^`).join("\n");
} else if (format === "dns") {
filename += "-dns.txt";
content = domainList.join("\n");
} else {
throw createError({
statusCode: 400,
message: "Invalid format. Use: hosts, ublock, dns",
});
}
setHeader(event, "Content-Type", `${contentType}; charset=utf-8`);
setHeader(event, "Content-Disposition", `attachment; filename="${filename}"`);
setHeader(event, "Cache-Control", "public, max-age=3600");
return content;
});