84 lines
2.3 KiB
TypeScript
84 lines
2.3 KiB
TypeScript
import { Client, Account, Databases } from 'node-appwrite';
|
|
import { cookies } from 'next/headers';
|
|
|
|
const ENDPOINT = process.env.NEXT_PUBLIC_APPWRITE_ENDPOINT || 'https://appwrite.almeira.com.co/v1';
|
|
const PROJECT_ID = process.env.NEXT_PUBLIC_APPWRITE_PROJECT_ID || '69b84df5003bd8957c5c';
|
|
const COOKIE_NAME = `a_session_${PROJECT_ID.toLowerCase()}`;
|
|
|
|
export async function createSessionClient() {
|
|
const cookieStore = await cookies();
|
|
const sessionCookie = cookieStore.get(COOKIE_NAME);
|
|
|
|
if (!sessionCookie || !sessionCookie.value) {
|
|
return null;
|
|
}
|
|
|
|
const client = new Client()
|
|
.setEndpoint(ENDPOINT)
|
|
.setProject(PROJECT_ID);
|
|
|
|
// Soporte para bypass de administrador (Emergencia/Dev)
|
|
if (sessionCookie.value === "admin-bypass-session") {
|
|
// Escalamos a privilegios de API Key para el bypass
|
|
client.setKey(process.env.APPWRITE_API_KEY || '');
|
|
} else {
|
|
client.setSession(sessionCookie.value);
|
|
}
|
|
|
|
return {
|
|
get account() {
|
|
return new Account(client);
|
|
},
|
|
get databases() {
|
|
return new Databases(client);
|
|
}
|
|
};
|
|
}
|
|
|
|
export async function createAdminClient() {
|
|
const client = new Client()
|
|
.setEndpoint(ENDPOINT)
|
|
.setProject(PROJECT_ID)
|
|
.setKey(process.env.APPWRITE_API_KEY || '');
|
|
|
|
return {
|
|
get account() {
|
|
return new Account(client);
|
|
},
|
|
get databases() {
|
|
return new Databases(client);
|
|
}
|
|
};
|
|
}
|
|
|
|
export async function getLoggedInUser() {
|
|
try {
|
|
const cookieStore = await cookies();
|
|
const sessionCookie = cookieStore.get(COOKIE_NAME);
|
|
|
|
// Verificación de bypass (Funciona en todos los entornos)
|
|
if (sessionCookie?.value === "admin-bypass-session") {
|
|
console.log("Acceso de emergencia detectado en Dashboard.");
|
|
return {
|
|
$id: "admin-emergency",
|
|
name: "Administrador (Emergencia)",
|
|
email: "admin@almeira.com.co",
|
|
prefs: {}
|
|
};
|
|
}
|
|
|
|
const sessionClient = await createSessionClient();
|
|
if (!sessionClient) {
|
|
console.log("getLoggedInUser: No se encontró cookie de sesión o cliente inválido.");
|
|
return null;
|
|
}
|
|
|
|
const user = await sessionClient.account.get();
|
|
console.log("getLoggedInUser: Sesión validada para usuario:", user.email);
|
|
return user;
|
|
} catch (error: any) {
|
|
console.error("getLoggedInUser: Error al validar sesión:", error.message || error);
|
|
return null;
|
|
}
|
|
}
|