Личный кабинет на готовом движке
Мои благодарности ds за urfaclient на php, и Kayfolom за интеграцию кабинета в движок joomla, а так же всем участникам форума, кто принимал участие в реализации этих полезных вещей.
Как известно, любую даже самую полезную и функционально законченную вещь, всегда приходиться "дорабатывать напильником" под свои конкретные нужды. Не обошла эта проблема и меня.
Интегрировал кабинет от Kayfolom в джумлу, всё вроде заработало (есть небольшие нотисы, но это поправимо). К сожалению моих знаний (а вернее незнаний ) не хватит для реализации нижеописаных функций (дополнений), поэтому прошу помощи уважаемых форумчан.
Суть проблемы:
Совсем недавно купили UTM. Сейчас всё находится на стадии настройки биллинга, переноса базы клиентов, создании тарифов и т.п.
Из старого биллинга переносим фио, паспорт, адрес, id клиента и т.д.
Так-же переносим IP адрес в сети и МАК-адрес сетевой карты клиента. Не переносим по некоторым соображениям ЛОГИН и ПАРОЛЬ. В новом биллинге (UTM) они будут новые у каждого клиента.
В настоящее время кабинет интеграции с joomla от Kayfolom, сделан таким образом, что у юзера уже есть действующие логин и пароль, и при первичной авторизации на сайте, в базу джумла записывается новый пользователь.
Мне необходимо сделать немного по другому.
У нас в городе две сети, у них разные айпи адреса.
Чужая сеть 192.168.0.0/16 , наша сеть 172.16.0.0/12 . Все айпи адреса в сети статические.
Нужно, чтобы если юзер из чужой сети (192.168.0.0/16 )пытается авторизоваться на сайте, а его данных нет в базе joomla, то его переадресовывало на стандартную страницу регистрации сайта, т.е доступа к личному кабинету UTM он разумеется иметь не будет.
Если пытается залогинитьтся юзер из нашей сети (172.16.0.0/12), то его должно переадресовывать на другую страницу регистрации.
---------------
Суть страницы регистрации для юзеров нашей (172.16.0.0/12 ) сети:
Необходимы следующие поля:
ЛОГИН
ПАРОЛЬ
ПАРОЛЬ (повтор)
IP-АДРЕС - Айпи адрес компьютера (он будет в базе UTM)
МАК-АДРЕС - Мак-адрес сетевой карты юзера (он будет в базе UTM)
Ну и ниже кнопка "ЗАРЕГИСТРИРОВАТЬСЯ".
---------------
Необходимо, чтобы система проверила данные айпи адреса и мак-адреса введённых пользователем, с данными в базе UTM, а так-же чтобы фактический айпи адрес юзера совпадал с айпи адресом в биллинге.
Если все данные совпадают, то происходит заведение пользователя в базе данных joomla, и заведение ЛОГИНА и ПАРОЛЯ в базе UTM.
Всё.
Зарегистрированные на сайте пользователи из чужой сети должны видеть ресурсы созданные на сайте только для зарегистрированных пользователей, наши пользователи должны видеть ещё и личный кабинет UTM.
Как известно, любую даже самую полезную и функционально законченную вещь, всегда приходиться "дорабатывать напильником" под свои конкретные нужды. Не обошла эта проблема и меня.
Интегрировал кабинет от Kayfolom в джумлу, всё вроде заработало (есть небольшие нотисы, но это поправимо). К сожалению моих знаний (а вернее незнаний ) не хватит для реализации нижеописаных функций (дополнений), поэтому прошу помощи уважаемых форумчан.
Суть проблемы:
Совсем недавно купили UTM. Сейчас всё находится на стадии настройки биллинга, переноса базы клиентов, создании тарифов и т.п.
Из старого биллинга переносим фио, паспорт, адрес, id клиента и т.д.
Так-же переносим IP адрес в сети и МАК-адрес сетевой карты клиента. Не переносим по некоторым соображениям ЛОГИН и ПАРОЛЬ. В новом биллинге (UTM) они будут новые у каждого клиента.
В настоящее время кабинет интеграции с joomla от Kayfolom, сделан таким образом, что у юзера уже есть действующие логин и пароль, и при первичной авторизации на сайте, в базу джумла записывается новый пользователь.
Мне необходимо сделать немного по другому.
У нас в городе две сети, у них разные айпи адреса.
Чужая сеть 192.168.0.0/16 , наша сеть 172.16.0.0/12 . Все айпи адреса в сети статические.
Нужно, чтобы если юзер из чужой сети (192.168.0.0/16 )пытается авторизоваться на сайте, а его данных нет в базе joomla, то его переадресовывало на стандартную страницу регистрации сайта, т.е доступа к личному кабинету UTM он разумеется иметь не будет.
Если пытается залогинитьтся юзер из нашей сети (172.16.0.0/12), то его должно переадресовывать на другую страницу регистрации.
---------------
Суть страницы регистрации для юзеров нашей (172.16.0.0/12 ) сети:
Необходимы следующие поля:
ЛОГИН
ПАРОЛЬ
ПАРОЛЬ (повтор)
IP-АДРЕС - Айпи адрес компьютера (он будет в базе UTM)
МАК-АДРЕС - Мак-адрес сетевой карты юзера (он будет в базе UTM)
Ну и ниже кнопка "ЗАРЕГИСТРИРОВАТЬСЯ".
---------------
Необходимо, чтобы система проверила данные айпи адреса и мак-адреса введённых пользователем, с данными в базе UTM, а так-же чтобы фактический айпи адрес юзера совпадал с айпи адресом в биллинге.
Если все данные совпадают, то происходит заведение пользователя в базе данных joomla, и заведение ЛОГИНА и ПАРОЛЯ в базе UTM.
Всё.
Зарегистрированные на сайте пользователи из чужой сети должны видеть ресурсы созданные на сайте только для зарегистрированных пользователей, наши пользователи должны видеть ещё и личный кабинет UTM.
Саморегистрация пользователей в билинге замечательная штука. Все мечтаю реализовать. Но пока больше вопросов чем идей. Благодаря вывернутой наизнанку логике нетапа, ip привязывается не к пользователю, а к услуге передачи IP-трафика. Поэтому саморегистрация становиться нетривиальной задачей с кучей доп. костылей - пользователь должен выбрать сначала тариф, затем выбрать РП, после этого зарегить свой адрес на этот тариф.
А задача описанная zoom - это почти на грани фантастики для билинга - слишком много костылей, и потенциальных дыр в них.
Давно хочу реализовать плюшку подсмотренную у коллег работающих на ланбилинге - новый пользователь, после заключения договора имеет на руках логин и пароль. Далее идет на страницу регистрации компа (тоже самое при смене сетевой карты, компа и прочее), вводит логин и пароль, ему выдается сообщение типа "Ваш компьютер зарегестрирован на вашу учетную запись, перезагрузите его для получения постоянного IP-адреса". После этого можно в ЛК для каждого зарегестрированного IP (или для всех сразу) выбрать тариф.
А задача описанная zoom - это почти на грани фантастики для билинга - слишком много костылей, и потенциальных дыр в них.
Давно хочу реализовать плюшку подсмотренную у коллег работающих на ланбилинге - новый пользователь, после заключения договора имеет на руках логин и пароль. Далее идет на страницу регистрации компа (тоже самое при смене сетевой карты, компа и прочее), вводит логин и пароль, ему выдается сообщение типа "Ваш компьютер зарегестрирован на вашу учетную запись, перезагрузите его для получения постоянного IP-адреса". После этого можно в ЛК для каждого зарегестрированного IP (или для всех сразу) выбрать тариф.
zoom, как я понял вы пытаетесь объеденить информационный сайт с личным кабинетом - лучше этого не делать конечно. Сделайте отдельный сайт для ЛК (с коннектом только по https) , отдельный для всего остального. Логины и пароли билинга тоже не стоит использовать для информационного сайта или форумов - дыр много.
Заведите самостоятельно всех пользователей своей сети сначала в билинге, потом тарифы, потом IP и MAC адреса тоже самостоятельно. И потом уже выдавать пользователям новые логины и пароли каким нибудь способом.
Заведите самостоятельно всех пользователей своей сети сначала в билинге, потом тарифы, потом IP и MAC адреса тоже самостоятельно. И потом уже выдавать пользователям новые логины и пароли каким нибудь способом.
Саморегистрация пользователя у нас реализованна по такому алгоритму:
1. пользователь который хочет зарегестрироваться в системе сначала заполняет форму - логин , е-майл, Ф.И.О. , мак. нажимает кнопку зарегестрировать , при этом данные не заносятся в биллинг а заносятся в промежуточную базу MySQL, по запросу проверяем что такого пользователя нет базе UTM, генерим ему автоматом пароль , генерим MD5 , и на почту которую указал пользователь при регистрации высылаем ему ссылку регистрации. В этой ссылке есть его логин и пароль. Если пользователь не не воспользовался ссылкой в течении 3 дней - удаляем ее из промежуточной базы.
2.Пользователь нажимает на ссылку зарегестрировать - запускается скрипт урфа - где пользователю из пула его дома дается свободный статичкский IP, генерируется связка передачи IP траффика, записываются данные MAC адреса. Единственное что мы не делаем - пользователь не выбирает тариф ( ставим ему автоматом) - но никаких сложностей добавить это поле не вижу.
Для тех у кого есть пустые поля в биллинге - типа ФИО и адрес - при запуске ЛК делаем проверку - хоть одно поле пустое - пользователь попадает на страницу где ему предлагается ввести все личные данные , и нет перехода на другую страницу ЛК ( кнопка далее не активна) - все написанно на PERL если очень надо могу выложить на форум но без комментариев подробных.
1. пользователь который хочет зарегестрироваться в системе сначала заполняет форму - логин , е-майл, Ф.И.О. , мак. нажимает кнопку зарегестрировать , при этом данные не заносятся в биллинг а заносятся в промежуточную базу MySQL, по запросу проверяем что такого пользователя нет базе UTM, генерим ему автоматом пароль , генерим MD5 , и на почту которую указал пользователь при регистрации высылаем ему ссылку регистрации. В этой ссылке есть его логин и пароль. Если пользователь не не воспользовался ссылкой в течении 3 дней - удаляем ее из промежуточной базы.
2.Пользователь нажимает на ссылку зарегестрировать - запускается скрипт урфа - где пользователю из пула его дома дается свободный статичкский IP, генерируется связка передачи IP траффика, записываются данные MAC адреса. Единственное что мы не делаем - пользователь не выбирает тариф ( ставим ему автоматом) - но никаких сложностей добавить это поле не вижу.
Для тех у кого есть пустые поля в биллинге - типа ФИО и адрес - при запуске ЛК делаем проверку - хоть одно поле пустое - пользователь попадает на страницу где ему предлагается ввести все личные данные , и нет перехода на другую страницу ЛК ( кнопка далее не активна) - все написанно на PERL если очень надо могу выложить на форум но без комментариев подробных.
первый скрипт котрый работает с формой заполняемой пользователем и котрый заносит данные в базу мускуля под названием reg_queue
- #!/usr/bin/perl
use CGI;
use CGI::FastTemplate;
use Digest::MD5 qw(md5_hex);
use Mail::Sender;
use MODULS::Auth;
use MODULS::URFA::Tools;
use MODULS::URFA;
use MODULS::UTF;
use MODULS::UTM::users;
use MODULS::MY::reg_queue;
use AGAVA::MathCaptcha;
use strict;
my $q = new CGI;
my $tpl = CGI::FastTemplate->new('/usr/home/www/you.domainname.ru/templates');
my $error;
if ( $q->param('action') eq 'add_user' )
{
if ( !$q->param('login') || !$q->param('mac') || !$q->param('mail') )
{ $error = 'Заполнены не все поля' }
if ( !$error && (length($q->param('login'))<6) )
{ $error = 'Длина логина менее 6 знаков' };
if ( !$error && ($q->param('login') !~ /^[0-9A-Za-z]+$/) )
{ $error = 'Недопустимые символы в логине. Вы можете использовать только символы латинского алфавита и цифры' };
if ( !$error && (MODULS::UTM::users->retrieve(login=>$q->param('login'), is_deleted=>0)||MODULS::MY::reg_queue->retrieve(login=>$q->param('login'))) )
{ $error = 'Пользователь с таким логином уже зарегистрирован в системе. Выберите другой логин' };
if ( !$error && $q->param('mail') !~ /[\w\d\_\.]+\@[\w\d\_\.]+/ )
{ $error = 'Некорректный E-Mail' };
if ( !$error && AGAVA::MathCaptcha->check($q->param('timestamp'), $ENV{'REMOTE_HOST'}, $q->param('code')) )
{ $error = 'Неверный код подтверждения' };
if ( !$error && ($q->param('mac') !~ /[0-9A-Fa-f]{2}\:[0-9A-Fa-f]{2}\:[0-9A-Fa-f]{2}\:[0-9A-Fa-f]{2}\:[0-9A-Fa-f]{2}\:[0-9A-Fa-f]{2}/) )
{ $error = 'MAC-адрес указан некорректно' }
if ( !$error )
{
my $password = `/usr/local/bin/pwgen -anc 8`;
chomp $password;
my $user = MODULS::MY::reg_queue->insert
({
activated => '0',
login => $q->param('login'),
password => $password,
mac => lc($q->param('mac')),
## username => $q->param('name'),
## location => $q->param('address'),
email => $q->param('mail'),
cdate => $q->param('timestamp'),
hash => md5_hex($q->param('login').$password),
});
if ( $user )
{
my $mail = (new Mail::Sender)->MailMsg
({
smtp => 'localhost',
from => '"you name" <hostmaster@you.domanename.ru>',
replyto => '"you name" <support@you.domainname.ru>',
subject => 'Account activation',
charset => 'windows-1251',
to => '"'.($user->username).'" <'.($user->email).'>',
bcc => 'mail_manager@you.domainname.ru',
msg => "Здравствуйте!\nВы были успешно зарегистрированы в системе!\n"
. "Ваши регистрационные данные:\n---\n"
. "Логин: ".$user->login
. "\nПароль: ".$user->password
# . "\nИмя пользователя: ".$user->user_name
. "\n---\n\n"
. "Для продолжения работы Вам необходимо активировать Вашу учетную запись.\n"
. "Для активации Вам нужно просто перейти по ссылке: https://you.domanename.ru/cabinet/accou ... user->hash
. "\n\nБудьте внимательны - ссылка действительна в течение 7 (семи) дней с момента регистрации!"
. "\n В случае не поступления платежа в течении месяца Ваша подписка будет деактивирована!\n"
. "
. "\n\n--\nС уважением, компания ISP"
. "\n Данное сообщение сформированно автоматически. Адрес электронной почты, с которого оно отправлено не проверяется."
. "
. "\n Все вопросы отправляйте в службу технической поддержки .",
});
$error = 'Вы успешно зарегистрированы в системе!<br/> Для продолжения работы Вам необходимо активировать ваш аккаунт. Ссылка для активации находится в письме, которое отправлено вам на ящик '.$user->email;
}
}
}
###############################################
my $captcha = new AGAVA::MathCaptcha;
$captcha->clean;
print $q->header(-type=>'text/html',-charset=>'utf-8');
$tpl->define('TPL'=>'add_user_full.tpl');
$tpl->assign
(
COMPANY => '',
CAPTCHA => '<img src="/captcha/'.$captcha->save.'">',
CAPTCHA_HASH=> $captcha->html,
CAPTCHA_TIME=> '<input type="hidden" name="timestamp" value="'.$captcha->time.'">',
TITLE => 'Личный кабинет',
SUBTITLE => 'регистрация нового пользователя',
FOOTER => 'you company name © 2008',
# CUSTOMER => $session->fullname||'Имя клиента неизвестно',
NOTE => $error||'Уважаемые абоненты! В настоящее время личный кабинет находится в стадии разработки. Мы приносим вам свои извинения за доставляенные неудобства',
IP => $ENV{'REMOTE_ADDR'},
# FULLNAME => $session->fullname,
# EMAIL => MODULS::URFA::Tools->get_user($session->uid)->{email},
REDIRECT => '/cabinet/userinfo',
);
$tpl->parse('RES'=>'TPL');
#$tpl->print
print MODULS::UTF->_encode(${$tpl->fetch('RES')});
и второй для записи в базу мускуля UTM5
#/usr/bin/perl
use CGI;
use CGI::Cookie;
use MODULS::MY::reg_queue;
use MODULS::URFA;
use MODULS::URFA::Tools;
use MODULS::UTM::users;
use MODULS::MY::Session;
use MODULS::UTF;
use MODULS::Encapsulator;
use AGAVA::MathCaptcha;
use Digest::MD5;
my $q = new CGI;
if ( $q->param('action') eq 'activate' )
{
my $req = MODULS::MY::reg_queue->retrieve( id => $q->param('request'), hash => $q->param('key'), activated => '0' );
if ( $req )
{
my $u = MODULS::URFA->new();
my $next_ip = MODULS::URFA::Tools->get_free_ip(house_id=>30);
if ( !$next_ip || ($next_ip eq '0.0.0.0') )
{
print $q->header('text/plain');
print 'some error, contact with hostmaster@xxx.xx for solving this problem';
exit 0;
};
$u->prepare
(
a => 'add_user_full',
login => $req->login,
password => $req->password,
## full_name => '\''.$req->username.'\'',
## user_id => ''
email => $req->email,
iptraffic_login => $req->login,
iptraffic_password => $req->password,
mac => $req->mac,
house_id => '30',
## act_address => $req->location,
ip_address => $next_ip,
discount_period_id => MODULS::URFA::Tools->get_discount_period(static_id=>2),
);
# print $u->{cmd};
# exit 0;
if ( $u->execute )
{
my $enc = MODULS::Encapsulator->new( ssl => 1 );
my $user = MODULS::UTM::users->retrieve( login => $req->login, password => $req->password, is_deleted => 0 );
$enc->add( ip => $next_ip, mac => $req->mac );
$req->activated(1);
$req->update;
my $sid = Digest::MD5::md5_hex($user->id.$user->login.time());
my $session = MODULS::MY::Session->insert
({
sid => $sid,
login => $user->login,
password => $user->password,
fullname => $user->full_name,
uid => $user->id,
account => $user->basic_account,
touch => time(),
});
if ( $session )
{
print $q->redirect
(
-uri => '/cabinet/userinfo',
-status => '302',
-cookie => CGI::Cookie->new
(
-name => 'sid',
-value => $sid,
-domain => 'you.domananame.ru',
-path => '/',
-secure => 1,
-expires=> '+1M',
),
);
exit 0;
};
}
}
else
{
print $q->header('text/plain');
print 'Your request not found in queue or has been activated!';
exit 0;
}
}
Всё гораздо проще. Айпи абоненту забивается в базу 1 раз и навсегда, в дополнителные параметры (user_additional_params). И даные по айпишке берутся из этой таблицы. Мак-адрес так-же. Правда он может меняться, в случае смены пользователем сетевой карты.Kayfolom писал(а):Саморегистрация пользователей в билинге замечательная штука. Все мечтаю реализовать. Но пока больше вопросов чем идей. Благодаря вывернутой наизнанку логике нетапа, ip привязывается не к пользователю, а к услуге передачи IP-трафика. Поэтому саморегистрация становиться нетривиальной задачей с кучей доп. костылей - пользователь должен выбрать сначала тариф, затем выбрать РП, после этого зарегить свой адрес на этот тариф.
Из этой же таблицы айпи, мак, айпи коммутатора, порт и т.д. выдёргивает данные внешний скрипт, для байдинга на коммутаторах длинк. (В случае задолженности абонентки за сеть, блокировать должника).
Да, эти параметры будут импортированы в биллинг заранее.Kayfolom писал(а): Заведите самостоятельно всех пользователей своей сети сначала в билинге, потом тарифы, потом IP и MAC адреса тоже самостоятельно.
А вот как реализовать это? Вариант с е-майл не подходит. Нету в сети внутреннего почтового ящика. Да и половина юзеров понятия не имеет что такое е-майл.Kayfolom писал(а): И потом уже выдавать пользователям новые логины и пароли каким нибудь способом.
Chrst.
А можно тоже личный кабинетик если не жалко на мыло micro-post@ya.ru
А можно тоже личный кабинетик если не жалко на мыло micro-post@ya.ru
и мне если не трудно alex@protvino.net
А можно и нам?Chrst писал(а):Не жалко, ушло.corwin писал(а):2 Chrst.
Поделись если не жалко
corwin<at>amberium.ru
bum@ukrcom.net
Заранее благодарен.
А киньте если не жалко личный кабинет на почту nops@list.ru
Заранее спасибо.
P.S. Попробовал на Joomla 1.5.9 поставить, что-то запарился совсем, ничего не получилось. Может пива мало?!
Заранее спасибо.
P.S. Попробовал на Joomla 1.5.9 поставить, что-то запарился совсем, ничего не получилось. Может пива мало?!