码桶
发现社区成员的开源项目
audit-log.js1.5 KB
// GET: Paginated audit log (admin only, enforced by middleware)
export async function onRequestGet(context) {
const { env } = context;
const kv = env.CF_DNS_KV;
if (!kv) {
return new Response(JSON.stringify({ error: 'KV storage not configured.' }), {
status: 500,
headers: { 'Content-Type': 'application/json' }
});
}
const url = new URL(context.request.url);
const page = parseInt(url.searchParams.get('page') || '1');
const perPage = Math.min(parseInt(url.searchParams.get('per_page') || '50'), 100);
const raw = await kv.get('AUDIT_LOG');
const log = raw ? JSON.parse(raw) : [];
const total = log.length;
const start = (page - 1) * perPage;
const entries = log.slice(start, start + perPage);
return new Response(JSON.stringify({
entries,
total,
page,
perPage,
totalPages: Math.ceil(total / perPage)
}), {
headers: { 'Content-Type': 'application/json' }
});
}
// DELETE: Clear audit log
export async function onRequestDelete(context) {
const { env } = context;
const kv = env.CF_DNS_KV;
if (!kv) {
return new Response(JSON.stringify({ error: 'KV storage not configured.' }), {
status: 500, headers: { 'Content-Type': 'application/json' }
});
}
await kv.put('AUDIT_LOG', JSON.stringify([]));
return new Response(JSON.stringify({ success: true }), {
headers: { 'Content-Type': 'application/json' }
});
}