. */ define('ROOT', rtrim($_SERVER['DOCUMENT_ROOT'], '/') . '/'); require_once ROOT . '/php/session.php'; if ($_SERVER["REQUEST_METHOD"] == "POST") { $username = $_POST['username']; $password = $_POST['password']; $confirmpassword = $_POST['confirmpassword']; $email = $_POST['email']; if ($confirmpassword != $password) { echo "Passwords do not match!"; exit; } $hashed_password = password_hash($password, PASSWORD_DEFAULT); $code = rand(1000, 9999); $host = '127.0.0.1'; $db = 'gnufaultdb'; $db_user = 'gnufaultdb_user'; $pass = trim(file_get_contents('/etc/gnufault.d/password')); $charset = 'utf8mb4'; $dsn = "mysql:host=$host;dbname=$db;charset=$charset"; $options = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ]; try { $pdo = new PDO($dsn, $db_user, $pass, $options); } catch (\PDOException $e) { throw new \PDOException($e->getMessage(), (int)$e->getCode()); } try { $sql = "INSERT INTO users (username, email, password, verification_code) VALUES (:username, :email, :password, :code)"; $stmt = $pdo->prepare($sql); $stmt->execute([ 'username' => $username, 'email' => $email, 'password' => $hashed_password, 'code' => $code ]); $user_id = $pdo->lastInsertId(); set_user_id((int)$user_id); } catch (\PDOException $e) { if ($e->getCode() == 23000) { echo "Error: Username or email is already taken."; } else { echo "Error: " . $e->getMessage(); } exit; } $subject = "GNUfault.org Verification Code"; $headers = "From: noreply@gnufault.org" . "\r\n" . "Reply-To: noreply@gnufault.org" . "\r\n" . "X-Mailer: PHP/" . phpversion(); if (mail($email, $subject, $code, $headers)) { header("Location: verify"); } else { echo "Failed to send"; exit; } } ?>