auth.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. <?php
  2. header("Access-Control-Allow-Origin: *");
  3. header("Content-Type: application/json; charset=UTF-8");
  4. header("Access-Control-Allow-Methods: POST, OPTIONS");
  5. header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");
  6. if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
  7. exit(0);
  8. }
  9. require_once '../config/database.php';
  10. require_once '../models/User.php';
  11. $database = new Database();
  12. $db = $database->getConnection();
  13. $user = new User($db);
  14. // Start session for authenticated requests
  15. session_start();
  16. $request_method = $_SERVER['REQUEST_METHOD'];
  17. switch($request_method) {
  18. case 'POST':
  19. $data = json_decode(file_get_contents("php://input"));
  20. if($data->action === 'login') {
  21. if(!empty($data->username) && !empty($data->password)) {
  22. $authenticated_user = $user->authenticate($data->username, $data->password);
  23. if($authenticated_user) {
  24. $_SESSION['user_id'] = $authenticated_user['id'];
  25. $_SESSION['username'] = $authenticated_user['username'];
  26. $_SESSION['role'] = $authenticated_user['role'];
  27. $_SESSION['first_name'] = $authenticated_user['first_name'];
  28. $_SESSION['last_name'] = $authenticated_user['last_name'];
  29. http_response_code(200);
  30. echo json_encode(array(
  31. "message" => "Login successful",
  32. "user" => array(
  33. "id" => $authenticated_user['id'],
  34. "username" => $authenticated_user['username'],
  35. "email" => $authenticated_user['email'],
  36. "first_name" => $authenticated_user['first_name'],
  37. "last_name" => $authenticated_user['last_name'],
  38. "role" => $authenticated_user['role']
  39. )
  40. ));
  41. } else {
  42. http_response_code(401);
  43. echo json_encode(array("message" => "Invalid credentials"));
  44. }
  45. } else {
  46. http_response_code(400);
  47. echo json_encode(array("message" => "Username and password are required"));
  48. }
  49. } elseif($data->action === 'register') {
  50. if(!empty($data->username) && !empty($data->email) && !empty($data->password) && !empty($data->first_name) && !empty($data->last_name)) {
  51. // Check if username or email already exists
  52. $existing_user = $user->findByEmail($data->email);
  53. if($existing_user) {
  54. http_response_code(409);
  55. echo json_encode(array("message" => "Email already exists"));
  56. break;
  57. }
  58. $existing_user = $user->read();
  59. while($row = $existing_user->fetch(PDO::FETCH_ASSOC)) {
  60. if($row['username'] === $data->username) {
  61. http_response_code(409);
  62. echo json_encode(array("message" => "Username already exists"));
  63. break 2;
  64. }
  65. }
  66. $user->username = $data->username;
  67. $user->email = $data->email;
  68. $user->password_hash = password_hash($data->password, PASSWORD_DEFAULT);
  69. $user->first_name = $data->first_name;
  70. $user->last_name = $data->last_name;
  71. $user->role = $data->role ?? 'user';
  72. if($user->create()) {
  73. http_response_code(201);
  74. echo json_encode(array("message" => "User registered successfully"));
  75. } else {
  76. http_response_code(503);
  77. echo json_encode(array("message" => "Unable to register user"));
  78. }
  79. } else {
  80. http_response_code(400);
  81. echo json_encode(array("message" => "Required fields are missing"));
  82. }
  83. } elseif($data->action === 'logout') {
  84. session_destroy();
  85. http_response_code(200);
  86. echo json_encode(array("message" => "Logged out successfully"));
  87. } else {
  88. http_response_code(400);
  89. echo json_encode(array("message" => "Invalid action"));
  90. }
  91. break;
  92. default:
  93. http_response_code(405);
  94. echo json_encode(array("message" => "Method not allowed."));
  95. break;
  96. }
  97. ?>