Личный кабинет на готовом движке

Технические вопросы по UTM 5.0
Закрыто
zoom
Сообщения: 49
Зарегистрирован: Вс мар 22, 2009 15:48

Сообщение zoom »

Мои благодарности 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
Сообщения: 746
Зарегистрирован: Вс фев 12, 2006 17:15

Сообщение Kayfolom »

Саморегистрация пользователей в билинге замечательная штука. Все мечтаю реализовать. Но пока больше вопросов чем идей. Благодаря вывернутой наизнанку логике нетапа, ip привязывается не к пользователю, а к услуге передачи IP-трафика. Поэтому саморегистрация становиться нетривиальной задачей с кучей доп. костылей - пользователь должен выбрать сначала тариф, затем выбрать РП, после этого зарегить свой адрес на этот тариф.

А задача описанная zoom - это почти на грани фантастики для билинга - слишком много костылей, и потенциальных дыр в них.

Давно хочу реализовать плюшку подсмотренную у коллег работающих на ланбилинге - новый пользователь, после заключения договора имеет на руках логин и пароль. Далее идет на страницу регистрации компа (тоже самое при смене сетевой карты, компа и прочее), вводит логин и пароль, ему выдается сообщение типа "Ваш компьютер зарегестрирован на вашу учетную запись, перезагрузите его для получения постоянного IP-адреса". После этого можно в ЛК для каждого зарегестрированного IP (или для всех сразу) выбрать тариф.

Kayfolom
Сообщения: 746
Зарегистрирован: Вс фев 12, 2006 17:15

Сообщение Kayfolom »

zoom, как я понял вы пытаетесь объеденить информационный сайт с личным кабинетом - лучше этого не делать конечно. Сделайте отдельный сайт для ЛК (с коннектом только по https) , отдельный для всего остального. Логины и пароли билинга тоже не стоит использовать для информационного сайта или форумов - дыр много.

Заведите самостоятельно всех пользователей своей сети сначала в билинге, потом тарифы, потом IP и MAC адреса тоже самостоятельно. И потом уже выдавать пользователям новые логины и пароли каким нибудь способом.

Oleg_121
Сообщения: 81
Зарегистрирован: Пн апр 14, 2008 21:09

Сообщение Oleg_121 »

Саморегистрация пользователя у нас реализованна по такому алгоритму:
1. пользователь который хочет зарегестрироваться в системе сначала заполняет форму - логин , е-майл, Ф.И.О. , мак. нажимает кнопку зарегестрировать , при этом данные не заносятся в биллинг а заносятся в промежуточную базу MySQL, по запросу проверяем что такого пользователя нет базе UTM, генерим ему автоматом пароль , генерим MD5 , и на почту которую указал пользователь при регистрации высылаем ему ссылку регистрации. В этой ссылке есть его логин и пароль. Если пользователь не не воспользовался ссылкой в течении 3 дней - удаляем ее из промежуточной базы.
2.Пользователь нажимает на ссылку зарегестрировать - запускается скрипт урфа - где пользователю из пула его дома дается свободный статичкский IP, генерируется связка передачи IP траффика, записываются данные MAC адреса. Единственное что мы не делаем - пользователь не выбирает тариф ( ставим ему автоматом) - но никаких сложностей добавить это поле не вижу.
Для тех у кого есть пустые поля в биллинге - типа ФИО и адрес - при запуске ЛК делаем проверку - хоть одно поле пустое - пользователь попадает на страницу где ему предлагается ввести все личные данные , и нет перехода на другую страницу ЛК ( кнопка далее не активна) - все написанно на PERL если очень надо могу выложить на форум но без комментариев подробных.

Kayfolom
Сообщения: 746
Зарегистрирован: Вс фев 12, 2006 17:15

Сообщение Kayfolom »

Oleg_121, красивая и стройная схема. Не откажусь от исходников :) Правда перлом владею на уровне "Hello world", но код понять смогу. ;) Думаю всем будет интересно.

Oleg_121
Сообщения: 81
Зарегистрирован: Пн апр 14, 2008 21:09

Сообщение Oleg_121 »

первый скрипт котрый работает с формой заполняемой пользователем и котрый заносит данные в базу мускуля под названием 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 &copy; 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')});

Oleg_121
Сообщения: 81
Зарегистрирован: Пн апр 14, 2008 21:09

Сообщение Oleg_121 »

и второй для записи в базу мускуля 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;
    }
    }

zoom
Сообщения: 49
Зарегистрирован: Вс мар 22, 2009 15:48

Сообщение zoom »

Kayfolom писал(а):Саморегистрация пользователей в билинге замечательная штука. Все мечтаю реализовать. Но пока больше вопросов чем идей. Благодаря вывернутой наизнанку логике нетапа, ip привязывается не к пользователю, а к услуге передачи IP-трафика. Поэтому саморегистрация становиться нетривиальной задачей с кучей доп. костылей - пользователь должен выбрать сначала тариф, затем выбрать РП, после этого зарегить свой адрес на этот тариф.
Всё гораздо проще. Айпи абоненту забивается в базу 1 раз и навсегда, в дополнителные параметры (user_additional_params). И даные по айпишке берутся из этой таблицы. Мак-адрес так-же. Правда он может меняться, в случае смены пользователем сетевой карты.

Из этой же таблицы айпи, мак, айпи коммутатора, порт и т.д. выдёргивает данные внешний скрипт, для байдинга на коммутаторах длинк. (В случае задолженности абонентки за сеть, блокировать должника).

Kayfolom писал(а): Заведите самостоятельно всех пользователей своей сети сначала в билинге, потом тарифы, потом IP и MAC адреса тоже самостоятельно.
Да, эти параметры будут импортированы в биллинг заранее.
Kayfolom писал(а): И потом уже выдавать пользователям новые логины и пароли каким нибудь способом.
А вот как реализовать это? Вариант с е-майл не подходит. Нету в сети внутреннего почтового ящика. Да и половина юзеров понятия не имеет что такое е-майл. :)

postfix
Сообщения: 13
Зарегистрирован: Вс мар 15, 2009 11:06

Сообщение postfix »

Chrst.
А можно тоже личный кабинетик если не жалко на мыло micro-post@ya.ru

kirush
Сообщения: 699
Зарегистрирован: Пт фев 04, 2005 13:58

Сообщение kirush »

и мне если не трудно alex@protvino.net

Cop
Сообщения: 1
Зарегистрирован: Ср апр 01, 2009 20:55

Сообщение Cop »

Chrst.
А можно личный кабинетик выложить куданить на файлообменники, а то как-то одни прозьбы чтоб на мыло кидали. Наверно уже надоело рассылать!!! :)

BUM
Сообщения: 1
Зарегистрирован: Пт апр 03, 2009 12:53
Откуда: Kherson, Ua
Контактная информация:

Сообщение BUM »

Chrst писал(а):
corwin писал(а):2 Chrst.
Поделись если не жалко :)
corwin<at>amberium.ru
Не жалко, ушло.
А можно и нам?
bum@ukrcom.net

Заранее благодарен.

Kristian
Сообщения: 95
Зарегистрирован: Ср мар 04, 2009 21:32

Сообщение Kristian »

И мне если не жалко кабинетик посмотреть :)
kristian.boyar{@}gmail.com

Аватара пользователя
nops
Сообщения: 48
Зарегистрирован: Пн фев 09, 2009 13:05

Сообщение nops »

А киньте если не жалко личный кабинет на почту nops@list.ru

Заранее спасибо.

P.S. Попробовал на Joomla 1.5.9 поставить, что-то запарился совсем, ничего не получилось. Может пива мало?!

Cmak
Сообщения: 34
Зарегистрирован: Чт мар 26, 2009 07:43

Сообщение Cmak »

Интересно посмотреть, скинь пожалуйста на sddk[@]sibnet.ru

Закрыто