From 3db1a12e4b4e36414ec7272170c7f6c99c72af85 Mon Sep 17 00:00:00 2001 From: Hamza-Ayed Date: Fri, 8 May 2026 06:25:53 +0300 Subject: [PATCH] Update: 2026-05-08 06:25:53 --- public/create_test_account.php | 83 +++++++++++++++++++++++++++++++++ scripts/create_test_account.php | 82 ++++++++++++++++++++++++++++++++ 2 files changed, 165 insertions(+) create mode 100644 public/create_test_account.php create mode 100644 scripts/create_test_account.php diff --git a/public/create_test_account.php b/public/create_test_account.php new file mode 100644 index 0000000..57d25f9 --- /dev/null +++ b/public/create_test_account.php @@ -0,0 +1,83 @@ +beginTransaction(); + + // 1. Generate UUIDs + $tenantId = sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x', + mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff), + mt_rand(0, 0x0fff) | 0x4000, mt_rand(0, 0x3fff) | 0x8000, + mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff) + ); + + $userId = sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x', + mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff), + mt_rand(0, 0x0fff) | 0x4000, mt_rand(0, 0x3fff) | 0x8000, + mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff) + ); + + // 2. Test Account Data + $tenantName = "مكتب المراجعة التجريبي"; + $tenantEmail = "reviewer@musadaq.jo"; + + $userName = "App Reviewer"; + $userEmail = "reviewer@musadaq.jo"; + $userPassword = "Reviewer2026!"; + + // 3. Encrypt data + $encryptedTenantName = Encryption::encrypt($tenantName); + $encryptedTenantEmail = Encryption::encrypt($tenantEmail); + + $encryptedUserName = Encryption::encrypt($userName); + $encryptedUserEmail = Encryption::encrypt($userEmail); + $emailHash = hash('sha256', strtolower($userEmail)); + $passwordHash = password_hash($userPassword, PASSWORD_DEFAULT); + + // 4. Delete existing if any (prevent duplicates on re-run) + $stmt = $db->prepare("DELETE FROM users WHERE email_hash = ?"); + $stmt->execute([$emailHash]); + + // 5. Insert Tenant + $stmt = $db->prepare("INSERT INTO tenants (id, name, email, status, created_at) VALUES (?, ?, ?, 'active', NOW())"); + $stmt->execute([ + $tenantId, + $encryptedTenantName, + $encryptedTenantEmail + ]); + + // 6. Insert User (Manager) + $stmtUser = $db->prepare("INSERT INTO users (id, tenant_id, name, email, email_hash, password_hash, role, created_at) VALUES (?, ?, ?, ?, ?, ?, 'admin', NOW())"); + $stmtUser->execute([ + $userId, + $tenantId, + $encryptedUserName, + $encryptedUserEmail, + $emailHash, + $passwordHash + ]); + + // 7. Insert Gamification Profile (Optional but good for testing dashboard) + $stmtProfile = $db->prepare("INSERT INTO user_profiles (user_id, points, current_level, rank_title) VALUES (?, 1500, 2, 'مُحاسب مبتدئ') ON DUPLICATE KEY UPDATE points=1500"); + $stmtProfile->execute([$userId]); + + $db->commit(); + echo "

✅ تم إنشاء الحساب التجريبي بنجاح!

"; + echo "

البريد الإلكتروني: $userEmail

"; + echo "

كلمة المرور: $userPassword

"; + + // Delete this file for security + @unlink(__FILE__); + +} catch (\Exception $e) { + $db->rollBack(); + echo "

❌ Error: " . htmlspecialchars($e->getMessage()) . "

"; +} diff --git a/scripts/create_test_account.php b/scripts/create_test_account.php new file mode 100644 index 0000000..14f3a03 --- /dev/null +++ b/scripts/create_test_account.php @@ -0,0 +1,82 @@ +beginTransaction(); + + // 1. Generate UUIDs + $tenantId = sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x', + mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff), + mt_rand(0, 0x0fff) | 0x4000, mt_rand(0, 0x3fff) | 0x8000, + mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff) + ); + + $userId = sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x', + mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff), + mt_rand(0, 0x0fff) | 0x4000, mt_rand(0, 0x3fff) | 0x8000, + mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff) + ); + + // 2. Test Account Data + $tenantName = "مكتب المراجعة التجريبي"; + $tenantEmail = "reviewer@musadaq.jo"; + + $userName = "App Reviewer"; + $userEmail = "reviewer@musadaq.jo"; + $userPassword = "Reviewer2026!"; + + // 3. Encrypt data + $encryptedTenantName = Encryption::encrypt($tenantName); + $encryptedTenantEmail = Encryption::encrypt($tenantEmail); + + $encryptedUserName = Encryption::encrypt($userName); + $encryptedUserEmail = Encryption::encrypt($userEmail); + $emailHash = hash('sha256', strtolower($userEmail)); + $passwordHash = password_hash($userPassword, PASSWORD_DEFAULT); + + // 4. Delete existing if any (prevent duplicates on re-run) + $stmt = $db->prepare("DELETE FROM users WHERE email_hash = ?"); + $stmt->execute([$emailHash]); + + // 5. Insert Tenant + $stmt = $db->prepare("INSERT INTO tenants (id, name, email, status, created_at) VALUES (?, ?, ?, 'active', NOW())"); + $stmt->execute([ + $tenantId, + $encryptedTenantName, + $encryptedTenantEmail + ]); + + // 6. Insert User (Manager) + $stmtUser = $db->prepare("INSERT INTO users (id, tenant_id, name, email, email_hash, password_hash, role, created_at) VALUES (?, ?, ?, ?, ?, ?, 'admin', NOW())"); + $stmtUser->execute([ + $userId, + $tenantId, + $encryptedUserName, + $encryptedUserEmail, + $emailHash, + $passwordHash + ]); + + // 7. Insert Gamification Profile (Optional but good for testing dashboard) + $stmtProfile = $db->prepare("INSERT INTO user_profiles (user_id, points, current_level, rank_title) VALUES (?, 1500, 2, 'مُحاسب مبتدئ') ON DUPLICATE KEY UPDATE points=1500"); + $stmtProfile->execute([$userId]); + + $db->commit(); + echo "✅ Test Account Created Successfully!\n"; + echo "=====================================\n"; + echo "Email: $userEmail\n"; + echo "Password: $userPassword\n"; + echo "=====================================\n"; + +} catch (\Exception $e) { + $db->rollBack(); + echo "❌ Error: " . $e->getMessage() . "\n"; +}