Login Google via PocketBase invece che Supabase Auth: nuovi client in src/integrations/pocketbase/ (browser, server con superuser, attacher del bearer token per le server function). Il ruolo admin/user vive ora come campo diretto sul record utente PocketBase invece che nella tabella separata user_roles, quindi ruoli.ts e la verifica in auth-route.server.ts non hanno più bisogno di una query aggiuntiva. requireSupabaseAuth/auth-middleware.ts non viene riportato: non era importato da nessun file, era codice morto. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
40 lines
1.7 KiB
TypeScript
40 lines
1.7 KiB
TypeScript
// Client server-side con privilegi superuser - bypassa le API rules delle collection
|
|
// (equivalente del service role Supabase, con una differenza: PocketBase non ha una
|
|
// chiave statica, l'autenticazione è email+password contro la collection _superusers e
|
|
// va rinnovata quando il token scade).
|
|
//
|
|
// SECURITY: usare solo per operazioni server-side fidate, mai esporre al client.
|
|
// Carica dentro gli handler server: const { pbAdmin } = await import("@/integrations/pocketbase/client.server");
|
|
// L'import a livello di modulo è sicuro solo in altri moduli *.server.ts - le route e le
|
|
// server function finiscono nel bundle client.
|
|
import PocketBase from "pocketbase";
|
|
|
|
let _pb: PocketBase | undefined;
|
|
|
|
export async function pbAdmin(): Promise<PocketBase> {
|
|
const POCKETBASE_URL = process.env["POCKETBASE_URL"];
|
|
const POCKETBASE_SUPERUSER_EMAIL = process.env["POCKETBASE_SUPERUSER_EMAIL"];
|
|
const POCKETBASE_SUPERUSER_PASSWORD = process.env["POCKETBASE_SUPERUSER_PASSWORD"];
|
|
|
|
if (!POCKETBASE_URL || !POCKETBASE_SUPERUSER_EMAIL || !POCKETBASE_SUPERUSER_PASSWORD) {
|
|
const missing = [
|
|
...(!POCKETBASE_URL ? ["POCKETBASE_URL"] : []),
|
|
...(!POCKETBASE_SUPERUSER_EMAIL ? ["POCKETBASE_SUPERUSER_EMAIL"] : []),
|
|
...(!POCKETBASE_SUPERUSER_PASSWORD ? ["POCKETBASE_SUPERUSER_PASSWORD"] : []),
|
|
];
|
|
const message = `Variabili d'ambiente PocketBase mancanti: ${missing.join(", ")}.`;
|
|
console.error(`[PocketBase] ${message}`);
|
|
throw new Error(message);
|
|
}
|
|
|
|
if (!_pb) _pb = new PocketBase(POCKETBASE_URL);
|
|
|
|
if (!_pb.authStore.isValid) {
|
|
await _pb
|
|
.collection("_superusers")
|
|
.authWithPassword(POCKETBASE_SUPERUSER_EMAIL, POCKETBASE_SUPERUSER_PASSWORD);
|
|
}
|
|
|
|
return _pb;
|
|
}
|