revise backend

This commit is contained in:
Michal Sedlák
2026-10-18 15:55:34 +02:00
parent dc452059f3
commit 99b1c96f4b
23 changed files with 681 additions and 720 deletions
+43 -82
View File
@@ -1,95 +1,56 @@
<?php
session_start();
if (!isset($_SESSION['uname'])) {
header("location: ../index.php");
exit();
}
require_once __DIR__ . '/../includes/auth.php';
requireLogin('../index.php');
require_once __DIR__ . '/../config/config.php';
require_once __DIR__ . '/../includes/workspace.php';
// $username = "UNAME";
// $password = "PSWD";
// $db = "usbraidlogin";
$message = "";
$messageType = "";
$message = '';
$messageType = '';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (isset($_POST['current_password'], $_POST['new_password'], $_POST['confirm_password'])) {
$current_password = htmlspecialchars($_POST['current_password']);
$new_password = htmlspecialchars($_POST['new_password']);
$confirm_password = htmlspecialchars($_POST['confirm_password']);
$uname = $_SESSION['uname'];
$messageType = 'danger';
$currentPassword = $_POST['current_password'] ?? null;
$newPassword = $_POST['new_password'] ?? null;
$confirmPassword = $_POST['confirm_password'] ?? null;
if(!CheckPassword($new_password)) {
$message = "New password must be at least 8 characters long, contain at least one number and one uppercase letter!";
$messageType = "danger";
} else if ($new_password !== $confirm_password) {
$message = "New passwords do not match!";
$messageType = "danger";
} else {
$conn = getDatabaseConnection();
// charset already set in getDatabaseConnection()
if ($conn->connect_error) {
$message = "Database connection failed!";
$messageType = "danger";
} else {
$sql = "SELECT pswd FROM users WHERE uname=?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("s", $uname);
$stmt->execute();
$result = $stmt->get_result();
if ($result && $result->num_rows > 0) {
$row = $result->fetch_assoc();
$stored_hash = $row["pswd"];
if (password_verify($current_password, $stored_hash)) {
$new_hash = password_hash($new_password, PASSWORD_BCRYPT);
$update_sql = "UPDATE users SET pswd=? WHERE uname=?";
$update_stmt = $conn->prepare($update_sql);
$update_stmt->bind_param("ss", $new_hash, $uname);
if ($update_stmt->execute()) {
$message = "Password changed successfully!";
$messageType = "success";
} else {
$message = "Error updating password: " . $conn->error;
$messageType = "danger";
}
$update_stmt->close();
} else {
$message = "Current password is incorrect!";
$messageType = "danger";
}
} else {
$message = "User not found!";
$messageType = "danger";
}
$stmt->close();
$conn->close();
}
}
if (!is_string($currentPassword) || !is_string($newPassword) || !is_string($confirmPassword)) {
$message = 'All fields are required!';
} elseif (!isPasswordValid($newPassword)) {
$message = 'New password must be at least 8 characters long, contain at least one number and one uppercase letter!';
} elseif ($newPassword !== $confirmPassword) {
$message = 'New passwords do not match!';
} else {
$message = "All fields are required!";
$messageType = "danger";
}
}
$database = getDatabaseConnection();
try {
$username = $_SESSION['uname'];
$statement = $database->prepare('SELECT pswd FROM users WHERE uname = ?');
$statement->bind_param('s', $username);
$statement->execute();
$result = $statement->get_result();
$user = $result->fetch_assoc();
$result->free();
$statement->close();
function CheckPassword($password) {
if (strlen($password) < 8) {
return false;
if (!$user) {
$message = 'User not found!';
} elseif (!password_verify($currentPassword, $user['pswd'])) {
$message = 'Current password is incorrect!';
} else {
$passwordHash = password_hash($newPassword, PASSWORD_BCRYPT);
$statement = $database->prepare('UPDATE users SET pswd = ? WHERE uname = ?');
$statement->bind_param('ss', $passwordHash, $username);
$statement->execute();
$statement->close();
$message = 'Password changed successfully!';
$messageType = 'success';
}
} catch (mysqli_sql_exception $exception) {
error_log($exception->getMessage());
$message = 'Unable to change password. Please try again.';
} finally {
$database->close();
}
}
if (!preg_match('/[0-9]/', $password)) {
return false;
}
if (!preg_match('/[A-Z]/', $password)) {
return false;
}
return true;
}
?>