fix: stabilize infrastructure, bypass account scopes in emergency mode, and sanitize document serialization
This commit is contained in:
parent
20a1695305
commit
25e92d7ccd
@ -22,7 +22,8 @@ export async function createDocumentServer(collectionId: string, data: any) {
|
|||||||
const databases = new Databases(client);
|
const databases = new Databases(client);
|
||||||
const result = await databases.createDocument(DATABASE_ID, collectionId, ID.unique(), data);
|
const result = await databases.createDocument(DATABASE_ID, collectionId, ID.unique(), data);
|
||||||
revalidatePath('/');
|
revalidatePath('/');
|
||||||
return { success: true, data: result };
|
// Sanitizar para Next.js
|
||||||
|
return { success: true, data: { ...result } };
|
||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
console.error('Error creating document:', error);
|
console.error('Error creating document:', error);
|
||||||
return { success: false, error: error.message };
|
return { success: false, error: error.message };
|
||||||
@ -35,7 +36,8 @@ export async function updateDocumentServer(collectionId: string, documentId: str
|
|||||||
const databases = new Databases(client);
|
const databases = new Databases(client);
|
||||||
const result = await databases.updateDocument(DATABASE_ID, collectionId, documentId, data);
|
const result = await databases.updateDocument(DATABASE_ID, collectionId, documentId, data);
|
||||||
revalidatePath('/');
|
revalidatePath('/');
|
||||||
return { success: true, data: result };
|
// Sanitizar para Next.js
|
||||||
|
return { success: true, data: { ...result } };
|
||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
console.error('Error updating document:', error);
|
console.error('Error updating document:', error);
|
||||||
return { success: false, error: error.message };
|
return { success: false, error: error.message };
|
||||||
|
|||||||
@ -31,7 +31,26 @@ async function requireAuth() {
|
|||||||
{ status: 401 }
|
{ status: 401 }
|
||||||
)};
|
)};
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
// Si es modo bypass (admin-emergency), no podemos llamar a account.get() con la API Key
|
||||||
|
const cookieStore = await require('@/lib/appwrite.server').cookies();
|
||||||
|
const PROJECT_ID = process.env.NEXT_PUBLIC_APPWRITE_PROJECT_ID || '69b84df5003bd8957c5c';
|
||||||
|
const sessionCookie = cookieStore.get(`a_session_${PROJECT_ID.toLowerCase()}`);
|
||||||
|
|
||||||
|
if (sessionCookie?.value === "admin-bypass-session") {
|
||||||
|
return {
|
||||||
|
user: {
|
||||||
|
$id: "admin-emergency",
|
||||||
|
name: "Administrador (Emergencia)",
|
||||||
|
email: "admin@almeira.com.co",
|
||||||
|
prefs: { role: 'admin' }
|
||||||
|
},
|
||||||
|
session,
|
||||||
|
error: null
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
const user = await session.account.get();
|
const user = await session.account.get();
|
||||||
return { user, session, error: null };
|
return { user, session, error: null };
|
||||||
} catch {
|
} catch {
|
||||||
|
|||||||
@ -10,6 +10,16 @@ export interface UserPreferences {
|
|||||||
*/
|
*/
|
||||||
export async function getUserPreferences(): Promise<UserPreferences> {
|
export async function getUserPreferences(): Promise<UserPreferences> {
|
||||||
try {
|
try {
|
||||||
|
const PROJECT_ID = process.env.NEXT_PUBLIC_APPWRITE_PROJECT_ID || '69b84df5003bd8957c5c';
|
||||||
|
const { cookies } = await import('next/headers');
|
||||||
|
const cookieStore = await cookies();
|
||||||
|
const sessionCookie = cookieStore.get(`a_session_${PROJECT_ID.toLowerCase()}`);
|
||||||
|
|
||||||
|
// En modo bypass no hay preferencias persistidas reales que valga la pena pedir a account.get()
|
||||||
|
if (sessionCookie?.value === "admin-bypass-session") {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
const sessionClient = await createSessionClient();
|
const sessionClient = await createSessionClient();
|
||||||
if (!sessionClient) return {};
|
if (!sessionClient) return {};
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user