28 lines
945 B
TypeScript
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" },
|
|
});
|
|
}
|
|
}
|