ExBB Community » » PHP/Perl » Мост с InstantCMS

Страниц (1): [1]
 

1. variant0 - 13 февраля 2014 — 17:42 - перейти к сообщению
На форуме офсайта поддержки InstantCMS нашел тему о разработке универсального моста для ICMS: http://www.instantcms.ru/forum/thread12458.html
Цитирую топикстартер оттуда:
Цитата:

Написал в один из коллективных блогов, но видать там администратор будет долго еще проверять пост, решил сюда запостить.

Мне на своем проекте понадобилась одновременная регистрация пользователей на суб-проектах и на основном сайте.

структура в целом проекта такая:

site.ru - основной сайт на инстанте
subproect1.site.ru - субпроект №1
subproect2.site.ru - субпроект №2
subproect3.site.ru - субпроект №3
subproect4.site.ru - субпроект №4

При регистрации пользователей на любом из сайтов субпроекта, автоматически создается пользователь в InstantCMS на основном сайте site.ru

Для этого написан был универсальный мост.

Мост представляет из себя всего 1 файл bridge.php, который кладется в корень сайта с instantCMS и позволяет регистрировать пользователей любым сторонним скриптом.
Для этого нужно сделать POST запрос по адресу моста (site.ru/bridge.php). POST-запрос состоит всего из одного поля "regdata", в который должен быть упакован массив с информаций о регистрации, следующим способом:
base64_encode(serialize($data));
Где $data - это массив в формате:
array(
'login' => $login,
'pass' => $pass,
'email' => $email,
'sign' => $sign
);
$sign - это строка с секретным словом, своего рода подпись. Используется для защиты моста от злоумышленников.
Точно такое же значение следует присвоить переменной $sign в файле bridge.php
Значения остальных полей очевидны.

Скрипт моста может выдавать следующие ответы:
error1 - отсутствует $_POST['regdata'] в запросе,
error2 - распакованное содержимое $_POST['regdata'] не является массивом,
error3 - не совпадает секретное слово,
loginIsBusy - пользователь с таким логином уже существует,
error4 - ошибка при занесении пользователя в базу данных,
ok - регистрация прошла успешно.

код файла bridge.php :

CODE:

<?php

$sign = 'secret<#45t@ddSSdfaj5+q-_pass'; // Секретное слово

if(!isset($_POST['regdata'])) die('error1');

$data = @unserialize(base64_decode(trim($_POST['regdata'])));

if(!is_array($data)) die('error2');
if($data['sign'] != $sign) die('error3');

define('PATH', dirname(__FILE__));
define("VALID_CMS", 1);

include(PATH.'/core/cms.php');

$inCore = cmsCore::getInstance();
$inDB = cmsDatabase::getInstance();

$inCore->loadClass('user');
$inCore->loadClass('actions');

$login = $data['login'];
$pass = md5($data['pass']);
$nickname = $data['login'];
$email = $data['email'];
$icq = '';
$birthdate = '1980-01-01';

$sql = "SELECT id, login FROM cms_users WHERE login LIKE '$login' AND (is_deleted = 0)";
$result = $inDB->query($sql) ;
if($inDB->num_rows($result)!=0) die('loginIsBusy');

$sql = "INSERT INTO cms_users (group_id, login, nickname, password, email, icq, regdate, logdate, birthdate, is_locked, is_logged_once, invited_by)
VALUES ('1', '$login', '$nickname', '$pass', '$email', '$icq', NOW(), NOW(), '$birthdate', '0', 0, '0')";
$inDB->query($sql) ;

$new_user_id = dbLastId('cms_users');

//create advanced user profile
if ($new_user_id){

$sql = "INSERT INTO cms_user_profiles (user_id, city, description, showmail, showbirth, showicq, karma, imageurl, allow_who)
VALUES (".$new_user_id.", '', '', '0', '0', '1', '0', '', 'all')";
$inDB->query($sql) ;

$user_array['id'] = $new_user_id;
}
else{
die('error4');
}

// Регистрируем событие
cmsActions::log('add_user', array(
'object' => '',
'user_id' => $new_user_id,
'object_url' => '',
'object_id' => $new_user_id,
'target' => '',
'target_url' => '',
'target_id' => 0,
'description' => ''
));

die('ok');

?>


Совместной регистрации не делали, также как автоматическая регистрация с конкретными движками. У нас на субпроектах просто сайты не на распространенных движках, поэтому не ставилось такой задачи.
Если желаете развития идеи, то пишите свои пожелания, будем реализовывать.


Какие правки нужно сделать в коде ExBB, чтобы пользоваться этим мостом?
И, вообще, ICMS на мой непрофессиональный взгляд подходящий движок для интеграции с ExBB.
Возможно ли совершенствование этого моста, чтобы он работал в обе стороны при регистрации и обеспечивал общую авторизацию?

Яндекс.Метрика   

Powered by ExBB
[Script Execution time: 0.035]     [ ]