import { json, fail, body, hashPassword, makeSession, sessionCookie, requiredSecret } from "./_utils.js"; export async function onRequestPost({ request, env }) { // فحص إعدادات التشغيل دون إظهار قيمة السر console.log("Secret diagnostic:", { exists: typeof env.SESSION_SECRET === "string", length: env.SESSION_SECRET?.length ?? 0, database: !!env.DB }); // التحقق من SESSION_SECRET if (!requiredSecret(env)) { return fail("إعداد SESSION_SECRET غير مكتمل.", 500); } // قراءة البيانات const d = await body(request); if ( !d || typeof d.name !== "string" || typeof d.email !== "string" || typeof d.password !== "string" ) { return fail("يرجى إدخال جميع البيانات المطلوبة."); } const name = d.name.trim(); const email = d.email.trim().toLowerCase(); const password = d.password; // التحقق من الاسم if (name.length < 2 || name.length > 100) { return fail("الاسم يجب أن يكون بين حرفين و100 حرف."); } // التحقق من البريد الإلكتروني if ( !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email) || email.length > 190 ) { return fail("البريد الإلكتروني غير صالح."); } // التحقق من كلمة المرور if (password.length < 8 || password.length > 128) { return fail("كلمة المرور يجب أن تكون 8 أحرف على الأقل."); } // التحقق من وجود البريد مسبقاً const exists = await env.DB .prepare("SELECT id FROM Users WHERE email = ?") .bind(email) .first(); if (exists) { return fail("هذا البريد مسجل مسبقاً.", 409); } // تشفير كلمة المرور const hash = await hashPassword(password); // إنشاء الحساب const result = await env.DB .prepare( "INSERT INTO Users (name, email, password) VALUES (?, ?, ?)" ) .bind(name, email, hash) .run(); const user = { id: result.meta.last_row_id, name, email }; // إنشاء جلسة المستخدم const token = await makeSession(user, env.SESSION_SECRET); return json( { user }, 201, { "Set-Cookie": sessionCookie(token) } ); }