[ Mini Kiebo ]
Server: Windows NT AKFAR_SERVER 10.0 build 26200 (Windows 10) AMD64
Path:
D:
/
xampp
/
htdocs
/
campus_repo
/
public
/
[
Home
]
File: reset_password.php
<?php if (session_status() === PHP_SESSION_NONE) { session_start(); } use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; require __DIR__ . '/../vendor/autoload.php'; require_once __DIR__ . '/../config/config.php'; require_once __DIR__ . '/../src/Database.php'; require_once __DIR__ . '/../src/Utils.php'; $pdo = Database::getConnection(); $message = ''; if ($_SERVER['REQUEST_METHOD'] === 'POST') { $email = trim($_POST['email']); $stmt = $pdo->prepare("SELECT * FROM users WHERE email = ?"); $stmt->execute([$email]); $user = $stmt->fetch(PDO::FETCH_ASSOC); if ($user) { $token = bin2hex(random_bytes(32)); $expires = date('Y-m-d H:i:s', strtotime('+1 hour')); // Simpan token ke tabel password_resets $stmt = $pdo->prepare("INSERT INTO password_resets (user_id, reset_token, expires_at) VALUES (?,?,?)"); $stmt->execute([$user['id'], $token, $expires]); $resetLink = "http://localhost/campus_repo/public/new_password.php?token=$token"; // Kirim email dengan PHPMailer $mail = new PHPMailer(true); try { $mail->isSMTP(); $mail->Host = 'smtp.gmail.com'; $mail->SMTPAuth = true; $mail->Username = 'emailkampus@gmail.com'; // ganti $mail->Password = 'app_password_email'; // ganti $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; $mail->Port = 587; $mail->setFrom('emailkampus@gmail.com', 'Repository Kampus'); $mail->addAddress($email, $user['name']); $mail->isHTML(true); $mail->Subject = 'Reset Password Repository Kampus'; $mail->Body = " <html><body> <h2>Repository Kampus</h2> <p>Halo {$user['name']},</p> <p>Klik tombol berikut untuk reset password:</p> <p><a href='$resetLink' style='background:#004080;color:#fff;padding:10px 15px;border-radius:5px;text-decoration:none;'>Reset Password</a></p> <p>Link berlaku 1 jam.</p> </body></html> "; $mail->send(); $message = "✅ Link reset password sudah dikirim ke email Anda."; } catch (Exception $e) { $message = "❌ Gagal mengirim email. Error: {$mail->ErrorInfo}"; } } else { $message = "❌ Email tidak ditemukan."; } // Kirim email ke user (sudah ada di kode sebelumnya) $mail->send(); $message = "✅ Link reset password sudah dikirim ke email Anda."; // Kirim notifikasi ke admin $adminMail = new PHPMailer(true); try { $adminMail->isSMTP(); $adminMail->Host = 'smtp.gmail.com'; $adminMail->SMTPAuth = true; $adminMail->Username = 'emailkampus@gmail.com'; // email admin kampus $adminMail->Password = 'app_password_email'; // app password Gmail $adminMail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; $adminMail->Port = 587; $adminMail->setFrom('emailkampus@gmail.com', 'Repository Kampus'); $adminMail->addAddress('adminkampus@gmail.com', 'Admin Repository'); $adminMail->isHTML(true); $adminMail->Subject = 'Notifikasi Reset Password'; $adminMail->Body = " <html><body> <h3>Notifikasi Reset Password</h3> <p>User dengan email <strong>{$user['email']}</strong> dan nama <strong>{$user['name']}</strong> baru saja meminta reset password.</p> <p>Token reset dibuat pada: <strong>".date('d-m-Y H:i')."</strong></p> </body></html> "; $adminMail->send(); } catch (Exception $e) { // Jika gagal kirim notifikasi admin, tidak mengganggu proses utama // Setelah token dibuat dan email dikirim ke user $stmtLog = $pdo->prepare("INSERT INTO reset_logs (user_id, email) VALUES (?, ?)"); $stmtLog->execute([$user['id'], $user['email']]); <h3>Log Reset Password</h3> <table border="1" cellpadding="5" cellspacing="0"> <tr> <th>User ID</th> <th>Email</th> <th>Requested At</th> </tr> <?php $stmt = $pdo->query("SELECT * FROM reset_logs ORDER BY requested_at DESC LIMIT 20"); while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { echo "<tr> <td>{$row['user_id']}</td> <td>{$row['email']}</td> <td>{$row['requested_at']}</td> </tr>"; } ?> </table> } ?>