www
/
wwwroot
/
scriptexpert.net
➕ New
📤 Upload
✎ Editing:
auth_repair.php
← Back
<?php /** * /workspace/auth_repair.php — varianta robustă * - Selectează DB (USE) din config sau ?db= * - Detectează tabela users (și cu prefix) * - Verifică / creează / resetează user admin * * Parametri: * ?db=DBNAME -> forțează baza * ?ensure=1&pass=... -> creează admin dacă lipsește * ?reset=1&pass=... -> resetează parola admin * ?user=... -> țintă (default admin) */ declare(strict_types=1); header('Content-Type: text/plain; charset=UTF-8'); require __DIR__ . "/includes/config.php"; require __DIR__ . "/includes/config.inc.php"; // ===== Asigură $database ===== if (!isset($database) || !is_object($database)) { if (class_exists('Database')) { $database = new Database(); } else { die("Nu există instanță Database. Verifică includes/config*.php\n"); } } function q($sql, $params = []) { global $database; return $database->execute($sql, $params); } function val($row, $key) { // suportă atât array asociativ cât și obiect if (is_array($row)) return $row[$key] ?? null; if (is_object($row)) return $row->$key ?? null; return null; } // ===== 1) Selectează baza (USE) ===== $requestedDb = isset($_GET['db']) ? trim((string)$_GET['db']) : null; // încearcă întâi DB din config (uzual e DB_NAME) $dbFromConfig = defined('DB_NAME') ? DB_NAME : null; try { if ($requestedDb) { q("USE `{$requestedDb}`"); } elseif (!empty($dbFromConfig)) { q("USE `{$dbFromConfig}`"); } } catch (Throwable $e) { // continui diagnosticarea chiar și dacă USE dă eroare } $dbRow = q("SELECT DATABASE() AS db"); $currentDb = ($dbRow && isset($dbRow[0])) ? (val($dbRow[0],'db') ?: '(necunoscut)') : '(necunoscut)'; echo "=== Auth Repair / Diagnose ===\n"; echo "DB curent: {$currentDb}\n"; // Dacă nu avem DB selectată, încearcă să ajuți cu listă de DB & tabele users if ($currentDb === '(necunoscut)' || $currentDb === '' || $currentDb === null) { echo "Nu este selectată nicio bază de date. Încerc să ajut cu listări:\n\n"; $schemata = q("SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA ORDER BY SCHEMA_NAME ASC"); if ($schemata) { echo "Schemata disponibile:\n"; foreach ($schemata as $s) echo "- ".val($s,'SCHEMA_NAME')."\n"; } echo "\nHint: accesează cu ?db=NUME_BAZA, ex: /workspace/auth_repair.php?db=exemplu_db\n"; exit; } // ===== 2) Găsește tabela users (cu sau fără prefix) ===== $prefix = defined('DB_PREFIX') ? (string)DB_PREFIX : ''; $candidates = []; if ($prefix !== '') $candidates[] = $prefix . 'users'; $candidates[] = 'users'; // verifică direct în information_schema $foundTable = null; foreach ($candidates as $tbl) { $r = q("SELECT COUNT(*) AS c FROM information_schema.tables WHERE table_schema = ? AND table_name = ?", [ $currentDb, $tbl ]); if ($r && intval(val($r[0],'c')) > 0) { $foundTable = $tbl; break; } } // fallback: caută orice tabelă ce conține 'users' if (!$foundTable) { $like = q("SELECT table_name FROM information_schema.tables WHERE table_schema = ? AND table_name LIKE '%users%' LIMIT 5", [ $currentDb ]); if ($like) { echo "Nu am găsit 'users' după numele așteptat. Posibile potriviri:\n"; foreach ($like as $row) echo "- ".val($row,'table_name')."\n"; echo "Poți seta DB_PREFIX corect în config sau poți redenumi tabela.\n"; } else { echo "Nu am găsit nicio tabelă care conține 'users' în {$currentDb}.\n"; } exit; } $T = $foundTable; echo "Tabela users detectată: {$T}\n"; // ===== 3) Arată rapid primele rânduri ===== $peek = q("SELECT u_id, u_username, u_email, u_status, LENGTH(u_password) AS len FROM `{$T}` ORDER BY u_id ASC LIMIT 5"); if ($peek) { echo "--- primele 5 rânduri ---\n"; foreach ($peek as $row) { $uid = val($row,'u_id'); $uun = val($row,'u_username'); $uem = val($row,'u_email'); $ust = val($row,'u_status'); $len = val($row,'len'); echo "u_id={$uid} user={$uun} email={$uem} status={$ust} len(hash)={$len}\n"; } } else { echo "--- tabela e goală sau nu pot selecta ---\n"; } // ===== 4) Verifică / creează / resetează user admin ===== $userKey = isset($_GET['user']) ? trim((string)$_GET['user']) : 'admin'; $u = q("SELECT * FROM `{$T}` WHERE u_username = ? OR u_email = ? LIMIT 1", [ $userKey, $userKey ]); if (!$u || !isset($u[0])) { echo "Userul '{$userKey}' NU există.\n"; if (!empty($_GET['ensure'])) { // creează admin $username = 'admin'; $email = 'admin@example.com'; $fullname = 'Admin Test'; $password = isset($_GET['pass']) ? (string)$_GET['pass'] : 'admin123'; $level = 9; $status = 'active'; $avatar = null; $twoFA = 0; // asigură tipul corect pentru parola q("ALTER TABLE `{$T}` MODIFY `u_password` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL"); $hash = password_hash($password, PASSWORD_DEFAULT); q("INSERT INTO `{$T}` (u_username, u_email, u_fullname, u_password, u_level, u_avatar, u_lastlogin, u_token, u_2fa_enabled, u_status, u_created_at, u_updated_at) VALUES (?, ?, ?, ?, ?, ?, NULL, NULL, ?, ?, NOW(), NOW())", [ $username, $email, $fullname, $hash, $level, $avatar, $twoFA, $status ] ); $u = q("SELECT * FROM `{$T}` WHERE u_username = ? LIMIT 1", [ $username ]); if ($u && isset($u[0])) { echo "Creat user admin cu parola '".(isset($_GET['pass'])?(string)$_GET['pass']:'admin123')."'.\n"; } else { echo "Eroare: nu am reușit să creez userul admin.\n"; } } else { echo "Pentru a crea user admin acum: adaugă ?ensure=1&pass=PAROLA\n"; } exit; } // avem user $user = is_array($u[0]) ? $u[0] : (array)$u[0]; $hash = rtrim((string)$user['u_password']); // rtrim în caz de CHAR(...) // afișează info echo "User găsit: u_id={$user['u_id']} username={$user['u_username']} email={$user['u_email']}\n"; echo "Status: {$user['u_status']} | len(hash)=" . strlen($hash) . "\n"; // verifică parola (implicit admin123 sau ?pass=...) $plain = isset($_GET['pass']) ? (string)$_GET['pass'] : 'admin123'; $ok = password_verify($plain, $hash); echo "password_verify('{$plain}') => " . ($ok ? 'TRUE' : 'FALSE') . "\n"; // opțional: reset if (!empty($_GET['reset'])) { $new = isset($_GET['pass']) ? (string)$_GET['pass'] : 'admin123'; $newHash = password_hash($new, PASSWORD_DEFAULT); q("UPDATE `{$T}` SET u_password=?, u_status='active', u_level=GREATEST(u_level,9), u_updated_at=NOW() WHERE u_id=?", [ $newHash, (int)$user['u_id'] ]); echo "Parola resetată la '{$new}'. Încearcă login din nou.\n"; } // avertisment dacă hash-ul e scurt (trunchiat) $len = strlen($hash); if ($len < 55) { echo "ATENȚIE: len(hash)={$len} pare prea mic (hash trunchiat?). Recomand ALTER TABLE `{$T}` MODIFY u_password VARCHAR(255) NOT NULL;\n"; } echo "\nNOTE:\n"; echo " - Dacă inițial DB curent a fost '(necunoscut)', de aceea nu găseai userul. Folosește ?db=BAZA sau setează corect DB_NAME în config.\n"; echo " - După ce vezi TRUE la password_verify, dacă tot te scoate din admin, problema e la cookie-ul de sesiune (nume diferit / domeniu diferit / SameSite).\n";
💾 Save Changes
Cancel
📤 Upload File
×
Select File
Upload
Cancel
➕ Create New
×
Type
📄 File
📁 Folder
Name
Create
Cancel
✎ Rename Item
×
Current Name
New Name
Rename
Cancel
🔐 Change Permissions
×
Target File
Permission (e.g., 0755, 0644)
0755
0644
0777
Apply
Cancel