Removes old registration core code
parent
4877354e8d
commit
40c646291e
|
@ -33,63 +33,6 @@ class User {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Registers a new user.
|
|
||||||
*
|
|
||||||
* @param string $username The username of the new user.
|
|
||||||
* @param string $password The password for the new user.
|
|
||||||
*
|
|
||||||
* @return bool|string True if registration is successful, error message otherwise.
|
|
||||||
*/
|
|
||||||
public function register($username, $password) {
|
|
||||||
try {
|
|
||||||
// we have two inserts, start a transaction
|
|
||||||
$this->db->beginTransaction();
|
|
||||||
|
|
||||||
// hash the password, don't store it plain
|
|
||||||
$hashedPassword = password_hash($password, PASSWORD_DEFAULT);
|
|
||||||
|
|
||||||
// insert into users table
|
|
||||||
$sql = 'INSERT
|
|
||||||
INTO users (username, password)
|
|
||||||
VALUES (:username, :password)';
|
|
||||||
$query = $this->db->prepare($sql);
|
|
||||||
$query->bindValue(':username', $username);
|
|
||||||
$query->bindValue(':password', $hashedPassword);
|
|
||||||
|
|
||||||
// execute the first query
|
|
||||||
if (!$query->execute()) {
|
|
||||||
// rollback on error
|
|
||||||
$this->db->rollBack();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// insert the last user id into users_meta table
|
|
||||||
$sql2 = 'INSERT
|
|
||||||
INTO users_meta (user_id)
|
|
||||||
VALUES (:user_id)';
|
|
||||||
$query2 = $this->db->prepare($sql2);
|
|
||||||
$query2->bindValue(':user_id', $this->db->lastInsertId());
|
|
||||||
|
|
||||||
// execute the second query
|
|
||||||
if (!$query2->execute()) {
|
|
||||||
// rollback on error
|
|
||||||
$this->db->rollBack();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// if all is OK, commit the transaction
|
|
||||||
$this->db->commit();
|
|
||||||
return true;
|
|
||||||
|
|
||||||
} catch (Exception $e) {
|
|
||||||
// rollback on any error
|
|
||||||
$this->db->rollBack();
|
|
||||||
return $e->getMessage();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Logs in a user by verifying credentials.
|
* Logs in a user by verifying credentials.
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,98 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* User registration
|
|
||||||
*
|
|
||||||
* This page ("register") handles user registration if the feature is enabled in the configuration.
|
|
||||||
* It accepts a POST request with a username and password, attempts to register the user,
|
|
||||||
* and redirects to the login page on success or displays an error message on failure.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// registration is allowed, go on
|
|
||||||
if ($config['registration_enabled'] == true) {
|
|
||||||
|
|
||||||
try {
|
|
||||||
global $dbWeb, $logObject, $userObject;
|
|
||||||
|
|
||||||
if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
|
|
||||||
|
|
||||||
// Apply rate limiting
|
|
||||||
require '../app/includes/rate_limit_middleware.php';
|
|
||||||
checkRateLimit($dbWeb, 'register');
|
|
||||||
|
|
||||||
require_once '../app/classes/validator.php';
|
|
||||||
require_once '../app/helpers/security.php';
|
|
||||||
$security = SecurityHelper::getInstance();
|
|
||||||
|
|
||||||
// Sanitize input
|
|
||||||
$formData = $security->sanitizeArray($_POST, ['username', 'password', 'confirm_password', 'csrf_token']);
|
|
||||||
|
|
||||||
// Validate CSRF token
|
|
||||||
if (!$security->verifyCsrfToken($formData['csrf_token'] ?? '')) {
|
|
||||||
throw new Exception(Feedback::get('ERROR', 'CSRF_INVALID')['message']);
|
|
||||||
}
|
|
||||||
|
|
||||||
$validator = new Validator($formData);
|
|
||||||
$rules = [
|
|
||||||
'username' => [
|
|
||||||
'required' => true,
|
|
||||||
'min' => 3,
|
|
||||||
'max' => 20
|
|
||||||
],
|
|
||||||
'password' => [
|
|
||||||
'required' => true,
|
|
||||||
'min' => 8,
|
|
||||||
'max' => 100
|
|
||||||
],
|
|
||||||
'confirm_password' => [
|
|
||||||
'required' => true,
|
|
||||||
'matches' => 'password'
|
|
||||||
]
|
|
||||||
];
|
|
||||||
|
|
||||||
$username = $formData['username'] ?? 'unknown';
|
|
||||||
|
|
||||||
if ($validator->validate($rules)) {
|
|
||||||
$password = $formData['password'];
|
|
||||||
|
|
||||||
// registering
|
|
||||||
$result = $userObject->register($username, $password);
|
|
||||||
|
|
||||||
// redirect to login
|
|
||||||
if ($result === true) {
|
|
||||||
// Get the new user's ID for logging
|
|
||||||
$userId = $userObject->getUserId($username)[0]['id'];
|
|
||||||
$logObject->insertLog($userId, "Registration: New user \"$username\" registered successfully. IP: $user_IP", 'user');
|
|
||||||
Feedback::flash('NOTICE', 'DEFAULT', "Registration successful. You can log in now.");
|
|
||||||
header('Location: ' . htmlspecialchars($app_root));
|
|
||||||
exit();
|
|
||||||
// registration fail, redirect to login
|
|
||||||
} else {
|
|
||||||
$logObject->insertLog(0, "Registration: Failed registration attempt for user \"$username\". IP: $user_IP. Reason: $result", 'system');
|
|
||||||
Feedback::flash('ERROR', 'DEFAULT', "Registration failed. $result");
|
|
||||||
header('Location: ' . htmlspecialchars($app_root));
|
|
||||||
exit();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$error = $validator->getFirstError();
|
|
||||||
$logObject->insertLog(0, "Registration: Failed validation for user \"" . ($username ?? 'unknown') . "\". IP: $user_IP. Reason: $error", 'system');
|
|
||||||
Feedback::flash('ERROR', 'DEFAULT', $error);
|
|
||||||
header('Location: ' . htmlspecialchars($app_root . '?page=register'));
|
|
||||||
exit();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (Exception $e) {
|
|
||||||
$logObject->insertLog(0, "Registration: System error. IP: $user_IP. Error: " . $e->getMessage(), 'system');
|
|
||||||
Feedback::flash('ERROR', 'DEFAULT', $e->getMessage());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get any new feedback messages
|
|
||||||
include '../app/helpers/feedback.php';
|
|
||||||
|
|
||||||
// Load the template
|
|
||||||
include '../app/templates/form-register.php';
|
|
||||||
|
|
||||||
// registration disabled
|
|
||||||
} else {
|
|
||||||
echo Feedback::render('NOTICE', 'DEFAULT', 'Registration is disabled', false);
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
<!-- registration form -->
|
|
||||||
<div class="card text-center w-50 mx-auto">
|
|
||||||
<h2 class="card-header">Register</h2>
|
|
||||||
<div class="card-body">
|
|
||||||
<p class="card-text">Enter credentials for registration:</p>
|
|
||||||
<form method="POST" action="<?= htmlspecialchars($app_root) ?>?page=register">
|
|
||||||
<?php include CSRF_TOKEN_INCLUDE; ?>
|
|
||||||
<div class="form-group mb-3">
|
|
||||||
<input type="text" class="form-control w-50 mx-auto" name="username" placeholder="Username"
|
|
||||||
pattern="[A-Za-z0-9_\-]{3,20}" title="3-20 characters, letters, numbers, - and _"
|
|
||||||
required autofocus />
|
|
||||||
</div>
|
|
||||||
<div class="form-group mb-3">
|
|
||||||
<input type="password" class="form-control w-50 mx-auto" name="password" placeholder="Password"
|
|
||||||
pattern=".{8,}" title="Eight or more characters"
|
|
||||||
required />
|
|
||||||
</div>
|
|
||||||
<div class="form-group mb-3">
|
|
||||||
<input type="password" class="form-control w-50 mx-auto" name="confirm_password" placeholder="Confirm password"
|
|
||||||
pattern=".{8,}" title="Eight or more characters"
|
|
||||||
required />
|
|
||||||
</div>
|
|
||||||
<input type="submit" class="btn btn-primary" value="Register" />
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<!-- /registration form -->
|
|
Loading…
Reference in New Issue