AMS_Backend/app/Controllers/Backend/LoginController.php
2025-11-06 13:41:06 +08:00

171 lines
4.2 KiB
PHP

<?php
namespace App\Controllers\Backend;
use App\Controllers\BaseController;
use CodeIgniter\HTTP\ResponseInterface;
use CodeIgniter\API\ResponseTrait;
use App\Models\User;
use Firebase\JWT\JWT;
class LoginController extends BaseController
{
use ResponseTrait;
public function index()
{
$userModel = new User();
$username = $this->request->getVar('username');
$password = $this->request->getVar('password_hash');
$user = $userModel->where('username', $username)->first();
if(is_null($user)) {
return $this->failUnauthorized('Invalid username or password.');
}
$hashedPassword = md5($password);
if ($hashedPassword !== $user['password_hash']) {
return $this->failUnauthorized('Invalid username or password.');
}
$key = getenv('JWT_SECRET');
$iat = time(); // current timestamp value
$exp = $iat + 86400;
$payload = array(
"iss" => "Issuer of the JWT",
"aud" => "Audience that the JWT",
"sub" => "Subject of the JWT",
"iat" => $iat, //Time the JWT issued at
"exp" => $exp, // Expiration time of token
"username" => $user['username'],
);
$token = JWT::encode($payload, $key, 'HS256');
$userData = [
'user_id' => $user['id'],
'username' => $user['username'],
'name' => $user['name'],
'role' => $user['role'],
'status'=> $user['status'],
'outlet_id'=> $user['outlet_id'],
// 'created_by'=> $user['created_by'],
'updated_at' => $user['updated_at'],
'created_at' => $user['created_at'],
];
$response = [
'message' => 'Login Succesful',
'token' => $token,
'userData' => $userData
];
// session()->set('merchant_id', $user['merchant_id']);
return $this->respond($response, 200);
}
public function requestToken()
{
$userModel = new User();
$merchant = $this->request->getVar('merchant');
$token_key = $this->request->getVar('token_key');
$user = $userModel->where('username', $merchant)->first();
if(is_null($user)) {
return $this->failUnauthorized('Invalid username.');
}
if ($token_key !== $user['token_key']) {
return $this->failUnauthorized('Invalid token key.');
}
$key = getenv('JWT_SECRET');
$iat = time(); // current timestamp value
$exp = $iat + 86400;
$payload = array(
"iss" => "Issuer of the JWT",
"aud" => "Audience that the JWT",
"sub" => "Subject of the JWT",
"iat" => $iat, //Time the JWT issued at
"exp" => $exp, // Expiration time of token
"user_id" => $user['user_id'],
"token_key" => $token_key,
);
$token = JWT::encode($payload, $key, 'HS256');
$response = [
'message' => 'Request Succesfully',
'token' => $token,
'expires' => date('Y-m-d H:i:s', $exp)
];
return $this->respond($response, 200);
}
/**
* Return the properties of a resource object
*
* @return mixed
*/
public function show($id = null)
{
//
}
/**
* Return a new resource object, with default properties
*
* @return mixed
*/
public function new()
{
//
}
/**
* Create a new resource object, from "posted" parameters
*
* @return mixed
*/
public function create()
{
//
}
/**
* Return the editable properties of a resource object
*
* @return mixed
*/
public function edit($id = null)
{
//
}
/**
* Add or update a model resource, from "posted" properties
*
* @return mixed
*/
public function update($id = null)
{
//
}
/**
* Delete the designated resource object from the model
*
* @return mixed
*/
public function delete($id = null)
{
//
}
}