Биллинговая система Nodeny
29 Апреля 2024, 06:33:42 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Прекращена поддержка версии Nodeny 49
 
   Начало   Помощь Поиск Войти Регистрация  
Страниц: 1 ... 4 5 [6] 7 8 ... 11
  Печать  
Автор Тема: Анонимный svn репозитарий Nodeny plus  (Прочитано 41456 раз)
Redmen
NoDeny
Ветеран
*

Карма: 62
Offline Offline

Сообщений: 546


Подяку в КАРМУ


Просмотр профиля WWW
« Ответ #75 : 16 Ноября 2012, 14:42:08 »

И самый главный пункт:
6) Перед записью нужно отфильтровать html-спецсимволы в сообщении от клиента иначе решето сделают с nodeny
кажись готово
осталось добавить в ленг файл переменные
и можно в коробку + добавить отображение мсг админам
Код:
#!/usr/bin/perl
# ------------------- NoDeny ------------------
# Copyright (с) Volik Stanislav, 2008..2012
# Created by Redmen
# isq: 355770128
# Read license http://nodeny.com.ua/license.txt
# ---------------------------------------------
use strict;
use web::Pay;

 $cfg::mess_max_mesgs ||= 10;
 $cfg::mess_max_chars ||= 1000;

sub go
{
 my($url,$usr) = @_;
 Doc->template('top_block')->{title} .= '. Mess to admin';
 my $uid = $usr->{id};
#_______forma vvoda mesg_______
    my $tbl2 = tbl->new( -class=>'pretty td_wide' );
    $tbl2->add('', 'll', [ v::input_ta( 'mesg', '', 100, 5 ) ], );
    $tbl2->add('', 'C', [ v::submit('otpravit mesg adminy') ]);
#    $tbl2->ins('big', 'C', 'Message to admins');
    my $value=ses::input('mesg');
    $value =~ s/\n/<br>/g;
    my %p = Db->line("SELECT COUNT(*) AS n FROM pays WHERE mid=? AND category IN(480,481,488,491,492) AND time>(UNIX_TIMESTAMP()-3600*24)", $uid);
    if(%p && $p{n} >= $cfg::mess_max_mesgs)
    {
     ErrorMess("limit mesg > 3 ");
$value='';
    }
    if( length $value>$cfg::mess_max_chars )
    {
ErrorMess("mnogo simvolov");
$value='';
    }
    if( length $value>1 )
    {
my $rows = Pay_to_DB(uid=>$uid, category=>491, reason=>$value);
        $url->redirect( -made=>'Сообщение отправлено администрации' );
#Db->do("INSERT INTO pays SET mid=?, comment=?, category=? ", $uid, $value, 491);
$rows<1 && $url->redirect( -made=>'Сообщение отправлено администрации', -error=>1  );
    }
#_______END forma mesg_______


#_______vivod tbl mesg_______
 my $sql = ["SELECT * FROM pays WHERE mid=? AND category IN(480,481,488,491,492) ORDER BY time DESC", $uid];
 my($sql, $page_buttons, $rows, $db) = Show_navigate_list($sql, ses::input_int('start'), 5, $url);
 my $tbl = tbl->new( -class=>'td_tall td_wide' );
 $tbl->add('head', 'rrcl', '', '');
 while( my %p = $db->line )
 {
    my $client = $p{mid}? url->a($p{mid}, a=>'ajUserInfo', uid=>$p{mid}, -ajax=>1) : '';
    my $decode = Pay::decode(\%p);
    my $creator_id = $p{creator_id};
    my $creator = $p{creator} eq 'admin'? 'Admin: '.Adm->get($creator_id)->login :
                  $p{creator} eq 'user' ? 'User: you' :
                  $p{creator} eq 'other'? 'Other' :
                  $p{creator};

    $tbl->add('*','rrll', [ the_time($p{time}) ], [ $creator ], [ $decode->{for_adm} ],
        [ !!Adm->id && url->a('info', a=>'ajPayInfo', id=>$p{id}, -ajax=>1) ]);
 }
#_______END tbl mesg_________

    Show Center($url->form(act=>'save', $tbl2->show), $page_buttons.$tbl->show.$page_buttons );
}

1;
я бы убрал pay_decode поскольку ето не платёжки + есть отоброжение автора мсг
поправь код если чё заметил а я подготовлю ленг и кфг
« Последнее редактирование: 16 Ноября 2012, 14:49:40 от Redmen » Записан

Приймаю подяку у вигляді карми... та/або грошей Подмигивающий
t.me/MrMethod
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4782



Просмотр профиля
« Ответ #76 : 16 Ноября 2012, 14:57:52 »

Тему надо будет позже разделить.

1) Спецсимволы ты не отфильтровал. Абонент может тебе послать текст "<script ...>".

$value = v::filtr( $value );

превратит символы <,> и & в безопасный вид. А потом уже можно сделать $value =~ s/\n/<br>/g;

2) Исправляю:

my $rows = Pay_to_DB(uid=>$uid, category=>491, reason=>$value);
$rows<1 && $url->redirect( -made=>'Ошибка', -error=>1  );
$url->redirect( -made=>'Сообщение отправлено администрации' );

3) $decode->{for_adm} - это расшифровка для админа, юзерам показывать низя. Поэтому смари кто смотрит статистику, если не админ, то $decode->{for_usr}

   
Записан
Redmen
NoDeny
Ветеран
*

Карма: 62
Offline Offline

Сообщений: 546


Подяку в КАРМУ


Просмотр профиля WWW
« Ответ #77 : 16 Ноября 2012, 15:09:27 »

Тему надо будет позже разделить.
Сделай ветку модули для NoDeny Plus
и всё туда

почти доделал но должен убегать на тренировку
вечером доделаю и отпишусь
« Последнее редактирование: 16 Ноября 2012, 15:11:15 от Redmen » Записан

Приймаю подяку у вигляді карми... та/або грошей Подмигивающий
t.me/MrMethod
Redmen
NoDeny
Ветеран
*

Карма: 62
Offline Offline

Сообщений: 546


Подяку в КАРМУ


Просмотр профиля WWW
« Ответ #78 : 20 Ноября 2012, 19:09:53 »

Нужно доделать клиентский модуль вибора Услуг (тарифов);
заказ следующей услуги
без него оооооооочень сложно
« Последнее редактирование: 20 Ноября 2012, 19:11:42 от Redmen » Записан

Приймаю подяку у вигляді карми... та/або грошей Подмигивающий
t.me/MrMethod
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4782



Просмотр профиля
« Ответ #79 : 21 Ноября 2012, 12:10:45 »

Нужно доделать клиентский модуль вибора Услуг (тарифов);
заказ следующей услуги
без него оооооооочень сложно

Сделал. Будьте внимательны и обновите все новые файлы
Записан
vddav
Старожил
****

Карма: 3
Offline Offline

Сообщений: 251


Просмотр профиля Email
« Ответ #80 : 03 Декабря 2012, 19:42:19 »

сегодня смотрю в ударе - куча обновлений, оч приятно, что работа продвигается) Подмигивающий
Записан
stix
NoDeny
Спец
*

Карма: 72
Offline Offline

Сообщений: 1872


Nodeny Support Team

205539
Просмотр профиля
« Ответ #81 : 08 Декабря 2012, 22:39:08 »

Сейчас перелил большую рабочу базу на новый сервер.
Импортировал в бд bill;
запустил конвертер, ох и долго выполнял запросы.

пробую зайти в статистику, болт.
надо сделать вставку
INSERT INTO config SET `data`="package cfg; $img_dir = ''; 1;", time=1;
ок

появляется приглашение.
зайти под своим логином не могу.

делаю
select id,login,name,passwd from admin;
я есть, какой-то пароль тоже есть

SELECT AES_DECRYPT(passwd,'hardpass3') FROM admin WHERE login='мой логин';
выдает NULL

и да, в sat.cfg я поменял aes key на hardpass3

т.е. вероятней всего есть расхождение AES ключа
выполняю на старой базе, все ок, по ключу происхоит расшифровка.

ALTER TABLE `admin` CHANGE `passwd` `passwd` VARCHAR( 20 ) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL;
видимо как-то не того....

ок, делаю:
update admin set passwd='' where login='мойлогин';

пустило в админку

создаю пароль, проверяю
SELECT AES_DECRYPT(passwd,'hardpass3') FROM admin WHERE login='мой логин';
все ок.

тыкаю в список клиентов
/cgi-bin/stat.pl?a=users

Нет доступа ни к одной группе клиента

ок, прописываю себя по всем группам

запускаю снова Клиенты > Все записи
cgi-bin/stat.pl?a=users&all=1

Выдает:
По фильтру ничего не найдено.

Захожу в настройки групп:
stat.pl?a=op&act=usr_grp
Клиентов в группе показывает цифры

включаю Debug

Код:
Table 'bill.fullusers' doesn't exist 

{
  'sql' => 'SELECT SQL_CALC_FOUND_ROWS u.* FROM fullusers u
 WHERE u.grp IN(13,12,9,4) ORDER BY u.id DESC LIMIT 0,10',
  'param' => []
};
 
 SELECT SQL_CALC_FOUND_ROWS u.* FROM fullusers u
 WHERE u.grp IN(13,12,9,4) ORDER BY u.id DESC LIMIT 0,10
Строк: -1. Время выполнения sql: 0.0010 сек
вот оно чего ругается....

видать дропнуло, да не создало VIEW
DROP VIEW IF EXISTS fullusers;

создаю руками

Код:
CREATE ALGORITHM=MERGE VIEW fullusers AS
    SELECT u.*, t.*,
    ((in1+in2+in3+in4+out1+out2+out3+out4)/1000000) AS traf,
    ((out1+out2+out3+out4)/1000000) AS traf_out,
    ((in1+in2+in3+in4)/1000000) AS traf_in
    FROM users u LEFT JOIN users_trf t ON u.id=t.uid;

полетело, клиенты появились.
Проверя пароли, ни у кого не отображается, видимо все таки с ключем что-то.

Проверяю поля, все ок кроме IP.
"Ошибка получения списка ip адресов."

смотрю debug

Код:
Table 'bill.v_ips' doesn't exist 

{
  'sql' => 'SELECT MAX(last) AS max_last FROM v_ips WHERE uid=? AND auth>0',
  'param' => [
    1378
  ]
};
 
 SELECT MAX(last) AS max_last FROM v_ips WHERE uid='1378' AND auth>0
Строк: -1. Время выполнения sql: 0.0012 сек

ругается на отсутствие еще одной таблицы

снова создаю руками:

Код:
CREATE ALGORITHM=MERGE VIEW v_ips AS
    SELECT
        IF(a.start IS NULL,0,1) AS auth, i.uid, INET_NTOA(i.ip) AS ip, i.ip AS ipn,
        i.type, i.`release`, (a.last -a.start) AS tm_auth, a.start, a.last, a.properties
    FROM ip_pool i
    LEFT JOIN auth_now a ON INET_NTOA(i.ip) = a.ip
    WHERE i.uid<>0;
появляется ip, все ок

смотрю на услуги:
"Произошла временная ошибка. Попробуйте повторить запрос."

ну и снова отсутствие VIEW, создаю традиционным способом

Смотрю на услуги
"Не существует ни одной услуги"
ок, добавляю услугу существую с модулем inet_unlim

назначаю юзеру:
появляется

Код:
Ошибка:
временная ошибка

Если ошибка устойчивая - к администратору (см. Debug)

Код:
Table 'bill.plans2' doesn't exist 

{
  'sql' => 'UPDATE users SET balance=balance+(?) WHERE id=? LIMIT 1',
  'param' => [
    0,
    1396
  ]
};
 
 UPDATE users SET balance=balance+('0') WHERE id='1396' LIMIT 1
Строк: -1. Время выполнения sql: 0.0015 сек
фак, куда же она могла пропасть )

в конвертере
Код:
DROP TABLE `plans2`;


Создаю нового клиента:
cgi-bin/stat.pl?a=user_new

Выдаются мои группы, тут все ок

Дальше:
Произошла временная ошибка. Попробуйте повторить запрос.

смотрю debug
Table 'bill.plans2' doesn't exist
та же картина

смотрю bill.sql который в svn, упоминания там нет.
значит, где-то в бд упоминается )

делаю
Цитировать
SELECT 'bill' AS `Database`, 'все таблицы' AS `Table`, COUNT(*) AS `Found rows`, CONCAT(ROUND(100 / 1 * COUNT(*), 1), '%') AS `Relevance` FROM `bill`.`z2012x12x3` WHERE LOWER(CONVERT(`mid` USING utf8)) LIKE '%plans2%' OR LOWER(CONVERT(`time` USING utf8)) LIKE '%plans2%' OR LOWER(CONVERT(`bytes` USING utf8)) LIKE '%plans2%' OR LOWER(CONVERT(`direction` USING utf8)) LIKE '%plans2%' OR LOWER(CONVERT(`ip` USING utf8)) LIKE '%plans2%' OR LOWER(CONVERT(`port` USING utf8)) LIKE '%plans2%' OR LOWER(CONVERT(`proto` USING utf8)) LIKE '%plans2%' ;
голяк

делаю
grep -lir "plans2" *
тоже пусто

мдэ....
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4782



Просмотр профиля
« Ответ #82 : 09 Декабря 2012, 03:22:10 »

Собсно я и просил:
Протестите кто-нибудь
миграцию.

пробую зайти в статистику, болт.
надо сделать вставку
INSERT INTO config SET `data`="package cfg; $img_dir = ''; 1;", time=1;
Если у тебя последний апдейт svn, а он был уже давно, то там проще:
Код:
     perl install.pl -h
    -a=login -p=pass : создание суперадмина с логином login и паролем pass
    -m : создание пустого конфига
т.е. быстренько в 2 команды создал конфиг и админчега, зашел и поменял себе пароль.


Далее: ошибки таблиц, ошибки таблиц - уже становится понятно, что sql файл выполнился не до конца - надо было посмотреть и сказать мне где возникла проблема. Собственно, зачем цитировать ошибки, который тебе выдает нодени. Он как раз молодец - проинформировал о не существовании половины таблиц.

На plans2 ругается скорее всего из-за того, что на users висит какой-то триггер. Посмотри какие вообще триггеры существуют, может еще нужно удалить. Судя по инсталляции, я все удалил, но может у тебя юзается чей-то модуль, где такой триггер заюзался.

NoDeny недавно поставил 2 раза. Все работает. С мелкими нюансами, но биллинг везде напишет что не так. Все таблицы и триггеры описаны в bill.sql. Ничего дополнительно не требуется.
Записан
stix
NoDeny
Спец
*

Карма: 72
Offline Offline

Сообщений: 1872


Nodeny Support Team

205539
Просмотр профиля
« Ответ #83 : 09 Декабря 2012, 11:04:11 »

Цитировать
Если у тебя последний апдейт svn, а он был уже давно, то там проще:
да, но я же не делал "чистую" инсталляцию, я мигрировал.
т.е. нужно конвертер поправить, в конце воткнуть туда INSERT

Цитировать
Далее: ошибки таблиц, ошибки таблиц - уже становится понятно, что sql файл выполнился не до конца - надо было посмотреть и сказать мне где возникла проблема. Собственно, зачем цитировать ошибки, который тебе выдает нодени. Он как раз молодец - проинформировал о не существовании половины таблиц.
разве детальный отчет это плохо?
Суть в том, что я делал mysql bill < конвертер.txt, т.е. пошаговое выполнение SQL комманд, ошибок не выдало.
Цитировать
На plans2 ругается скорее всего из-за того, что на users висит какой-то триггер. Посмотри какие вообще триггеры существуют, может еще нужно удалить. Судя по инсталляции, я все удалил, но может у тебя юзается чей-то модуль, где такой триггер заюзался.
Да, ты прав, был триггер, который работал с DHCP серверов в связке с тарифами.
он был связан только с RADIUS сервером, получается, что даже простое наличие своих процедур может привести к ошибкам?
Потому я по поиску в mysql сервере его не нашел и через файлы.
Цитировать
NoDeny недавно поставил 2 раза. Все работает. С мелкими нюансами, но биллинг везде напишет что не так. Все таблицы и триггеры описаны в bill.sql. Ничего дополнительно не требуется.
С нуля - да, все вроде ок, но ведь нужно автоматизировать продукт, в том числе и для миграции.
Подавляющее большинство незнает как сделать SELECT из базы, куда им разбираться с VIEW итд

т.е. пока вот вижу такую багу не багу, это наличие своих процедур в бд.
а они должны быть там полюбому, по крайней мере у меня.
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4782



Просмотр профиля
« Ответ #84 : 09 Декабря 2012, 12:05:34 »

Проблема не в существовании процедур - делай их сколько хочешь. А в том, что процедура обращается к несуществующей таблице. Как ни крути - это или неправильно или не имеет смысла.
Записан
stix
NoDeny
Спец
*

Карма: 72
Offline Offline

Сообщений: 1872


Nodeny Support Team

205539
Просмотр профиля
« Ответ #85 : 09 Декабря 2012, 13:32:17 »

ок, ну все равно, получается любая неправильная процедура зацепит весь биллинг?
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4782



Просмотр профиля
« Ответ #86 : 09 Декабря 2012, 14:24:25 »

ок, ну все равно, получается любая неправильная процедура зацепит весь биллинг?
ну так причем здесь биллинг? Попробуй выполнить sql вне биллинга - mysql заблокирует.
Записан
stix
NoDeny
Спец
*

Карма: 72
Offline Offline

Сообщений: 1872


Nodeny Support Team

205539
Просмотр профиля
« Ответ #87 : 09 Декабря 2012, 15:07:18 »

да это понятно, просто имел ввиду то, что если рагульная процедура то все почти фатально.
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4782



Просмотр профиля
« Ответ #88 : 09 Декабря 2012, 15:23:29 »

да это понятно, просто имел ввиду то, что если рагульная процедура то все почти фатально.
эээ, ну так везде собсно, если, скажем в этом форуме в любом js поменять почти любую букву, то ничего работать не будет)
Записан
stix
NoDeny
Спец
*

Карма: 72
Offline Offline

Сообщений: 1872


Nodeny Support Team

205539
Просмотр профиля
« Ответ #89 : 09 Декабря 2012, 16:42:45 »

еще насчет AES, заметил такую фигню, что при дампе и разворачивании дампа, возникают проблемы с паролями.
тут просто  с бэкапа восстанавливаю и такая вот фигня, но не у всех.
причем в поле passwd данные есть, но по ключу - не расшифровываются.
подозреваю, что это mysql как-то преобразовывает спецсимволы

SELECT COUNT(*) FROM users WHERE AES_DECRYPT(passwd,'hardpass3') IS NULL;
103

хотя в бд они есть
Код:
¬—AВЪ?­e2ф2Пэ8Y
« Последнее редактирование: 09 Декабря 2012, 17:30:32 от lavi » Записан
Страниц: 1 ... 4 5 [6] 7 8 ... 11
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.20 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!