예제 #1
0
            $data['allow_create_new_comuser'] = true;
            // явно разрешить регистрацию
            $data['die'] = false;
            // получаем результат в случае ошибки
            $data['password'] = $vreg_password;
            $data['comusers_nik'] = $vreg_nik;
            $data['comusers_url'] = $vreg_url;
            $data['email'] = $vreg_email;
            if (isset($post['freg_redirect_url'])) {
                $data['redirect'] = $post['freg_redirect_url'];
            } else {
                $data['redirect'] = getinfo('siteurl') . 'registration';
            }
            // функция сама средиректит куда нужно
            // из-за этого форма ниже не будет отображена в случае успеха
            $res = mso_comuser_auth($data);
            // если ошибка, то выводим сообщение
            echo '<div class="mso-message-alert">' . $res . '</div>';
        }
    }
    // форма регистрации
    $action = getinfo('siteurl') . 'registration';
    if ($rules = mso_get_option('rules_site', 'general', '')) {
        $rules = ' (<a href="' . $rules . '" target="_blank">' . tf('Правила сайта') . '</a>)';
    } else {
        $rules = '';
    }
    eval(mso_tmpl_ts('type/registration/units/registration-tmpl.php'));
}
echo NR . '</div><!-- class="mso-type-loginform" -->' . NR;
if ($fn = mso_find_ts_file('main/main-end.php')) {
예제 #2
0
파일: comments.php 프로젝트: Kmartynov/cms
function mso_comuser_lost($args = array())
{
    global $MSO;
    if (!isset($args['css_ok'])) {
        $args['css_ok'] = 'comment-ok';
    }
    if (!isset($args['css_error'])) {
        $args['css_error'] = 'comment-error';
    }
    // если нет опции password_recovery, значит восстанавливаем с учетом номера комюзера во втором сегмента адреса
    // если опция есть, значит восстанавливаем без учета id комюзера
    if (!isset($args['password_recovery'])) {
        $password_recovery = false;
    } else {
        $password_recovery = true;
    }
    # id комюзера, который в сессии - какой комюзер
    # если комюзер залогинен, то будет $id_session
    # если нет, то залогиненности нет
    if (isset($MSO->data['session']['comuser']) and $MSO->data['session']['comuser']) {
        $id_session = $MSO->data['session']['comuser']['comusers_id'];
    } else {
        $id_session = false;
    }
    if ($post = mso_check_post(array('f_session_id', 'f_submit', 'f_comusers_email'))) {
        # защита рефера
        mso_checkreferer();
        # защита сессии - если не нужно закомментировать строчку!
        if ($MSO->data['session']['session_id'] != $post['f_session_id']) {
            mso_redirect();
        }
        if (!$password_recovery) {
            // получаем номер юзера id из f_submit[]
            $id = (int) mso_array_get_key($post['f_submit']);
            if (!$id) {
                return '<div class="' . $args['css_error'] . '">' . tf('Ошибочный номер пользователя') . '!</div>';
            }
            # проверяем id в сессии с сабмитом
            if ($id_session and $id != $id_session) {
                return '<div class="' . $args['css_error'] . '">' . tf('Ошибочный номер пользователя2') . '</div>';
            }
        }
        $comusers_email = trim($post['f_comusers_email']);
        if (!$comusers_email) {
            return '<div class="' . $args['css_error'] . '">' . tf('Нужно указать email') . '</div>';
        }
        if (!mso_valid_email($comusers_email)) {
            return '<div class="' . $args['css_error'] . '">' . tf('Ошибочный email') . '</div>';
        }
        $CI =& get_instance();
        // проверим есть ли вообще такой юзер
        $CI->db->select('comusers_id');
        if (!$password_recovery) {
            $CI->db->where('comusers_id', $id);
        }
        // если явно указан id, то ищем по нему
        $CI->db->where('comusers_email', $comusers_email);
        $query = $CI->db->get('comusers');
        if ($query->num_rows() == 0) {
            // нет такого комментатора
            return '<div class="' . $args['css_error'] . '">' . tf('Неверный email или номер пользователя') . '!</div>';
        }
        if ($password_recovery) {
            // получим id этого комюзера
            $res = $query->result_array();
            $id = $res[0]['comusers_id'];
        }
        $comusers_new_password = trim($post['f_comusers_password']);
        $comusers_activate_key = trim($post['f_comusers_activate_key']);
        if ($comusers_email and !$comusers_activate_key and !$comusers_new_password) {
            // проверим есть ли активация
            $CI->db->select('comusers_id, comusers_activate_key');
            $CI->db->where('comusers_id', $id);
            $CI->db->where('comusers_activate_string=comusers_activate_key', '', false);
            $CI->db->where('comusers_email', $comusers_email);
            $CI->db->limit(1);
            $query = $CI->db->get('comusers');
            if ($query->num_rows() > 0) {
                $comuser = $query->result_array();
                // данные комюзера
                mso_email_message_new_comuser($id, array('comusers_email' => $comusers_email, 'comusers_activate_key' => $comuser[0]['comusers_activate_key']));
                return '<div class="' . $args['css_ok'] . '">' . tf('Код активации отправлен на ваш email') . '!</div>';
            } else {
                return '<div class="' . $args['css_error'] . '">' . tf('Данный email не зарегистрирован или не активирован') . '</div>';
            }
        } elseif ($comusers_email and $comusers_new_password and !$comusers_activate_key) {
            return '<div class="' . $args['css_error'] . '">' . tf('Для установки нового пароля нужно заполнить все поля!') . '</div>';
        } elseif ($comusers_email and !$comusers_new_password and $comusers_activate_key) {
            // указан email и код активации, но не указан новый пароль
            return '<div class="' . $args['css_error'] . '">' . tf('Для установки нового пароля нужно заполнить все поля!') . '</div>';
        }
        // если указано поле активации и новый пароль, то сверяем код активации с базой + email + id и если все верно,
        // то обновляем пароль
        // если же поле активации не указано, то высылаем его на указанный email
        $CI->db->select('comusers_id');
        $CI->db->where('comusers_id', $id);
        $CI->db->where('comusers_activate_key', $comusers_activate_key);
        $CI->db->where('comusers_activate_string', $comusers_activate_key);
        $CI->db->where('comusers_email', $comusers_email);
        $CI->db->limit(1);
        $query = $CI->db->get('comusers');
        if ($query->num_rows() > 0) {
            $CI->db->where('comusers_id', $id);
            $CI->db->where('comusers_email', $comusers_email);
            $res = $CI->db->update('comusers', array('comusers_password' => mso_md5($comusers_new_password))) ? '1' : '0';
            $CI->db->cache_delete_all();
            if ($res) {
                // сразу логиним и редиректим на страницу комюзера
                $data = array('email' => $comusers_email, 'password' => $comusers_new_password, 'redirect' => getinfo('siteurl') . 'users/' . $id, 'allow_create_new_comuser' => false);
                mso_comuser_auth($data);
                exit;
                // return '<div class="' . $args['css_ok']. '">'. t('Новый пароль установлен!'). '</div>';
            } else {
                return '<div class="' . $args['css_error'] . '">' . tf('Ошибка БД при смене пароля...') . '</div>';
            }
        } else {
            return '<div class="' . $args['css_error'] . '">' . tf('Данные указаны неверно!') . '</div>';
        }
    }
}
예제 #3
0
파일: index.php 프로젝트: Kmartynov/cms
function loginza_auth_init($arg = array())
{
    if (mso_segment(1) == 'maxsite-loginza-auth') {
        // тут придет token
        if (!empty($_POST['token'])) {
            // token пришел? делаем редрект на страницу авторизации
            $auth_url = "http://loginza.ru/api/authinfo?token=" . $_POST['token'];
            $profile = loginza_auth_request($auth_url);
            $profile = json_decode($profile);
            if (!is_object($profile) || !empty($profile->error_message) || !empty($profile->error_type)) {
                $res_profile = (array) $profile['error_type'];
                die($res_profile['error_type']);
            }
            $curpage = mso_url_get();
            if ($curpage == getinfo('site_url')) {
                $curpage = false;
            }
            $email = (isset($profile->email) and mso_valid_email($profile->email)) ? $profile->email : null;
            $nick = isset($profile->name->full_name) ? $profile->name->full_name : null;
            if (isset($profile->email) and mso_valid_email($profile->email)) {
                require_once getinfo('common_dir') . 'comments.php';
                mso_comuser_auth(array('email' => $email, 'comusers_nik' => $nick, 'redirect' => $curpage));
                mso_redirect(getinfo('site_url'), true, 301);
            } else {
                // ссылка на главную или на предыдущую
                // pr( $profile );
                $txt = t('Не удалось авторизоваться с помощью выбранного сервиса.<br>Возможно это связано с тем, что в ответ на запрос 
				     сервис не возратил Ваш e-mail') . '<br>';
                $txt .= t('Вернуться на') . ' <a href="' . getinfo('site_url') . $curpage . '">' . t('предыдущую страницу') . '</a><br>';
                $txt .= t('Вернуться на') . ' <a href="' . getinfo('site_url') . '">' . t('главную страницу') . '</a><br>';
                die($txt);
            }
            die;
        }
    }
    return $arg;
}
예제 #4
0
파일: index.php 프로젝트: rb2/MaxSite-CMS
function maxsite_auth_custom($args = array())
{
    if (mso_segment(1) == 'maxsite-auth-form') {
        // здесь формируется форма для отправки запроса
        // данные отправляются POST
        // посетитель должен указать только адрес своего сайта
        // в hidden указываем нужные данные
        $redirect_url = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : getinfo('siteurl');
        echo '<html><head>
		<title>Авторизация</title>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		</head><body>
			<form method="post" action="' . getinfo('site_url') . 'maxsite-auth-form-post">
				<input type="hidden" name="redirect_url" value="' . urlencode($redirect_url) . '">
				Укажите адрес сайта (с http://): <input type="text" name="url" value="" size="80">
				<button type="submit">' . tf('Перейти к сайту') . '</button>
			</form>
		</body></html>';
        die;
        // Форма ОК
    } elseif (mso_segment(1) == 'maxsite-auth-form-post') {
        // здесь происходит приём указанного адреса сайта и редирект на него с нужными данными
        if ($post = mso_check_post(array('redirect_url', 'url'))) {
            $url = mb_strtolower($post['url']);
            $url = trim(str_replace('/', ' ', $url));
            $url = trim(str_replace('  ', ' ', $url));
            $url = trim(str_replace(' ', '/', $url));
            $url = str_replace('http:/', 'http://', $url);
            $url = $url . '/maxsite-auth-receive/' . base64_encode(getinfo('siteurl') . '##' . urldecode($post['redirect_url']) . '##' . substr(mso_md5(getinfo('siteurl')), 1, 5));
            mso_redirect($url, true);
        } else {
            mso_redirect('maxsite-auth-form');
        }
        // ошибочная форма - возвращаемся
    } elseif (mso_segment(1) == 'maxsite-auth-receive') {
        // принимаем входящие данные от другого сайта
        // здесь запрос на авторизацию
        // нужно проверить все входящие данные
        // проверить is_login
        // и сформировать форму с отправкой на входящий_сайт/maxsite-auth-reply
        if (!is_login()) {
            echo '<html><head>
		<title>Авторизация</title>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		</head><body>
			<div class="loginform">' . tf('Для авторизации необходимо войти на сайт') . '<br>';
            mso_login_form(array('login' => tf('Логин:') . ' ', 'password' => tf('Пароль:') . ' ', 'submit' => ''), getinfo('siteurl') . mso_current_url());
            echo '</div></body></html>';
            die;
            // выходим ОК
        } else {
            //проверяем разрешения группы
            if (!mso_check_allow('maxsite_auth_edit')) {
                die(tf('Доступ к авторизации запрещен'));
            }
            $options = mso_get_option('plugin_maxsite_auth', 'plugins', array());
            if (!isset($options['email']) or !$options['email']) {
                die(tf('Не задан ответный email'));
            }
            if (!isset($options['password']) or !$options['password']) {
                die(tf('Не задан ответный пароль'));
            }
            // смотрятся входные get-данные (расшифровка из base64) адрес-сайт1
            $data64 = mso_segment(2);
            if (!$data64) {
                die(tf('Нет данных'));
            }
            // отладка
            //	echo (getinfo('siteurl') . '##'. 'page/about' . '##' . substr(mso_md5(getinfo('siteurl')), 1, 5));
            //	echo '<br>'. base64_encode((getinfo('siteurl') . '##'. 'page/about' . '##' . substr(mso_md5(getinfo('siteurl')), 1, 5)));
            //	echo '<br>';
            // распаковываем данные
            $data = @base64_decode($data64);
            if (!$data) {
                die(tf('Ошибочные данные'));
            }
            //	адрес-сайт1##адрес текущей страницы1##открытый ключ
            $data = explode('##', $data);
            // обработаем предварительно массив
            $data_1 = array();
            foreach ($data as $element) {
                if ($d = trim($element)) {
                    $data_1[] = $d;
                }
            }
            // должно быть 3 элемента
            if (count($data_1) != 3) {
                die(tf('Неверное количество данных'));
            }
            // pr($data_1);
            $data_siteurl = $data_1[0];
            $data_redirect = $data_1[1];
            $data_key = $data_1[2];
            // все проверки пройдены
            // выводим форму с кнопкой Разрешить
            // данные для ответа
            //	- адрес исходный
            //	- адрес ответ - текущий
            //	- адрес текущей страницы1 - редирект
            //	- открытый ключ сайта2
            //	- зашифрованный «email##пароль» на основе открытых ключей сайт1 и сайт2
            $CI =& get_instance();
            $CI->load->library('encrypt');
            // подключим библиотеку для шифрования
            // ключ строится по этому алгоритму
            // он должен быть фиксированным для одного сайта
            $my_key = substr(mso_md5(getinfo('siteurl')), 1, 5);
            // шифруем на основе двух ключей
            $my_email_pass = $CI->encrypt->encode($options['email'] . '##' . $options['password'], $data_key . $my_key);
            $data = getinfo('siteurl') . '##' . $data_siteurl . '##' . $data_redirect . '##' . $my_key . '##' . $my_email_pass;
            // pr($data);
            // pr($CI->encrypt->decode($my_email_pass, $data_key . $my_key));
            echo '<html><head>
		<title>Авторизация</title>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		</head><body>
			<form method="post" action="' . $data_siteurl . 'maxsite-auth-reply">
				<input type="hidden" name="data" value="' . base64_encode($data) . '">
				<button type="submit">' . tf('Подтвердить авторизацию') . '</button>
			</form>
			</body></html>';
            die;
            // выход ОК
        }
    } elseif (mso_segment(1) == 'maxsite-auth-reply') {
        // принимаем данные для авторизации от другого сайта
        // должен быть email и пароль
        // проверяем входящие данные
        // проверяем существаание такого комюзера
        // если его нет, то выполняем авторизацию
        // после выполняем автологин
        // и редиректимся на указанную страницу
        // pr($_POST);
        if ($post = mso_check_post(array('data'))) {
            // проверим referer
            if (!isset($_SERVER['HTTP_REFERER'])) {
                die(t('Ошибочный referer-сайт'));
            }
            $data = @base64_decode($post['data']);
            if (!$data) {
                die(t('Ошибочные данные'));
            }
            // ошибка распаковки
            // pr($data);
            $data = explode('##', $data);
            // обработаем предварительно массив
            $data_1 = array();
            foreach ($data as $element) {
                if ($d = trim($element)) {
                    $data_1[] = $d;
                }
            }
            // должно быть 5 элементов
            if (count($data_1) != 5) {
                die(t('Неверное количество данных'));
            }
            /*
            			$data = getinfo('siteurl') . '##'
            					. $data_siteurl . '##'
            					. $data_redirect . '##'
            					. $my_key . '##'
            					. $my_email_pass;
            */
            // pr($data_1);
            $data_siteurl = $data_1[0];
            // сайт где была сделана авторизация = реферер
            $my_siteurl = $data_1[1];
            // сайт с которого был отправлен запрос на авторизацию - должен быть равен текущему
            $data_redirect = $data_1[2];
            // конечная страница
            $data_key = $data_1[3];
            // открытый ключ сайта-авторизатора
            $data_email_pass = $data_1[4];
            // email и пароль
            if (strpos($_SERVER['HTTP_REFERER'], $data_siteurl) === false) {
                die(t('Ошибочный referer-сайт'));
            }
            if ($my_siteurl != getinfo('siteurl')) {
                die(t('Ошибочный исходный сайт'));
            }
            $CI =& get_instance();
            $CI->load->library('encrypt');
            // подключим библиотеку для шифрования
            // ключ строится по этому алгоритму
            // он должен быть фиксированным для одного сайта
            $my_key = substr(mso_md5(getinfo('siteurl')), 1, 5);
            // шифруем на основе двух ключей
            $my_email_pass = $CI->encrypt->decode($data_email_pass, $my_key . $data_key);
            //_pr($my_email_pass);
            $email_pass = explode('##', $my_email_pass);
            if (count($email_pass) != 2) {
                die(tf('Неверные данные email-пароль'));
            }
            $email = $email_pass[0];
            // email
            $pass = $email_pass[1];
            // пароль
            if (!mso_valid_email($email)) {
                die(t('Неверный email'));
            }
            if (strlen($pass) < 6) {
                die(tf('Короткий пароль'));
            }
            // pr($email . ' ' . $pass);
            require_once getinfo('common_dir') . 'comments.php';
            mso_comuser_auth(array('email' => $email, 'password' => $pass));
            die;
            // выход ОК
        } else {
            die('Ошибочные данные');
        }
        // нет POST
    } else {
        return $args;
    }
}
예제 #5
0
파일: index.php 프로젝트: Kmartynov/cms
function fbauth_init($arg = array())
{
    if (mso_segment(1) == 'maxsite-fbauth') {
        if (!function_exists('curl_init')) {
            die('Не найдено PHP-расширение CURL');
        }
        if (!function_exists('json_decode')) {
            die('Не найдено PHP-расширение JSON');
        }
        $options = mso_get_option('plugin_fbauth', 'plugins', array());
        if (!isset($options['app_id']) or !$options['app_id']) {
            die(t('Не задан app_id'));
        }
        if (!isset($options['app_secret']) or !$options['app_secret']) {
            die(t('Не задан app_secret'));
        }
        $app_id = $options['app_id'];
        $app_secret = $options['app_secret'];
        $my_url = getinfo('site_url') . 'maxsite-fbauth';
        $code = isset($_REQUEST["code"]) ? $_REQUEST["code"] : null;
        if (!isset($code)) {
            $dialog_url = "http://www.facebook.com/dialog/oauth?client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url) . '&scope=email,user_website';
            mso_redirect($dialog_url, true);
        }
        $token_url = "https://graph.facebook.com/oauth/access_token?client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url) . "&client_secret=" . $app_secret . "&code=" . $code;
        $access_token = fbauth_request($token_url);
        $graph_url = "https://graph.facebook.com/me?" . $access_token;
        $user0 = fbauth_request($graph_url);
        if (strpos($user0, '400 Bad Request') !== false) {
            die(t('Ошибка авторизации (400 Bad Request)'));
        } else {
            $user = json_decode($user0);
            if (isset($user->email) and mso_valid_email($user->email)) {
                require_once getinfo('common_dir') . 'comments.php';
                mso_comuser_auth(array('email' => $user->email, 'comusers_nik' => $user->name));
                // echo("Hello " . $user->name);
            } else {
                // ошибочный или отстутсвующий email
                die(t('Не удалось авторизоваться с помощью Facebook. Возможно это связано с тем, что в ответ на запрос сервис не возвратил ваш e-mail'));
            }
            die;
        }
    }
    return $arg;
}