public function checkUserAuth($username, $password, $mac = null, $serial_number = null, OAuthRequest $request) { sleep(1); // anti brute-force delay $user = null; if ($username) { $user = \User::getByLogin($username); } elseif (!$password && $mac) { if ($serial_number) { $_REQUEST['serial_number'] = $serial_number; } if ($request->getVersion()) { $_REQUEST['version'] = $request->getVersion(); } if ($request->getDeviceId2()) { $_REQUEST['device_id2'] = $request->getDeviceId2(); $_REQUEST['signature'] = $request->getSignature(); } // init user as STB \Stb::getInstance()->getProfile(); $user = \User::getByMac(\Stb::getInstance()->mac); } if (!$user) { $user = \User::authorizeFromOss($username, $password, $mac); } if (!$user) { return false; } $possible_user = $user->getProfile(); if (strlen($possible_user['password']) == 32 && md5(md5($password) . $possible_user['id']) == $possible_user['password'] || strlen($possible_user['password']) < 32 && $password == $possible_user['password']) { if (\Config::getSafe('oauth_force_mac_check', false) && \Config::getSafe('oauth_force_serial_number_check', false)) { if ($mac == $possible_user['mac'] && ($serial_number == $possible_user['serial_number'] || $possible_user['serial_number'] == '')) { $verified_user = $possible_user; } } else { if (\Config::getSafe('oauth_force_mac_check', false)) { if ($mac == $possible_user['mac']) { $verified_user = $possible_user; } } else { if (\Config::getSafe('oauth_force_serial_number_check', false)) { if ($serial_number == $possible_user['serial_number'] || $possible_user['serial_number'] == '') { $verified_user = $possible_user; } } else { $verified_user = $possible_user; } } } } if (!empty($verified_user)) { $user->setSerialNumber($serial_number); $user->updateUserInfoFromOSS(); if (\Config::getSafe('bind_stb_auth_and_oauth', true)) { // invalidate stb access_token $user->resetAccessToken(); } } $user->updateIp(); return !empty($verified_user); }