whitelist for submodules

This commit is contained in:
anatoly 2022-01-11 14:22:31 +03:00
parent e558d712cd
commit a1613d9291

View file

@ -3,10 +3,10 @@
/** /**
* Фильтр для проверки авторизации * Фильтр для проверки авторизации
* *
* action: login(password, login) * action: login(password, login)
* action: logout() * action: logout()
*/ */
// В класс авторизации передавать обьект для управления пользователем // В класс авторизации передавать обьект для управления пользователем
// Вынести в отдельный файл // Вынести в отдельный файл
class Filter_Login extends Filter_Filter class Filter_Login extends Filter_Filter
{ {
@ -28,8 +28,8 @@ class Filter_Login extends Filter_Filter
switch ($request->getAction()) { switch ($request->getAction()) {
// Авторизация по постоянному паролю // Авторизация по постоянному паролю
case 'login': case 'login':
$login = $request->get('login'); $login = $request->get('login');
$password = $request->get('password'); $password = $request->get('password');
$result = Filter_UserAccess::getUserByLogin($login); // Поиск по логину $result = Filter_UserAccess::getUserByLogin($login); // Поиск по логину
@ -48,7 +48,7 @@ class Filter_Login extends Filter_Filter
if (md5($password) == $userPassword) { // password if (md5($password) == $userPassword) { // password
$this->enter($db, $result); $this->enter($db, $result);
return true; return true;
} }
} }
$request->set('error', true); $request->set('error', true);
break; break;
@ -57,15 +57,15 @@ class Filter_Login extends Filter_Filter
break; break;
// Вход по временному паролю // Вход по временному паролю
case 'enter': case 'enter':
$login = $request->get('login'); $login = $request->get('login');
$password = $request->get('sid'); $password = $request->get('sid');
$result = Filter_UserAccess::getUserByLogin($login); // Поиск по логину $result = Filter_UserAccess::getUserByLogin($login); // Поиск по логину
if ($result) { if ($result) {
$temp = md5($result->getString('password') . $result->getString('login') . $result->getString('sid')); $temp = md5($result->getString('password') . $result->getString('login') . $result->getString('sid'));
if ($password == $temp) { if ($password == $temp) {
$this->enter($db, $result); $this->enter($db, $result);
return true; return true;
} }
} }
break; break;
default: default:
@ -98,13 +98,13 @@ class Filter_Login extends Filter_Filter
return md5($rawSign); return md5($rawSign);
} }
private function enter($db, $result) private function enter($db, $result)
{ {
$this->user = $result; $this->user = $result;
$random = rand(0, 1024 * 1024); $random = rand(0, 1024 * 1024);
$db->executeQuery("UPDATE users SET sid = '$random' WHERE id_user = " . $result->getInt('id_user')); $db->executeQuery("UPDATE users SET sid = '$random' WHERE id_user = " . $result->getInt('id_user'));
$_SESSION["group"] = $result->getInt('access'); $_SESSION["group"] = $result->getInt('access');
$_SESSION["access"] = $result->getInt('id_user'); // id_user $_SESSION["access"] = $result->getInt('id_user'); // id_user
$_SESSION["random"] = $random; // id_user $_SESSION["random"] = $random; // id_user
$_SESSION[self::SESSION_BROWSER_SIGN_KEYNAME] = $this->getBrowserSign(); $_SESSION[self::SESSION_BROWSER_SIGN_KEYNAME] = $this->getBrowserSign();
@ -131,13 +131,13 @@ class Filter_Login extends Filter_Filter
if ($logged) { if ($logged) {
return json_encode(array('result' => 'ok', 'message' => "Авторизация успешна")); return json_encode(array('result' => 'ok', 'message' => "Авторизация успешна"));
} else { } else {
return json_encode(array('result' => 'fail', 'message' => "Неправильное имя пользователя или пароль")); return json_encode(array('result' => 'fail', 'message' => "Неправильное имя пользователя или пароль"));
} }
} }
if (!$logged) { if (!$logged) {
// Параметры при неправильной авторизации // Параметры при неправильной авторизации
// Действия по умолчанию !! Возможно переход на форму регистрации // Действия по умолчанию !! Возможно переход на форму регистрации
if ($request->get('mode') == 'ajax') { if ($request->get('mode') == 'ajax') {
if (!$this->requestIsWhite($request)) { if (!$this->requestIsWhite($request)) {
return json_encode(array('result' => 'fail', 'message' =>"NOT_AUTHORIZED")); return json_encode(array('result' => 'fail', 'message' =>"NOT_AUTHORIZED"));
@ -157,7 +157,7 @@ class Filter_Login extends Filter_Filter
$text = $this->processor->execute($request); $text = $this->processor->execute($request);
return $text; return $text;
} }
/* --------------------- /* ---------------------
* Проверка на попадание реквеста в белый список * Проверка на попадание реквеста в белый список
*/ */
@ -166,9 +166,11 @@ class Filter_Login extends Filter_Filter
$module = $request->get('module'); $module = $request->get('module');
$action = $request->get('action'); $action = $request->get('action');
$file = Path::join(CMS_PATH, 'modules', $module, 'filters', 'white.json'); $moduleDir = explode('_',$module)[0];
$file = Path::join(CMS_PATH, 'modules', $moduleDir, 'filters', 'white.json');
if (file_exists($file)) { if (file_exists($file)) {
$whiteList = json_decode(file_get_contents($file), true); $whiteList = json_decode(file_get_contents($file), true);
if (in_array($action, $whiteList)) { if (in_array($action, $whiteList)) {
return true; return true;
} }
@ -177,4 +179,3 @@ class Filter_Login extends Filter_Filter
return false; return false;
} }
} }