Esempio n. 1
0
/**
 * Залогинивает юзера. Возвращает UID юзера. Выставляет куки "автологина".
 * ВНИМАНИЕ! возвращает UID юзера, если находит его. Либо возвращает
 * 	0 - не найден
 *  -1 - аккаунт забанен
 *  -2 - аккаунт неактивирован
 *  -3 - IP не входит в список IP разрешенных пользователем
 *  -4 - требуется 2ой этап авторизации
 * 
 * @param string $login				логин юзера
 * @param string $pwd				пароль
 * @param integer $autologin		флаг "автологина"
 * @return integer					UID юзера
 */
function login($login, $pwd, $autologin = 0, $annoy_check = true)
{
    require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/annoy.php";
    $annoy = new annoy();
    $user = new users();
    if ($annoy_check) {
        if (intval($_SESSION['login_wait_time']) > time()) {
            $redirect_checkpass = true;
        } else {
            // Проверить сколько раз воодился пароль
            if (isset($_SESSION['login_wait_time'])) {
                $annoy->Clear(getRemoteIP());
            }
            $login_count = $annoy->Check(getRemoteIP());
            if ($login_count >= $GLOBALS['max_login_tries']) {
                $_SESSION['login_wait_time'] = time() + $GLOBALS['login_wait_time'] * 60;
                $redirect_checkpass = true;
            }
        }
        if ($redirect_checkpass == true) {
            header("Location: /checkpass.php");
            exit;
        }
    }
    //Получаем логин и проверяем счетчик
    $_uid = $user->getUidByLoginEmailPhone($login);
    if ($_uid > 0 && !$annoy->allowRepeatPass($_uid)) {
        header("Location: /banned.php");
        exit;
    }
    //@todo: нет проверок наличия ключей
    $t_filter_prj = $_SESSION['f_project_filter'];
    $t_filter_frl = $_SESSION['f_freelancers_filter'];
    $t_ref_uri2 = $_SESSION['ref_uri2'];
    $adCatalog = $_SESSION['toppayed_catalog'];
    $adMain = $_SESSION['toppayed_main'];
    $adHead = $_SESSION['toppayed_head'];
    $adText = $_SESSION['toppayed_text'];
    $masssending = $_SESSION['masssending'];
    $newPrjName = $_SESSION['new_project_name'];
    $newPrjCost = $_SESSION['new_project_cost'];
    //Сохраняем значение типа 2хэпапной авторизации перед очисткой сессии
    $_2fa_provider = isset($_SESSION['2fa_provider']) ? $_SESSION['2fa_provider'] : null;
    $_2fa_redirect = isset($_SESSION['2fa_redirect']) ? $_SESSION['2fa_redirect'] : null;
    //Переносим хеши ссылок на уже зафиксированные местки для юзера при выходе/входе
    $_ga_stat_url_hash = isset($_SESSION['ga_stat_url_hash']) ? $_SESSION['ga_stat_url_hash'] : null;
    //Последняя посещенная страница
    $_ref_uri = isset($_SESSION['ref_uri']) ? $_SESSION['ref_uri'] : null;
    $_pda = isset($_SESSION['pda']) ? $_SESSION['pda'] : null;
    $_customer_wizard = isset($_SESSION['customer_wizard']) ? $_SESSION['customer_wizard'] : null;
    session_unset();
    if ($_customer_wizard) {
        $_SESSION['customer_wizard'] = $_customer_wizard;
    }
    if ($_pda) {
        $_SESSION['pda'] = $_pda;
    }
    if ($_ref_uri) {
        $_SESSION['ref_uri'] = $_ref_uri;
    }
    //Воссанавливаем значение хешей ссылок
    if ($_ga_stat_url_hash) {
        $_SESSION['ga_stat_url_hash'] = $_ga_stat_url_hash;
    }
    //Востанавливаем значение 2хэпапной авторизации после очистки сессии
    if ($_2fa_provider !== null) {
        $_SESSION['2fa_provider'] = $_2fa_provider;
    }
    if ($_2fa_redirect !== null) {
        $_SESSION['2fa_redirect'] = $_2fa_redirect;
    }
    //Выключаем проверку 2ого этапа авторизации
    //если это вход из куки или еще откуда (но неявно от пользователя)
    //где мы уже уверены что 2этапа пройдены ранее юзером
    $is_2fa_off = $annoy_check === false;
    //Авторизация
    $id = $user->Auth($login, $pwd, $_SESSION, $is_2fa_off);
    //Считаем и блокируем по количеству неудачных авторизаций
    if (!$id && $_uid > 0) {
        $annoy->wrongRepeatPass($_uid);
    }
    //Успешная авторизация
    if ($id > 0) {
        $annoy->clearRepeatPass($id);
        require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/payed.php";
        $pro_last = payed::ProLast($_SESSION['login']);
        //Покупал ли пользователь ПРО 1 мес и более или тестовый
        if (!is_emp()) {
            $_SESSION['is_was_pro'] = $pro_last ? true : payed::isWasPro($_SESSION['uid']);
        }
        $_SESSION['pro_last'] = $pro_last['is_freezed'] ? false : $pro_last['cnt'];
        if ($_SESSION['pro_last'] && $_SESSION['is_pro_new'] != 't') {
            payed::checkNewPro($id);
        }
        if ($pro_last['freeze_to']) {
            $_SESSION['freeze_from'] = $pro_last['freeze_from'];
            $_SESSION['freeze_to'] = $pro_last['freeze_to'];
            $_SESSION['is_freezed'] = $pro_last['is_freezed'];
            $_SESSION['payed_to'] = $pro_last['cnt'];
        }
        if ($_SESSION['anti_login']) {
            $pro_last = payed::ProLast($_SESSION['anti_login']);
            $_SESSION['anti_pro_last'] = $pro_last['freeze_to'] ? false : $pro_last['cnt'];
        }
        require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/memBuff.php";
        $memBuff = new memBuff();
        $memBuff->delete("msgsCnt{$id}");
        //Получение спецализаций фрилансера
        if (!is_emp()) {
            require_once ABS_PATH . "/classes/freelancer.php";
            $specData = freelancer::getAllSpecAndGroup($id, is_pro());
            $_SESSION['specs'] = $specData['specs'];
            //Список специализаций
            $_SESSION['groups'] = $specData['groups'];
            //Список групп
            //@todo: пока не используется
            //$_SESSION['specs_tree'] = $specData['specs_tree']; //Ввиде древа группа > специализации
        }
        require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/drafts.php";
        $iDraftsCount = drafts::getCount($id);
        $_SESSION['drafts_count'] = $iDraftsCount;
        if ($autologin == 1) {
            setcookie('id', $id, time() + 60 * 60 * 24 * 30, '/', $GLOBALS['domain4cookie'], COOKIE_SECURE, true);
            setcookie('name', $login, time() + 60 * 60 * 24 * 30, '/', $GLOBALS['domain4cookie'], COOKIE_SECURE);
            setcookie('pwd', users::cookieHashPasswd($id), time() + 60 * 60 * 24 * 30, '/', $GLOBALS['domain4cookie'], COOKIE_SECURE, true);
        }
        $_SESSION['f_project_filter'] = $t_filter_prj;
        $_SESSION['f_freelancers_filter'] = $t_filter_frl;
        $_SESSION['ref_uri2'] = $t_ref_uri2;
        $_SESSION['toppayed_catalog'] = $adCatalog;
        $_SESSION['toppayed_main'] = $adMain;
        $_SESSION['toppayed_head'] = $adHead;
        $_SESSION['toppayed_text'] = $adText;
        if ($masssending) {
            $_SESSION['masssending'] = $masssending;
        }
        $_SESSION['new_project_name'] = $newPrjName;
        $_SESSION['new_project_cost'] = $newPrjCost;
        if ($t_filter_prj) {
            require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/projects_filter.php";
            $prj_filter = new projects_filters();
            $prj_filter->SaveFromAnon();
        }
        if ($t_filter_frl) {
            require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/freelancers_filter.php";
            $frl_filter = new freelancers_filters();
            $frl_filter->SaveFromAnon();
        }
        //var_dump($_SESSION['customer_wizard']);
        //var_dump($_SESSION['customer_wizard_filled']);
        //exit;
        //Если заказчик пытается опубликовать проект через мастер то публикуем после авторизации
        if (is_emp() && isset($_SESSION['customer_wizard']['filled'])) {
            require_once ABS_PATH . '/guest/models/GuestActivationModel.php';
            $_SESSION['ref_uri'] = GuestActivationModel::model()->published($id, $_SESSION['email']);
        }
    }
    // случайное число, используемое в get/post запросах для защиты.
    if (!$_SESSION['rand']) {
        $_SESSION['rand'] = csrf_token();
    }
    return $id;
}
Esempio n. 2
0
}
require_once $_SERVER["DOCUMENT_ROOT"] . "/classes/freelancers_filter.php";
?>
var filter_mirror_specs = <?php 
echo freelancers_filters::getMirroredSpecsJsObject($all_mirrored_specs);
?>
;
var filter_bullets = [[],[]];
<?php 
if (sizeof($_SESSION['ph_categories'])) {
    for ($ci = 0; $ci < 2; $ci++) {
        $ph_categories[$ci] = array();
        if (sizeof($_SESSION['ph_categories'][$ci])) {
            foreach ($_SESSION['ph_categories'][$ci] as $fkey => $fvalue) {
                if ($fkey) {
                    if (!freelancers_filters::mirrorExistsInArray($fkey, $ph_categories[$ci], $mirrored_specs)) {
                        if (!$fvalue) {
                            $proftitle = professions::GetGroup($fkey, $error);
                            $proftitle = $proftitle['name'];
                        } else {
                            $proftitle = professions::GetProfName($fkey);
                            $prof_group = professions::GetProfField($fkey, 'prof_group');
                        }
                        ?>
filter_bullets[<?php 
                        echo $fvalue;
                        ?>
][<?php 
                        echo $fkey;
                        ?>
] = new Array();
Esempio n. 3
0
        break;
    default:
        $frm_action = '/freelancers/';
        if (!$prof_id) {
            $prmd = '?';
        } else {
            $prmd = "{$prof_link}/?";
        }
}
//создаем массив специализаций (для фильтра на главной он уже есть в $prfs, для фильтра в проектах фрилансера его нет, поэтому делаем проверку на существование
if (!sizeof($profs)) {
    $all_specs = professions::GetAllProfessions("", 0, 1);
} else {
    $all_specs = $profs;
}
$rank = freelancers_filters::getRankCount($prof_id);
$cost_filter = null;
if ($cFilter && is_array($cFilter) && count($cFilter)) {
    foreach ($cFilter as $i => $c) {
        $cost_filter[$c['type_date']] = $c;
    }
}
$currencies = array('USD', 'Euro', 'Руб', 'FM');
$f_tgl = isset($_COOKIE['f_tgl2']) ? explode(',', $_COOKIE['f_tgl2']) : array();
?>


<script language="javascript" type="text/javascript">


/*