From 3873cad7baf5d2f63b4399b7bfb0ec4d7d66adb9 Mon Sep 17 00:00:00 2001 From: Connor Thomson Date: Sat, 19 Sep 2026 17:02:13 -0700 Subject: Add signup and other stuff --- signup/signup.php | 96 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 signup/signup.php (limited to 'signup/signup.php') diff --git a/signup/signup.php b/signup/signup.php new file mode 100644 index 0000000..5ba3ca8 --- /dev/null +++ b/signup/signup.php @@ -0,0 +1,96 @@ +. + */ + +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(); + + setcookie('user_id', (string)$user_id, [ + 'expires' => 2147483647, + 'path' => '/', + 'secure' => true, + 'httponly' => true, + 'samesite' => 'Strict' + ]); + } 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; + } +} +?> -- cgit v1.2.3