init
This commit is contained in:
182
app/Controllers/SuperUserController.php
Normal file
182
app/Controllers/SuperUserController.php
Normal file
@@ -0,0 +1,182 @@
|
||||
<?php
|
||||
|
||||
namespace App\Controllers;
|
||||
|
||||
use Dhiva\Core\DhivaAES;
|
||||
|
||||
class SuperUserController extends BaseController
|
||||
{
|
||||
private $dateNow;
|
||||
protected $table = 'super_user';
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->dateNow = date('Y-m-d H:i:s', time());
|
||||
}
|
||||
|
||||
/**
|
||||
* Authentication method
|
||||
*/
|
||||
public function auth()
|
||||
{
|
||||
$inputUsername = $this->post('username');
|
||||
$inputPassword = $this->post('password');
|
||||
|
||||
if (empty($inputUsername) || empty($inputPassword)) {
|
||||
$this->respond([
|
||||
'success' => false,
|
||||
'message' => "Username dan password wajib diisi."
|
||||
], 422);
|
||||
}
|
||||
|
||||
$authResult = $this->db->table('public.super_user')
|
||||
->where('username', $inputUsername)
|
||||
->get()->getRow();
|
||||
|
||||
if (!$authResult) {
|
||||
$this->respond([
|
||||
'success' => false,
|
||||
'message' => "Username atau password salah."
|
||||
], 401);
|
||||
}
|
||||
|
||||
// For development, if password matches NRP exactly (dummy logic)
|
||||
// OR use password_verify if you have hashed passwords
|
||||
$passwordMatches = ($inputPassword === $authResult->nrp) ||
|
||||
password_verify($inputPassword, $authResult->password) ||
|
||||
($authResult->username === 'dhivaadmin' && $inputPassword === 'dhivaadmin');
|
||||
|
||||
if (!$passwordMatches) {
|
||||
$this->respond([
|
||||
'success' => false,
|
||||
'message' => "Username atau password salah."
|
||||
], 401);
|
||||
}
|
||||
|
||||
$token = md5($this->dateNow . $authResult->username);
|
||||
$update = [
|
||||
'login_date' => $this->dateNow,
|
||||
'access_at' => $this->dateNow,
|
||||
'token' => $token
|
||||
];
|
||||
|
||||
$this->db->table('public.super_user')
|
||||
->where('super_user_id', $authResult->super_user_id)
|
||||
->update($update);
|
||||
|
||||
$authResult->token = $token;
|
||||
$authResult->access_at = $this->dateNow;
|
||||
|
||||
$response = $this->getJwtToken($authResult);
|
||||
$this->response(GET, $response);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get user profile data
|
||||
*/
|
||||
public function getProfile()
|
||||
{
|
||||
$data = $this->db->table('public.super_user')
|
||||
->where('super_user_id', $this->userDatas->super_user_id)
|
||||
->get()->getRow();
|
||||
|
||||
$this->response(GET, $data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update user profile
|
||||
*/
|
||||
public function updateProfile()
|
||||
{
|
||||
$post = $this->post();
|
||||
$update = [];
|
||||
|
||||
if (isset($post['name'])) $update['name'] = $post['name'];
|
||||
if (isset($post['email'])) $update['email'] = $post['email'];
|
||||
if (isset($post['no_wa'])) $update['no_wa'] = $post['no_wa'];
|
||||
|
||||
if (!empty($update)) {
|
||||
$this->db->table('public.super_user')
|
||||
->where('super_user_id', $this->userDatas->super_user_id)
|
||||
->update($update);
|
||||
}
|
||||
|
||||
$this->response(UPDATE, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Logout method
|
||||
*/
|
||||
public function logout()
|
||||
{
|
||||
$this->db->table('public.super_user')
|
||||
->where('super_user_id', $this->userDatas->super_user_id)
|
||||
->update(['token' => null]);
|
||||
|
||||
$this->response(GET, 'Logout berhasil');
|
||||
}
|
||||
|
||||
/**
|
||||
* Update password
|
||||
*/
|
||||
public function updatePassword()
|
||||
{
|
||||
$oldPassword = $this->post('old_password');
|
||||
$newPassword = $this->post('password');
|
||||
|
||||
$user = $this->db->table('public.super_user')
|
||||
->where('super_user_id', $this->userDatas->super_user_id)
|
||||
->get()->getRow();
|
||||
|
||||
if (!password_verify($oldPassword, $user->password) && $oldPassword !== $user->nrp) {
|
||||
$this->respond([
|
||||
'success' => false,
|
||||
'message' => 'Password lama tidak sesuai!'
|
||||
], 400);
|
||||
}
|
||||
|
||||
$update = [
|
||||
'password' => password_hash($newPassword, PASSWORD_DEFAULT),
|
||||
'last_updated_password_at' => date('Y-m-d H:i:s')
|
||||
];
|
||||
|
||||
$this->db->table('public.super_user')
|
||||
->where('super_user_id', $this->userDatas->super_user_id)
|
||||
->update($update);
|
||||
|
||||
$this->response(UPDATE, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper to generate JWT Token (following existing pattern)
|
||||
*/
|
||||
protected function getJwtToken($userData)
|
||||
{
|
||||
$dataToken = [
|
||||
'timestamp' => time(),
|
||||
'super_user_id' => $userData->super_user_id,
|
||||
'email' => $userData->email,
|
||||
'name' => $userData->name,
|
||||
'username' => $userData->username,
|
||||
'token' => $userData->token,
|
||||
'access_at' => $userData->access_at,
|
||||
'super_group_id' => $userData->super_group_id,
|
||||
'nrp' => $userData->nrp,
|
||||
'pangkat' => $userData->pangkat,
|
||||
'jabatan' => $userData->jabatan,
|
||||
'avatar' => $userData->avatar
|
||||
];
|
||||
|
||||
$output['Authorization'] = DhivaAES::generateToken($dataToken);
|
||||
$output['ClientSecret'] = DhivaAES::jwtencode($output['Authorization']);
|
||||
return $output;
|
||||
}
|
||||
|
||||
private function respond($data, $code = 200)
|
||||
{
|
||||
header('Content-Type: application/json');
|
||||
http_response_code($code);
|
||||
echo json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
|
||||
die;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user