function login_form_widget($num = 1) { $out = ''; $widget = 'login_form_widget_' . $num; // имя для опций = виджет + номер $options = mso_get_option($widget, 'plugins', array()); // получаем опции if (is_login()) { $out = '<p><strong>' . t('Привет,') . ' ' . getinfo('users_nik') . '!</strong><br> [<a href="' . getinfo('siteurl') . 'admin">' . t('управление') . '</a>] [<a href="' . getinfo('siteurl') . 'logout' . '">' . t('выйти') . '</a>] </p>'; } elseif ($comuser = is_login_comuser()) { if (!$comuser['comusers_nik']) { $cun = t('Привет!'); } else { $cun = t('Привет,') . ' ' . $comuser['comusers_nik'] . '!'; } $out = '<p><strong>' . $cun . '</strong><br> [<a href="' . getinfo('siteurl') . 'users/' . $comuser['comusers_id'] . '">' . t('своя страница') . '</a>] [<a href="' . getinfo('siteurl') . 'logout' . '">' . t('выйти') . '</a>] </p>'; } else { $after_form = isset($options['after_form']) ? $options['after_form'] : ''; $out = mso_login_form(array('login' => t('Логин (email):') . ' ', 'password' => t('Пароль:') . ' ', 'submit' => '', 'form_end' => $after_form), getinfo('siteurl') . mso_current_url(), false); } if ($out) { if (isset($options['header']) and $options['header']) { $out = mso_get_val('widget_header_start', '<h2 class="box"><span>') . $options['header'] . mso_get_val('widget_header_end', '</span></h2>') . $out; } } return $out; }
} eval(mso_tmpl_ts('type/loginform/units/loginform-user-tmpl.php')); } elseif ($comuser = is_login_comuser()) { if (mso_segment(2) == 'error') { mso_redirect('loginform'); } if (!$comuser['comusers_nik']) { $hello = t('Привет!'); } else { $hello = t('Привет,') . ' ' . $comuser['comusers_nik'] . '!'; } eval(mso_tmpl_ts('type/loginform/units/loginform-comuser-tmpl.php')); } else { $redirect_url = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : getinfo('siteurl'); if (mso_segment(2) == 'error') { eval(mso_tmpl_ts('type/loginform/units/loginform-error.php')); } // если разрешена регистрация, то выведем ссылку if (mso_get_option('allow_comment_comusers', 'general', '1')) { $reg = '<a href="' . getinfo('siteurl') . 'registration">' . tf('Регистрация') . '</a> | '; } else { $reg = ''; } $login_form = mso_login_form(array('login' => tf('Логин'), 'password' => tf('Пароль'), 'submit' => '', 'submit_value' => tf('Войти'), 'form_end' => '<div class="mso-loginform-end">' . $reg . '<a href="' . getinfo('siteurl') . 'password-recovery">' . tf('Забыли пароль?') . '</a> | ' . '<a href="' . getinfo('siteurl') . '">' . tf('Вернуться к сайту') . '</a></div>'), $redirect_url, false); eval(mso_tmpl_ts('type/loginform/units/loginform-tmpl.php')); } echo NR . '</div><!-- class="mso-type-loginform" -->' . NR; if ($fn = mso_find_ts_file('main/main-end.php')) { require $fn; } # end file
<?php if (!defined('BASEPATH')) { exit('No direct script access allowed'); } /** * MaxSite CMS * (c) http://max-3000.com/ */ mso_remove_hook('body_start', 'demo_body_start'); mso_remove_hook('body_end', 'demo_body_end'); require getinfo('template_dir') . 'main-start.php'; echo NR . '<div class="type type_loginform">' . NR; echo '<div class="loginform">'; if (!is_login()) { $redirect_url = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : getinfo('siteurl'); if (mso_segment(2) == 'error') { echo '<p><strong style="color: red;" class="loginform">' . tf('Неверный логин/пароль') . '</strong></p>'; } echo '<p class="header">' . tf('Введите свой логин и пароль') . '</p>'; mso_login_form(array('login' => tf('Логин'), 'password' => tf('Пароль'), 'submit' => '', 'submit_value' => tf('Войти'), 'form_end' => '<div class="form-end"><a href="' . getinfo('siteurl') . '">' . tf('Вернуться к сайту') . '</a></div>'), $redirect_url); } else { echo '<p>' . tf('Привет') . ', ' . getinfo('users_nik') . '! [<a href="' . getinfo('siteurl') . 'logout' . '">' . tf('выйти') . '</a>]</p>'; // mso_redirect(); } echo '</div>'; echo NR . '</div><!-- class="type type_loginform" -->' . NR; require getinfo('template_dir') . 'main-end.php';
echo t('Вернуться к сайту'); ?> "><?php echo getinfo('name_site'); ?> </a></p> <p id="cms_name"><span>M</span>ax<span>S</span>ite CMS</p> <p id="entry"><?php echo t('Для входа в админ-панель введите логин и пароль'); ?> </p> <?php if (!is_login()) { $redirect_url = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : getinfo('siteurl') . mso_current_url(); mso_remove_hook('login_form_auth'); # удалим все хуки для авторизации mso_login_form(array('login' => t('Логин'), 'password' => t('Пароль'), 'submit' => '', 'submit_value' => t('Войти'), 'form_end' => '<br clear="all">'), $redirect_url); } ?> <p id="cms">© <a href="http://max-3000.com/" target="_blank" title="<?php echo t('Система управления сайтом MaxSite CMS'); ?> ">MaxSite CMS</a>, 2008–<?php echo date('Y'); ?> </p> </div> </body> </html>
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; } }