aspireves.org/src/pages/api/rebuild.ts

36 lines
1.3 KiB
TypeScript

import type { APIRoute } from 'astro';
import { createHmac, timingSafeEqual } from 'node:crypto';
export const POST: APIRoute = async ({ request }) => {
const webhookSecret = import.meta.env.STORYBLOK_WEBHOOK_SECRET;
const token = import.meta.env.CLEVER_TOKEN;
const orgaId = import.meta.env.CLEVER_ORGA_ID;
const appId = import.meta.env.CLEVER_APP_ID_PRODUCTION;
if (!webhookSecret || !token || !orgaId || !appId) {
return new Response('Missing server configuration', { status: 500 });
}
const body = await request.text();
const signature = request.headers.get('webhook-signature') ?? '';
const expected = createHmac('sha1', webhookSecret).update(body).digest('hex');
if (!timingSafeEqual(Buffer.from(signature), Buffer.from(expected))) {
return new Response('Invalid signature', { status: 401 });
}
const response = await fetch(
`https://api-bridge.clever-cloud.com/v2/organisations/${orgaId}/applications/${appId}/instances`,
{
method: 'POST',
headers: { Authorization: `Bearer ${token}` },
},
);
if (!response.ok) {
const error = await response.text();
return new Response(`Clever Cloud API error: ${response.status} ${error}`, { status: 502 });
}
return new Response('Rebuild triggered', { status: 200 });
};