db_regional = $this->load->database("regional", true); // if (!$this->isLogin) { // $this->sys_error("Invalid Token"); // exit; // } // $userID = $this->sys_user['M_UserID']; // $sql_cek_token = "SELECT M_UserActiveToken // from one_mitra.m_user // WHERE M_UserID = ? // AND M_UserActiveToken IS NOT NULL"; // $qry_token = $this->db->query($sql_cek_token, [$userID]); // if (!$qry_token) { // $this->sys_error('Invalid token'); // exit; // } // $rows_token = $qry_token->result_array(); // if (count($rows_token) == 0) { // $this->sys_error('Invalid token'); // exit; // } } public function getUserAliases() { $prm = $this->sys_input; if (!$this->isLogin) { $this->sys_error("Invalid Token"); exit; } $sql = "SELECT M_UserAliasesID AS userAliasesID, M_UserAliasesM_UsersID AS userAliasesUserID, M_UserAliasesTargetIP AS userAliasesTargetIP, M_UserAliasesTargetM_UserID AS userAliasesTargetUserID, M_UserAliasesTargetM_Username AS userAliasesTargetUsername, M_UserAliasesTargetURL AS userAliasesTargetUrl, S_RegionalID AS userAliasesTargetRegionalID, S_RegionalName AS userAliasesTargetRegionalName FROM one_mitra.m_user_aliases JOIN s_regional ON M_UserAliasesTargetRegionalID = S_RegionalID WHERE M_UserAliasesM_UsersID = ? AND M_UserAliasesIsActive = 'Y';"; $query = $this->db->query($sql, array($this->sys_user['M_UserID'])); if (!$query) { $this->sys_error_db("Error get user aliases"); exit; } $data = $query->result_array(); $this->sys_ok($data); } public function encrypt($targetUrl, $username) { $str = $targetUrl . '.' . $username; return md5($str); } public function autologin() { $prm = $this->sys_input; // if (!$this->isLogin) { // $this->sys_error("Invalid Token"); // exit; // } $userID = $prm['userID']; $username = $prm['username']; $targetUrl = $prm['targetUrl']; $xcode = $prm['xcode']; $xcode_encrypt = $this->encrypt($targetUrl, $username); if ($xcode_encrypt != $xcode) { $this->sys_error("Invalid xcode"); exit; } $sql = "SELECT * FROM one_mitra.m_user WHERE M_UserUsername = ? AND M_UserID = ? AND M_UserIsActive = 'Y'"; $query = $this->db->query($sql, [$username, $userID]); if (!$query) { $this->sys_error_db("Error update user"); exit; } $data = $query->result_array(); if (count($data) == 0) { $this->sys_error("User not found"); exit; } $query = $this->db->query( "SELECT M_UserID, M_UserUsername, M_UserM_CompanyID, M_UserM_MouID, M_CompanyName as company_name, M_UserS_RegionalID from one_mitra.m_user JOIN m_company ON M_UserM_CompanyID = M_CompanyID AND M_CompanyIsActive = 'Y' where M_UserUsername= ? and M_UserID= ? and M_UserIsActive = 'Y' ", array($prm["username"], $userID) ); // print_r($this->db_regional->last_query()); if (!$query) { $message = $this->db->error(); $this->sys_error($message, $this->db); exit; } $rows = $query->result_array(); if (count($rows) > 0) { $user = $rows[0]; $user['ip'] = $_SERVER['REMOTE_ADDR']; $user['agent'] = $_SERVER['HTTP_USER_AGENT']; $token = JWT::encode($user, $this->SECRET_KEY); $data = array( "user" => $user, "token" => $token ); $query = $this->db->query("UPDATE one_mitra.m_user SET M_UserIsLoggedIn = 'Y', M_UserLastAccess = now(), M_UserActiveToken = '{$token}' WHERE M_UserID = ? ", array($user['M_UserID'])); if (!$query) { $message = $this->db_regional->error(); $this->sys_error($message); exit; } $query = $this->db->query("INSERT INTO mitra_log.log_login (Log_LoginDateTime, Log_LoginIP, Log_LoginType, Log_LoginStatus, Log_LoginLogin) VALUES (?,?,?,?,?) ", array(date('Y-m-d H:i:s'), $_SERVER['REMOTE_ADDR'], 'LOGIN', 'SUCCESS', $prm["username"])); if (!$query) { $message = $this->db->error(); $this->sys_error($message); exit; } $this->sys_ok($data); exit; } $this->sys_ok($data); } public function request_mitra_token() { // userID , userName, targetUrl $prm = $this->sys_input; if (!$this->isLogin) { $this->sys_error("Invalid Token"); exit; } $username = $prm['username']; $targetUrl = $prm['targetUrl']; $xcode = $this->encrypt($targetUrl, $username); $fields = [ 'token' => $prm['token'], 'userID' => $prm['userID'], 'username' => $username, 'targetUrl' => $targetUrl, 'xcode' => $xcode ]; $dest_url = $targetUrl . "/one-api/one_mitra/authchange/autologin"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $dest_url); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($fields)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); if ($response === false) { $this->sys_error("error get token from destination server"); exit; } curl_close($ch); $json_data = json_decode($response, true); $token = $json_data['data']['token']; $return = $targetUrl . "/" . "mitra-cb" ."/" . "?token=" . $token; $this->sys_ok($return); } }