import { redirect } from '@sveltejs/kit'; import type { Cookies } from '@sveltejs/kit'; import type { Actions } from './$types'; export const actions: Actions = { savePerm: async (x) => await savePerm(x, false), newPerm: async (x) => await savePerm(x, true) }; type ActArg = { url: URL; platform: Readonly<App.Platform> | undefined; request: Request; cookies: Cookies; params: { user: string; repo: string }; }; async function savePerm({ url, platform, request, cookies, params }: ActArg, isNew: boolean) { const data = await request.formData(); console.log('data', JSON.stringify(data)); const login = data.get('login'); const read = data.get('read') == 'on'; const write = data.get('write') == 'on'; let perm = { login, read, write }; let resp = await platform?.env.repoadmin.fetch( `https://${url.hostname}/api/a/${params.user}/${params.repo}`, { method: 'POST', body: JSON.stringify({ SavePerm: perm, isNew }), headers: new Headers([ ['Content-Type', 'application/json'], ['Cookie', request.headers.get('cookie') || ''] ]) } ); if (resp.ok) { let x: null | { key: string; value: string } = await resp.json(); if (x) { let exp = new Date(); exp.setTime(exp.getTime() + 60000); cookies.set('perm' + x.key, x.value, { expires: new Date(exp) }); } } if (!data.get('noredirect')) { throw redirect(302, `/${params.user}/${params.repo}/admin`); } else { return await resp.json(); } }