HEX
Server: Apache/2.4.59 (Debian)
System: Linux keymana 4.19.0-21-cloud-amd64 #1 SMP Debian 4.19.249-2 (2022-06-30) x86_64
User: lijunjie (1003)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
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;
        }
    }
}