Files

28 lines
945 B
TypeScript

import { requireAdminAccess } from "@/lib/session";
import { installationForDownload } from "@/lib/provisioning";
import { buildInstallScript } from "@/lib/install-script";
import { ProvisionError } from "@/lib/certificates";
export async function GET(
_request: Request,
context: { params: Promise<{ id: string }> },
) {
await requireAdminAccess();
try {
const job = await installationForDownload((await context.params).id);
return new Response(buildInstallScript(job), {
headers: {
"Content-Type": "text/x-shellscript; charset=utf-8",
"Content-Disposition": `attachment; filename="install-${job.slug}.sh"`,
"Cache-Control": "no-store",
"X-Content-Type-Options": "nosniff",
},
});
} catch (error) {
if (!(error instanceof ProvisionError)) throw error;
return new Response(error.message, {
status: 410,
headers: { "Cache-Control": "no-store" },
});
}
}