File: /var/www/uileague/wp-content/themes/uileague/api-login.php
<?php
/* Template Name: Api Login */
get_header('cross');
include_once 'JwtAuth.php';
include_once 'ApiStatus.php';
/**
* 登录API
*/
$creds = array();
$creds['user_login'] = isset($_REQUEST['loginName']) ? htmlspecialchars($_REQUEST['loginName']) : '';
$creds['user_password'] = isset($_REQUEST['loginPWD']) ? htmlspecialchars($_REQUEST['loginPWD']) : '';
$creds['qr'] = isset($_REQUEST['qr']) ? htmlspecialchars($_REQUEST['qr']) : '';
$res = loginFunc($creds);
echo_json($res);
function loginFunc($creds)
{
global $wpdb;
$resObj = new stdClass();
$login = $creds['user_login'];
$password = $creds['user_password'];
$qr = $creds['qr'];
if (empty($login) && empty($password) && empty($qr) && empty($nfc)) {
$resObj->rc = ApiStatus::ERR_PARAMS[0];
$resObj->msg = ApiStatus::ERR_PARAMS[1];
} else {
if (!empty($qr)) {
// 二維碼 登入
$referee_id = decrypt($qr);
if (is_numeric($referee_id)) {
$referee = InviteRefereeHelper::get_by_id($referee_id);
if ($referee != null) {
$company_user = UserHelper::get_by_id($referee->uid);
_get_company_user($company_user, $resObj);
}
} else {
$resObj->rc = ApiStatus::ERR_PARAMS[0];
$resObj->msg = ApiStatus::ERR_PARAMS[1];
}
} else if (!empty($login) && !empty($password)) {
// 密碼 登入
$pwd = md5(PasswordConfig::PWDMD5F . $password . PasswordConfig::PWDMD5L);
$company_user = UserHelper::get_by_password($login, $pwd);
_get_company_user($company_user, $resObj);
} else {
$resObj->rc = ApiStatus::ERR_PARAMS[0];
$resObj->msg = ApiStatus::ERR_PARAMS[1];
}
}
return $resObj;
}
function _get_company_user($company_user, $resObj)
{
if ($company_user != null) {
can_do($company_user->id, 0, "login_app", function () use ($company_user, $resObj) {
if ($company_user->status == 0) {
$resObj->rc = ApiStatus::ERR_LOGIN_PAUSE[0];
$resObj->msg = ApiStatus::ERR_LOGIN_PAUSE[1];
} else {
$jwtAuth = JwtAuth::getInstance();
$token = $jwtAuth->setWpuid(0)->setUid($company_user->id)->setGroupId(0)->setRulesArr([])->encode()->getToken();
$refresh_token = $jwtAuth->setWpuid(0)->setUid($company_user->id)->setGroupId(0)->setRulesArr([])->encode()->getrefresh_token();
$resObj->rc = ApiStatus::SUCCESS[0];
$resObj->msg = ApiStatus::SUCCESS[1];
$resObj->access_token = $token;
$resObj->refresh_token = $refresh_token;
$company_user->access_token = $token;
$company_user->refresh_token = $refresh_token;
$resObj->data = $company_user;
Logger::log("登入 - App", null, 0, null, null, $company_user->id, 0);
}
});
} else {
$resObj->rc = ApiStatus::ERR_LOGIN_FALSE[0];
$resObj->msg = ApiStatus::ERR_LOGIN_FALSE[1];
}
}
function can_do($uid, $wpuid, $permission, callable $func, $specialId = 0)
{
if (empty($wpuid)) {
$user = UserHelper::get_by_id($uid);
if (is_array($permission)) {
$has_permission = count($permission) > 0;
foreach ($permission as $p) {
$has_permission = $has_permission && Permissions::contains($user->role, $p);
}
} else {
$has_permission = Permissions::contains($user->role, $permission);
}
// 是 company 用户,且拥有权限
if ($user != null && $has_permission) {
$func();
} else if ($user != null && $specialId == $uid && $specialId > 0) {
// 特例,如果是当前用户,即使没有权限修改用户,但也允许更新自己的资料
$func();
} else {
$result = new stdClass();
$result->rc = ApiStatus::ERR_NO_PERMISSION[0];
$result->msg = ApiStatus::ERR_NO_PERMISSION[1];
$result->data = $uid;
echo_json($result);
exit;
}
} else {
// 是 ego 管理员
if (user_can($wpuid, "manage_options")) {
$func();
} else {
$result = new stdClass();
$result->rc = ApiStatus::ERR_NO_PERMISSION[0];
$result->msg = ApiStatus::ERR_NO_PERMISSION[1];
$result->data = $wpuid;
echo_json($result);
exit;
}
}
}