From 1435e8c8e7eeaeba2d330be261d92d0178ee7def Mon Sep 17 00:00:00 2001 From: Artem Lavrenov Date: Tue, 16 Jun 2020 23:27:55 +0300 Subject: [PATCH] jsmb localhost plugin --- .gitignore | 1 + jsmblhplugin/.jsmblhplugin | 0 jsmblhplugin/_template_localweb.jsmb | 38 ++++++++++++++++++++++++++++ jsmblhplugin/compile_all_jsmblh.bat | 5 ++++ plugin/httpserver_mobile.py | 3 ++- plugin/mbplugin.py | 3 +++ plugin/mts.py | 2 +- plugin/run_webserver.bat | 2 +- readme.md | 18 ++++++++++--- 9 files changed, 65 insertions(+), 7 deletions(-) create mode 100644 jsmblhplugin/.jsmblhplugin create mode 100644 jsmblhplugin/_template_localweb.jsmb create mode 100644 jsmblhplugin/compile_all_jsmblh.bat diff --git a/.gitignore b/.gitignore index 3971141..c488851 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ plugin/personalsetting.py mbplugin*.zip python-3.8.3-embed-win32_TKINTER.zip dllplugin +jsmblhplugin httpserver store log diff --git a/jsmblhplugin/.jsmblhplugin b/jsmblhplugin/.jsmblhplugin new file mode 100644 index 0000000..e69de29 diff --git a/jsmblhplugin/_template_localweb.jsmb b/jsmblhplugin/_template_localweb.jsmb new file mode 100644 index 0000000..216ab4b --- /dev/null +++ b/jsmblhplugin/_template_localweb.jsmb @@ -0,0 +1,38 @@ +// MobileBalance: http://mtsoft.ru/mobilebalance/ +// +// : +// 1. MobileBalance, ": ", . +// 2. "" , . +// +// FullName : {{pluginname}} localhost +// ShortName : {{pluginname}}LH +// Version : 01.06.2020 +// Icon : 789C73F2FDC600016540AC01C40250CCC8C002166F0062616E08166040060D10C9860608058240C6810307803448E43F1831FCFF0FA140102404E2E3007FCE43089CF49933E7A1FC337869A83A5C00009F949135 +// Author : Arty +// Types : Arty +// Descript : web localhost + +// object json +function json(str) { + try { var obj = eval('(' + str + ')'); } + catch(e) { obj = str; } + return obj; +} + +function main(){ + var p = 0; + // + document.location="http://127.0.0.1:8000/getbalance/{{pluginname}}/"+request.loginValue+"/"+request.passwValue+"/"+Date.now(); + if(!external.WaitBrowser) return; + response.pages[p++]=external.source; + + //external.sleep(2000); + + html=document.documentElement.outerHTML; + //external.sleep(2000); + + response = json(document.getElementById("response").innerText); + +}; +main(); + diff --git a/jsmblhplugin/compile_all_jsmblh.bat b/jsmblhplugin/compile_all_jsmblh.bat new file mode 100644 index 0000000..c89e811 --- /dev/null +++ b/jsmblhplugin/compile_all_jsmblh.bat @@ -0,0 +1,5 @@ +@ECHO OFF +%~d0 +cd "%~dp0" + +@..\python\python -c "import os,glob;tmpl=open('_template_localweb.jsmb',encoding='cp1251').read();fl=['p_'+os.path.splitext(os.path.split(fn)[1])[0] for fn in glob.glob('..\\plugin\\*.py') if 'def get_balance(' in open(fn,encoding='utf8').read()];[open(fn+'_localweb.jsmb','w').write(tmpl.replace('{{pluginname}}',fn)) for fn in fl]" diff --git a/plugin/httpserver_mobile.py b/plugin/httpserver_mobile.py index 49bed5f..422b3ff 100644 --- a/plugin/httpserver_mobile.py +++ b/plugin/httpserver_mobile.py @@ -224,6 +224,7 @@ def address_string(self): return str(self.client_address[0]) def log_message(self, format, *args): + args = re.sub('(/.*?/.*?/.*?/)(.*?)(/.*)',r'\1xxxxxxx\3',args[0]),*args[1:] logging.info(f"{self.client_address[0]} - - [self.log_date_time_string()] {format % args}\n") @@ -253,7 +254,7 @@ def simple_app(self,environ, start_response): ct, text = 'text/html',[] fn=environ.get('PATH_INFO', None) _, cmd, *param = fn.split('/') - #print(f'{cmd}, {param}') + print(f'{cmd}, {param}') if cmd.lower() == 'getbalance': ct, text = getbalance(param) # TODO !!! Но правильно все-таки через POST if cmd == '' or cmd == 'report': # report diff --git a/plugin/mbplugin.py b/plugin/mbplugin.py index 4c68290..49d8a3d 100644 --- a/plugin/mbplugin.py +++ b/plugin/mbplugin.py @@ -15,6 +15,9 @@ def result_to_xml(result): result['SMS'] = int(result['SMS']) if 'Min' in result: result['Min'] = int(result['Min']) + for k, v in result.items(): + if type(v) == float: + result[k] = round(v, 2) # Чтобы не было паразитных микрокопеек body = ''.join([f'<{k}>{v}' for k, v in result.items()]) return f'{body}' diff --git a/plugin/mts.py b/plugin/mts.py index d4ecde1..e13a148 100644 --- a/plugin/mts.py +++ b/plugin/mts.py @@ -131,7 +131,7 @@ def get_balance(login, password, storename=None): services.sort(key=lambda i:(-i[1],i[0])) u1 = len([a for a,b in services if b==0 and (a,b)!=('Ежемесячная плата за тариф', 0)]) u2 = len([a for a,b in services if b!=0]) - u2_sum = sum([b for a,b in services if b!=0]) + u2_sum = round(sum([b for a,b in services if b!=0]),2) result['UslugiOn']=f'{u1}/{u2}({u2_sum})' result['UslugiList']='\n'.join([f'{a}\t{b}' for a,b in services]) diff --git a/plugin/run_webserver.bat b/plugin/run_webserver.bat index 25a5245..7d1c516 100644 --- a/plugin/run_webserver.bat +++ b/plugin/run_webserver.bat @@ -1,2 +1,2 @@ @echo off -start "" ..\python\pythonw.exe httpserver_mobile.py \ No newline at end of file +start "" ..\python\pythonw.exe ..\plugin\httpserver_mobile.py \ No newline at end of file diff --git a/readme.md b/readme.md index 4e78b31..26a4866 100644 --- a/readme.md +++ b/readme.md @@ -4,12 +4,13 @@ DLL шлюз дает возможность писать собственные Можно сохранять сессии, т.е. на каждый телефон tele2 у вас будет своя сессия с сохраненными куками. Все собрано таким образом чтобы не оказывать никакого влияния на установленные программы, в т.ч. если установлен python другой версии. -## Установка Вариант 1 Готовый архив (простой) +## Установка +### Установка Вариант 1 Готовый архив (простой) Архив можно найти в [releases](https://github.com/artyl/mbplugin/releases) на github или в форуме на [4pda](https://4pda.ru/forum/index.php?showtopic=985296) посвященном MobileBalance. Архив желательно распаковать в папку, в которой находится MobileBalance (приоритерный вариант), после установки запустить setup_and_check.bat, он пересобирет DLL для плагинов, создаст настроечный файл mbplugin.ini и запустит тестовый плагин p_test1, для проверки, что все установлено правильно. Все настройки теперь сохраняются в файле mbplugin.ini, он создается в папке& где находятся остальные ini файлы mobilebalance, а либо если setup_and_check.bat их не нашел, то в папке mbplugin. -## Установка Вариант 2 Из github +### Установка Вариант 2 Из github Склонировать репозиторий c github ``` git clone @@ -24,7 +25,7 @@ tkinter для python, если нужен ввод капчи для python к После этого все DLL будут находится в папке mbplugin\dllplugin Если есть желание использовать свой питон, тогда можно поменять вызов в mbplugin\plugin\mbplugin.bat -## mbplugin.ini +### mbplugin.ini Если архив был распакован в одну из папок в папке MobileBalance то при первом запуске (setup_and_check.bat) в папке, где находится mobilebalance.exe будет создан mbplugin.ini с дефолтовыми минимальными настройками (по умолдчанию все доп фишки выключены). Если архив распакован не в папку с mobilebalance, то прижелании получить дополнительный функционал необходимо в секции [MobileBalance] path прописать путь в папку с mobilebalance Что можно включить: @@ -33,10 +34,17 @@ createhtmlreport = 1 - после каждого вызова mbplugin созд Местоположение отчета по умолчанию - в папке mbplugin\db\balance.html, если хотите в другое место - меняйте параметр balance_html ## Использование. +Теперь есть два варианта использования dllplugin и jsmblhplugin (jsmb localhost) +### dllplugin +Для использования в MobileBalance подключить нужный dll плагин из папки mbplugin\dllplugin +Вызов плагина осуществляется через вызов DLL, плюс - минимальное участие IE, минус MB не все поля принимает обратно Пути, жестко прописываются в DLL, в готовой сборке они смотрят в C:\mbplugin, если ваша папка отличается от этой, то запустите dllsource\compile_all_p.bat Подключить DLL для нужных провайдеров (Настройки\Плагины\Операторы Добавить и выбрать DLL для нужных операторов) В настройках для соответсвующего телефона выбрать провайдера соответствующей DLL - +### jsmblhplugin +Для использования добавить в автозагрузку mbplugin\plugin\run_webserver.bat и подключить нужный плагин из папки mbplugin\jsmblhplugin +Вызов осуществляется через jsmb плагин, который передает параметры в webserver, который в свою очередь уже вызывает сам плагин. Плюсы - получаем все поля, которые могли использовать в jsmb плагинах, минусы - необходимо запускать webserver, также в этой схеме больше участия IE, и возможно глюков от замусоренного кэша IE будет больше. +! ВАЖНО ! Не забывайте, что для работы jsmblhplugin должен быть запущен web server mbplugin\plugin\run_webserver.bat (при звпущенном webserver появляется иконка в трее) ## На данный момент реализованы плагины: (Источником информации послужили как собственное изучение так и существующие плагины, так что пользуясь случаем хочу выразить благодарность всем авторам leha3d Pasha comprech y-greek и другим, кто тратил свои силы и время на реверс сайтов операторов и разработку) @@ -83,6 +91,8 @@ plugin\test_mbplugin_dll_call.bat test1 123 456 Должен выдать XML с инфо о плагине и XML с балансом При желании так можно проверить любую DLL но учитывая, что они собираются пачкой, то и с остальными все ок. Если возникли ошибки, попробуйте выполнить dllsource\compile_all_p.bat +### Проверка jsmb localhost +Можно открыть нужный плагин из mbplugin\jsmblhplugin в редакторе jsmb плагинов в MobileBalance - Плагины\Операторы\Создать/редактировать плагин. ## Как это работает Mobilebalance вызывает DLL передавая ей логин и пароль через xml строку