40 lines
1.3 KiB
TypeScript
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;
|
|
});
|