Skip to content
Snippets Groups Projects
Commit 84a7091c authored by Tabitha Permalla's avatar Tabitha Permalla
Browse files

Merge branch 'feat/authentication' into 'master'

Feat/authentication backend

See merge request if3110-2023-01-18/tugas-besar-1!1
parents 5321acf5 2f06c6a5
No related merge requests found
...@@ -31,5 +31,39 @@ class UserController { ...@@ -31,5 +31,39 @@ class UserController {
return $this->userModel->getAllUsers(); return $this->userModel->getAllUsers();
} }
public function registerUser($name, $username, $email, $password, $isAdmin) {
return $this->createUser($name, $username, $email, password_hash($password,PASSWORD_DEFAULT), $isAdmin);
}
public function loginByEmail($email,$password) {
$user = $this->userModel->getUserByEmail($email);
if ($user !== false && password_verify($password, $user['user_hashedPass'])) {
$_SESSION["user_id"] = $user['user_ID'];
return "success";
} else {
return "wrong credentials";
}
}
public function loginByUsername($username,$password) {
$user = $this->userModel->getUserByUsername($username);
if ($user !== false && password_verify($password, $user['user_hashedPass'])) {
$_SESSION["user_id"] = $user['user_ID'];
return "success";
} else {
return "wrong credentials";
}
}
public function logout() {
if (isset($_SESSION["user_id"])) {
unset($_SESSION["user_id"]);
session_destroy();
return "logout successful";
} else {
return "user not logged in";
}
}
} }
?> ?>
...@@ -7,12 +7,24 @@ require_once(__DIR__ . '/../../db/connect.php'); ...@@ -7,12 +7,24 @@ require_once(__DIR__ . '/../../db/connect.php');
class UserModel { class UserModel {
public function createUser($name, $username, $email, $hashedPass, $isAdmin) { public function createUser($name, $username, $email, $hashedPass, $isAdmin) {
global $db; global $db;
$stmt = $db->prepare("INSERT INTO users (user_name, username, user_email, user_hashedPass, isAdmin) VALUES (?, ?, ?, ?, ?)"); try {
$stmt->execute([$name, $username, $email, $hashedPass, $isAdmin]); $stmt = $db->prepare("INSERT INTO users (user_name, username, user_email, user_hashedPass, isAdmin) VALUES (?, ?, ?, ?, ?)");
$stmt->execute([$name, $username, $email, $hashedPass, $isAdmin]);
return "User created successfully";
return "User created successfully";
} catch (PDOException $e) {
// Check if the error code corresponds to a unique constraint violation.
if ($e->getCode() === '23000') {
// Handle the error as a duplicate entry.
return "Username or email already exists. Please choose a different one.";
} else {
// Handle other database errors.
return "Database error: " . $e->getMessage();
}
}
} }
public function getUser($userId) { public function getUser($userId) {
global $db; global $db;
...@@ -23,6 +35,24 @@ class UserModel { ...@@ -23,6 +35,24 @@ class UserModel {
return $stmt->fetch(PDO::FETCH_ASSOC); return $stmt->fetch(PDO::FETCH_ASSOC);
} }
public function getUserByEmail($email) {
global $db;
$stmt = $db->prepare("SELECT * FROM users WHERE user_email = ?");
$stmt->execute([$email]);
return $stmt->fetch(PDO::FETCH_ASSOC);
}
public function getUserByUsername($username){
global $db;
$stmt = $db->prepare("SELECT * FROM users WHERE username = ?");
$stmt->execute([$username]);
return $stmt->fetch(PDO::FETCH_ASSOC);
}
public function updateUser($userId, $name, $username, $email, $hashedPass, $isAdmin) { public function updateUser($userId, $name, $username, $email, $hashedPass, $isAdmin) {
global $db; global $db;
......
...@@ -20,8 +20,8 @@ CREATE TABLE IF NOT EXISTS tickets ( ...@@ -20,8 +20,8 @@ CREATE TABLE IF NOT EXISTS tickets (
CREATE TABLE IF NOT EXISTS users ( CREATE TABLE IF NOT EXISTS users (
user_ID INT AUTO_INCREMENT PRIMARY KEY, user_ID INT AUTO_INCREMENT PRIMARY KEY,
user_name CHAR(255), user_name CHAR(255),
username CHAR(255), username CHAR(255) UNIQUE,
user_email VARCHAR(255), user_email VARCHAR(255) UNIQUE,
user_hashedPass CHAR(255), user_hashedPass CHAR(255),
isAdmin BOOLEAN isAdmin BOOLEAN
); );
......
<?php <?php
// home.php // home.php
session_start();
var_dump($_POST); var_dump($_POST);
// require_once './app/EventController.php'; // require_once './app/EventController.php';
require_once './app/Controllers/PembelianController.php'; require_once './app/Controllers/PembelianController.php';
...@@ -45,10 +46,10 @@ if ($_SERVER["REQUEST_METHOD"] == "POST") { ...@@ -45,10 +46,10 @@ if ($_SERVER["REQUEST_METHOD"] == "POST") {
$userName = $_POST['userName']; $userName = $_POST['userName'];
$userUsername = $_POST['userUsername']; $userUsername = $_POST['userUsername'];
$userEmail = $_POST['userEmail']; $userEmail = $_POST['userEmail'];
$userPassword = password_hash($_POST['userPassword'], PASSWORD_DEFAULT); $userPassword = $_POST['userPassword'];
$isAdmin = isset($_POST['isAdmin']) ? 1 : 0; $isAdmin = isset($_POST['isAdmin']) ? 1 : 0;
$userController->createUser($userName, $userUsername, $userEmail, $userPassword, $isAdmin); echo $userController->registerUser($userName, $userUsername, $userEmail, $userPassword, $isAdmin);
} elseif ($_POST['userAction'] === 'updateUser') { } elseif ($_POST['userAction'] === 'updateUser') {
$userIdUpdate = $_POST['userIdUpdate']; $userIdUpdate = $_POST['userIdUpdate'];
$userNameUpdate = $_POST['userNameUpdate']; $userNameUpdate = $_POST['userNameUpdate'];
...@@ -61,6 +62,12 @@ if ($_SERVER["REQUEST_METHOD"] == "POST") { ...@@ -61,6 +62,12 @@ if ($_SERVER["REQUEST_METHOD"] == "POST") {
} elseif ($_POST['userAction'] === 'deleteUser') { } elseif ($_POST['userAction'] === 'deleteUser') {
$userIdDelete = $_POST['userIdDelete']; $userIdDelete = $_POST['userIdDelete'];
$userController->deleteUser($userIdDelete); $userController->deleteUser($userIdDelete);
} elseif ($_POST['userAction'] === 'login') {
$loginUsername = $_POST['loginUsername'];
$loginPassword = $_POST['loginPassword'];
echo $userController->loginByEmail($loginUsername,$loginPassword);
} elseif ($_POST['userAction'] === 'logout') {
echo $userController->logout();
} }
} }
} }
...@@ -136,6 +143,16 @@ $users = $userController->getAllUsers(); ...@@ -136,6 +143,16 @@ $users = $userController->getAllUsers();
<label>Delete User:</label> <label>Delete User:</label>
<input type="text" name="userIdDelete" placeholder="User ID"> <input type="text" name="userIdDelete" placeholder="User ID">
<button type="submit" name="userAction" value="deleteUser">Delete</button> <button type="submit" name="userAction" value="deleteUser">Delete</button>
<!-- login -->
<label>login:</label>
<input type="email" name="loginUsername" placeholder="mail">
<input type="password" name="loginPassword" placeholder="Password">
<button type="submit" name="userAction" value="login">login</button>
<!-- logout -->
<label>Logout:</label>
<button type="submit" name="userAction" value="logout">logout</button>
</form> </form>
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment