hiddifypanel 3.0.0.dev64__cp310-cp310-manylinux2014_x86_64.whl → 3.0.0.dev66__cp310-cp310-manylinux2014_x86_64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- hiddifypanel/Events.py +27 -4
- hiddifypanel/VERSION +1 -1
- hiddifypanel/VERSION.py +1 -3
- hiddifypanel/__init__.py +7 -3
- hiddifypanel/__main__.py +13 -3
- hiddifypanel/base.py +88 -3
- hiddifypanel/base2.py +40 -3
- hiddifypanel/models/__init__.py +10 -3
- hiddifypanel/models/child.py +26 -4
- hiddifypanel/models/config.py +105 -4
- hiddifypanel/models/config_enum.py +207 -4
- hiddifypanel/models/domain.py +106 -4
- hiddifypanel/models/proxy.py +55 -3
- hiddifypanel/models/usage.py +58 -3
- hiddifypanel/models/user.py +171 -3
- hiddifypanel/panel/__init__.py +7 -4
- hiddifypanel/panel/admin/Actions.py +170 -3
- hiddifypanel/panel/admin/Backup.py +80 -4
- hiddifypanel/panel/admin/ChildAdmin.py +122 -3
- hiddifypanel/panel/admin/ConfigAdmin.py +54 -4
- hiddifypanel/panel/admin/Dashboard.py +70 -4
- hiddifypanel/panel/admin/DomainAdmin.py +195 -4
- hiddifypanel/panel/admin/ProxyAdmin.py +128 -3
- hiddifypanel/panel/admin/QuickSetup.py +127 -4
- hiddifypanel/panel/admin/SettingAdmin.py +224 -3
- hiddifypanel/panel/admin/Terminal.py +51 -4
- hiddifypanel/panel/admin/UserAdmin.py +277 -4
- hiddifypanel/panel/admin/__init__.py +82 -4
- hiddifypanel/panel/admin/adminlte.py +13 -4
- hiddifypanel/panel/admin/commercial_info.py +23 -3
- hiddifypanel/panel/admin/websocket.py +9 -3
- hiddifypanel/panel/admin_2.py +33 -3
- hiddifypanel/panel/asset.py +17 -3
- hiddifypanel/panel/cf_api.py +35 -4
- hiddifypanel/panel/clean_ip.py +125 -3
- hiddifypanel/panel/cli.py +172 -3
- hiddifypanel/panel/commercial/CommercialDashboard.py +59 -4
- hiddifypanel/panel/commercial/CommercialSettings.py +224 -3
- hiddifypanel/panel/commercial/ProxyDetailsAdmin.py +38 -4
- hiddifypanel/panel/commercial/__init__.py +50 -4
- hiddifypanel/panel/commercial/restapi/__init__.py +14 -3
- hiddifypanel/panel/commercial/restapi/tgbot.py +57 -3
- hiddifypanel/panel/commercial/telegrambot/DefaultResponse.py +11 -3
- hiddifypanel/panel/commercial/telegrambot/Usage.py +71 -3
- hiddifypanel/panel/commercial/telegrambot/__init__.py +6 -4
- hiddifypanel/panel/commercial/telegrambot/admin.py +120 -3
- hiddifypanel/panel/commercial/telegrambot/information.py +123 -3
- hiddifypanel/panel/common.py +98 -3
- hiddifypanel/panel/custom_widgets.py +71 -4
- hiddifypanel/panel/database.py +18 -3
- hiddifypanel/panel/hiddify.py +655 -4
- hiddifypanel/panel/hiddify_api.py +70 -3
- hiddifypanel/panel/init_db.py +393 -3
- hiddifypanel/panel/usage.py +85 -3
- hiddifypanel/panel/user/__init__.py +25 -4
- hiddifypanel/panel/user/link_maker.py +416 -3
- hiddifypanel/panel/user/templates/clash_config.yml +1 -0
- hiddifypanel/panel/user/templates/home/multi.html +1 -1
- hiddifypanel/panel/user/user.py +233 -3
- hiddifypanel/static/css/custom.css +6 -0
- hiddifypanel/templates/500.html +1 -1
- hiddifypanel/translations/en/LC_MESSAGES/messages.mo +0 -0
- hiddifypanel/translations/en/LC_MESSAGES/messages.po +194 -190
- hiddifypanel/translations/fa/LC_MESSAGES/messages.mo +0 -0
- hiddifypanel/translations/fa/LC_MESSAGES/messages.po +123 -120
- hiddifypanel/translations/zh/LC_MESSAGES/messages.mo +0 -0
- hiddifypanel/translations/zh/LC_MESSAGES/messages.po +123 -121
- hiddifypanel/xray_api.py +109 -3
- {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev66.dist-info}/METADATA +1 -1
- {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev66.dist-info}/RECORD +74 -76
- hiddifypanel-3.0.0.dev66.dist-info/top_level.txt +1 -0
- hiddifypanel-3.0.0.dev64.dist-info/top_level.txt +0 -2
- pyarmor_runtime_000000/__init__.py +0 -4
- pyarmor_runtime_000000/pyarmor_runtime.so +0 -0
- {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev66.dist-info}/LICENSE +0 -0
- {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev66.dist-info}/WHEEL +0 -0
- {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev66.dist-info}/entry_points.txt +0 -0
hiddifypanel/panel/usage.py
CHANGED
@@ -1,5 +1,87 @@
|
|
1
|
-
|
2
|
-
from
|
3
|
-
__pyarmor__(__name__, __file__, b'PY000000\x00\x03\n\x00o\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\'\x0f\x00\x00\x12\t\x04\x00\xad\x16-+ng>Dg\x8d\x17\x9d\xdb\xfdJ\xb7\x00\x00\x00\x00\x00\x00\x00\x008\xe0\xfa\x03u\xb7\x9f\x81c;R6\xf3^\x84+\x02I\xfb\x0eC\x1b\xf3\xa9\xdc\xe7&\xc3l\xad\x8d\xe9\x83\x94%h&\xa3\xf9Z\'\x8b\xbc\x10D\xc7\x8c\xe7\x80gxI\x0f\xba\x0b\xe7\n\xe9\xdfG\xabE\xf0\xc4\x88o\x04\xff%\xf9\x80\x8a\x1a\xea1\x15>q\xc9\xabO\xbb\xd1\xd3\x11\x8b_\x82\xe4kf\xcb_g#\x01#\xfc\x06\xcb\xf7\xc0,.\xde\x0f\x9a\xf2^A0\x98\x0f\xfa\x99\xff!@R\xe5@\x87\x16)\xbd(\x03F\xa1t\x9fb\xbaEP\x14d\x05\xb89xv\x83\xbe\xaf\x97\xe7\x82\x1fZ-\xc4\xfayN\xe9k\xed\x8b\x84\xa6S\xa1\xe0L\xc6\xf5\\f\x92\x08\x94\x8d\xe2\xc5u\x02\xb1|\x93-\xc48\xe7\x0b\xe7\x98\x141C\x85\x1b@Z\x13\xe4\x1a9\xbc\xd1$\xa8\xad\xbb\x8e\xdf\xe4^g\xdf\xcb\xc2\xd4\xb4\x81\xee\x10\xd9D\xcc\xc6\xd1v\xe9\xa8\xe1\x00?7t\xe2\xe6V\xee8x\n\xeaf?>\x9cG\x1c\x14\x84b\x87+\x83\xaa\xcaE\'r\x1b\xad\xf9WK\xf3\x07\xfc\xd3S\xaa*\x85\xbeS\xda\xdfW\xdd\xa2\x14\xb9]X\xf4\x04\xd8\x8b\xa1@\x88e\xbfl\xa1_\n\x11\x8e\x02\x7f\x02\x18\x82U\xf5x\xbf\xb5\xc7\xb0r\x02\xd181\x87l\xf9O,-\xe5J\x80\x1e\xbdM\xf4\xcdF\x8dk\x12\x86g\xe2\xbf\xd44=\x9c\xa1;\xcd\xed\xbb\xd8\xe7\xbf(,a\x08\xf74\xbe4g\xf7\xc0\xab\x8a9\xa3\xe7s\xbbp<\x1d}w;\x0b*.\xa8\xe5\xd5\x9c\x92\xea\xee\x07\xe6\xd6,\x83O\xb7\xc6\x80\x06:\xa1!\x9f\xe2\xfaBu\x83\xe8I{\xa8\x9a\xb6\xee\xea\xb1\x17\xd9\x94f\x8ak\x8dp\x15\xad\xbc}\x8cR[\xbe\x1c$^\xda\x08Q\xb7\xc5\xf5\xfa\x83\xcee\x1eq&N\xda\xfe\xc3D\xc6\xa0\x9f\xabS\xfe\xdb\x0c\nH\xed\xff\xac\x92k!\xa1\xa6{\xf3\x85\xecO\xb8\x0fh\xf2L\xc2H\xeb\x1a\x89dl\xe5P\xfb\x99\xdbr3\xd5T,\xafo?\x8c\x94^0\x16\xf3\r\xbf\x887I\x12\xc1\t\xe7\xbf\x0e^"Ke\x87\xd2qT\x07\x9d\xa9\x8f\xfa\xeb\xab\xe3E\xc0_Y\xb0_\xd7:G7\xfd\xc8zlV$\xcd+Ve\xca\x8e\x93\x08T\x15\xddY\xcb\x049\x04\x03\xca6\x02\x9a\x87G7\x85\x83\x05\xd5\rgU<.\x9c\x07\x9d\xb7\xd1Ns\xc7f\x1f\r\xad\xd5N\x08\x82\x05\xdf\xe2-m\xf5\x93\xaa2\xae\xb8\x7f\x05\x0bgl/\x14\xeb\x8eo\xcf\xb6\xd1w\xa9\xe8G\xe08\xef\'\xab\xf4\x82\xea\x8a\xfb\xfat\xe8\xd1\xe0<\'\xa5\x02[\x02&*\xd8\xa3\x9e6\x00\xccD\xf7V\xfcC\x9d\x9e\x8e_R\xea+\x9ab\xda\x97z\xd8q.\x14d%\xf5M6\xf5\xc2\x85\xe9\xfeK\x98\xfa\xa9Zb\x87g\xebG\xb3\x04\xb9\xf2\x0e\xbd\xb4\xa5\x8b\xb9I\x97\xf9\xb6\xb21\xc8\xf5\x16\x9cbZ\xc4:\xda\xbah\xe7\xae\x97GgY\xc1\xc1%\xd1\xa7\x87\xbfc\xb4\xd9\xe9\xe0b;\xaf\xb7C\xa1\xf4\xb7l9\x00Y\x7feo\xa2&\xc8Ho\x08\x7fgU\xbaH\x0c\x93\x87\xean\x07\xf0\x08&\xa7N\xcc\'ua\xeb\x05LA\xa0\x1a\x89\xd1kDZ8:+^\xf8\xa8\xcd\x19\x84\xa1\x90\xfc&\xe2\x0b\xcc\xf8\x1f#\x15\n\x1c\xd4I\x85OL\xf7\x8ee\xb3Y\xdc\xb2\x967\x9b\xcd\xea\x03\xf9\x7f8\xb9\xea\xa7\x9a\xf0Ae\xbc\xfe\xe1<\xeb\x92\xbd\x94\xcc\'S%,S\x0e\xde\xee\xeb\xa0\xaa\xa6\xc3"H\x9a\\\n\xe8\x15)n\xe1\xe5\x06\xf1P\xae\xcfL\x1c\x87\x91CpB\xc8`\x82S\xe2Sm\xa5\xaf\x15>\x9a$|6b\x03\x1a\xbdv\xcf\xa0\x9c_\x91\xd0I\xb5E\xd4\xab\x00.\x1f\xee\xa7\xc9\xb4~\x8c{\x06O)\xb5\x13\xc8\x91\x16\x9c\x81\xfaz\xdf\xe3\x16\x12\x89\x04\xd4\xf6;\xefCqf\xd9\r\x99\x80B\x86\xcbE\x03\xe5\x8c\x84\xbf:Mg\xaeVK0\x82C\xfcA0 I\xbaL\xa3\xbb\x9cE\xd4\x1bJcu\x86\x94(\xf7\x8b\x96\xe2=\xe8\x00\xe0\xfe\xc0\x9afSx\xf2\xf0\xf9\x972e_VW\xcb\twCv=\xfb\xc7\x19\xc0|\x95\xdd\xd6\xf3\xe7~\x07\x11\xe44\xac\x115\xa6l\xd7\xce\x151f\x977\xea.\xb1U4C\xe8\x0c\xbd\xaf\xc4\xad`\xfd\x1c\xd6\x11\x97\x8f\xfd\x8f\x85U\xb0@\x1a\xb1t\x8a\x07\x19\xbf\x97\x9bx\x18>\xa1\x0c\x8d\xf2\xd0\x11\x93\xee\x14\xa7\x19iBA\x14d\xfbX\xe7\xf5QFclf\x03Y\x94\x87\xcf#5\xa3-F)[\xbc\x90\x1d\xfa\x95\xec\xaf1\x9e\xaeEB\x965\xce\xbb\xea\x96\xa5\xc7\xbb\xe9A\x9aR\xc9\x0eA\xf3\xf0@{\xcd\xf0\xfek\x98{\x10\xd7\xb4_\xbb\xa5\xe7\xb9\xb5\xaf\x99n\xf8/h\x03\xc0\x92\x96\x990\x1du\x1aj\xd3o\xe7\xfa\x13\x8f\xeb\xb3\xe3\rqhB\xc0\x8a\x7fIS7\x82B09A\xa3\x0e\x90z_\xbd\x9e\xba\xa2rB\xcc\xe9\xae\xb2\xbbR\x84\xb4.\xae\x94\x8d\x1f_6J(@\x04xA\xf2OR,#W\x01\xf7\xf6\xd0.\xac\x82>\xff\x88\x8c\xc8\xfa~w{\x84>\x06\xdc\ng=\xab\xfb\xec7\x93\xe7\xfd,\xcc\xfc>\xe2\xd7\\\xaa`\x93\x0eK\x8b\xb1\x89A\xa3/\xd2\xf4\x89\x13\xc3\xb6\'\x0eP>\x1a!\x1a\xd6bT\xea\x9f-yS\x05\xaeV\xa5\xb9j\xdc\xc7w\xc8\x1b?\xf0-`\xae\xa3\xe9\xd6\xaa\xd6\xdc\xa5j\x10\xc1\x1c&/\xfc\xddd\xe2\xa0wc.\x0b\xf8\xb8\xf8\x94\x1f|\x95\x15&\x96`s\xe8\xae\x94\xf0\x98\xd8"|\xb16\xed\x12\xda\xfa(\x8b\x84\xd6\xb7\x82C\xc2\x9aV\xf0]>\xb0\xdc\r\xab\xce\xf0\x88r\xf3\xcf/\xabx\xdc\xda\xc9\xa1\x84\x9c%\xb8.\xf8\t\xc1}\xfel,JX\x8f\x9fJ\x16k\x87*x\x80\x16P.(\x11\xbe\x02\xe3\xdbUo\xda\x07i\x1e\x0b75\\\x9b\xdf\x85\x15E\xb7,%\xa72\xe8\x17b\xb0c"I>\xacD\xb5\xb5\xea|\x8a\x91\xb7\x97#\x81rJ\xe7\xb7A\xf8\xb26\xcd\xccZ\x04\xe4+\xb2\x96\x12_\xbe\xf9\xed\xba\x94\\\xe9\x8e\xc2&\xed\xdd\xea{%\x02\xed\x1c\xfe\xf4\xa0\x03-\x8f\x9ch\xa6%\xff\xa0\xc97\xb1\x1a\xc2\x9b\x90\xf5\xf9\x80\xf1\xe0\xf4=t\xbba\xde\xae\x873\xdd\xbfr\xaa\xde\x9e\x90Qy\x977\xdddV\x9e\xa2\xe5\xfby\xa0#D[\'\xee}\x89\xad\x1e-\x1ff\xaeL\x13s;\xd8\x1c\xb1}\xaf8\xab}%^\x88\x90\xa51\n\x82\xce\x95k7N\x96\x9ar\xaaTu\xe5K7\xc8\xecO<\xeftNvOrN\x1d1\xd1\xf7v\x89\xd2S\x8d\xd8\\\t\n-*H\x0b=\xe4a\x19\xef\x02\xeb{\xe7T,\r\xf0\x16\xee\xce\x8ezy\xe0\xe2\xf2\xcc*\xee\x07\xe9\x8d\xdd\xe2\x0be\x04\xd0\xff\xe4gk\xda^k\x85\xdcu\'\xd3\x07\x02\xd0\xacf\x9c\xf0\xf2\x9a\xa7H\tN\xd4\x83-o\xec#\xa6\xab\x9f)\xcb\xe9\xe2\xf8KU(\xda\xd1\x90\x02\xcf0\xf1ZyW\x13\xd3<|\x07\xac\r\\\xfb \xc0\xe8,\xde\xee\xc5\x11\xa6\xaa=\x1d\xe4\x0fj\xfe\x16\x89\x84`\xf0\xc9m\x06\xab\xa3\xaa\x06^\x99?O\x85CZ\xa7\xa5?-\xab\xe7\x15\x04Ms\r\xa9\x0c\x16\x18\xa46P\xa5\xd9N\x80N\xe9\xe4\xa6\x16j\x9d\xf4\xcd\xa3\xe1\x83K\xc3\xf9o\xd8.\xbdj\x1f\x01\xcf\x85\x00\xbeD\xbf\xbbD\xd5\x8e\x81\x0f\rH\xe5\x8a(L\xd8\x7f\x80\xc0\xd5c\x00\xda\xd0\x90\xf1t4&\xe2\x99\xd9\xf1\xb2\xbd\x1f\x11=\xc7)\x1d\x0c\xacqi\xccs\xc9b\x1a\x99\xa7\xcdN\xf7\x1a\x11\xd3\x978\xb2\xfb\xf0\xb8\xfc\x80B\x85\xa9\x90\xe1\x15+\x83\x98\xed171\x8d\xa8\xa0\x1el|\x05\xf2=\xf8\xf8\x11]5\x04p\xaf\xee\x05\x13N2\x96\xd7\x9eNr\xa6\x85\xce\x98\x16\xba<\xc5\xc1\x0e\xaf^C\x89S\x1d\x9f\x87\x12\xe7\xfc\x16\xba\x83\x9b:K8\xb7\xcf\xeb\x14\x8e\xe6\xf7\x8e\xbc4i\xc2z\xe1\x1d\xfb.\x81\xcd\xbb\x81\r\x9eN\x9b\xec\xae"\xf2\x84`\x80}\t\x84\xaa7p\x15\xd3\xee\x95R\xc88\x84A\x00\xee\xe7\x82\xba\x91\xcfc\x80\x8e\x07\xb8\xc3I\x06\x14\x88\xec\x94\xc6\xcb\xa7\xc5\x04\xf6\xbe\xc1\xe3\n\x9fM\xd7G5\t\x13\x01(\x9e\xb5\x91\xb3c)\xcc#\x90\x9d\x8aV\x07\xe7\xe4\xee\xfe\x14\x11\xe3:6Y\xf1\xebz/\x85JB\xac\x82\'\xc3T\xe1\x9dG\x02\xb1\xa3nW\xca\x98\xdb\x92PS\xcaE?\xe890\xbaV\x01\xf1n\xe8T5<\xaa\xd2\x06\xa5\x06\x0f\xbf-93\xdb\x15\x91\xdd)VM\xdc&\x7f\xe8\x10+\xd7\xde\xb9Z5?iX\xcb8\xe9\xe7gD\x92(FTBK\x1cI?\x96\xfb\xb2\\\xc4SZ\x81\xe7Ze\x9c:\\\x110\xdd\x04\x1a\xc8\x1a\x93\xf1\x85)\x03MH\x9c\x0e\x83c\xaej\x19xtO$\x11\xdd\xce\x082\xf1\xb3\xb7\xe1H\xc1wW\xe3 5n\xf8\x98FHW5P\x1d|t\xc5W9Q\xba\t\x98\xed\xb0*\xd0\x8e\x9d\xc6\x88O\xce \xd4u\xb9@\xfcEJ\x1f\xc7\xceE\xf6w\x91\x86`"\xa8\xfd\xf5M\xe1g\xf0\xeb~8+;^\x1e\xf4\x8a\x9dA\x14\x80\x90\xbd.\xf0\xd7\xcc4o\xa8\\\x0bFQ%v\xbd\xff\xaa\x80\x9f\xc0\xd0\ry\xa5T\xef\xb7\x0bFz\xaf\xb9\xcf/TL\xb9\xd3\xfd?\xa3iKv\xbd\x8e{M3\x9f\xc1=\xde)\xaenm\xf6\x15\xf0\xc2\xf7\xd0\x06\x18\xad\xbf-H\x85\x08\x01\xe7g\xb4A$\x08<\'\x88\xb6w>\xe1\xf50\x81\xba\x0b\xd0S\xf5LA\xe1\xf5\xf1\x08q\xd7\xff9\xc0I\x06v\xf4\x83\xa1\x16!\xcf\x13\xca!\x84\xb4\xb2\x1d\xe6cm\xfd\xf5\xea\xca\xb5q\xa4\xf5XCYl\xd7\\\x85\xe9t\xac\xe0\xdb\xe1\xc8\xf0\xbfH\xaa\xc8d5\xa2\xc10/*\x85\xa6\x1b\x03\x9fbv\xb7\x8e2\xe3w\xa3C\xb6\x81\xd8\x14R\x94\xf8H+\x03\\e\x14\xe8\x8d|\xb9\xf2\x04=\xef6\xdb\xcb\x1c4\x1a\x91\xc10z\xd3g\xd5\xc0\xfeI?cD\x84\xa70\xd4bu\xbfY\n\xb2Ju\x82\x14\x82\xd8\xbb\xedF\x18\x9e\xbbp\x1f\xb4\x16^\x14\xcf\xe0\x11\xa8o\x18\xab\xec\x0f\xd8X\xa8\x95\xcelGuo\xee_>\xaa:e\xc7KZ\x16OX\xd0\x98\xa6J\xc3S\xe3_fE^\xa4v\xc0\xa1\xb9D\x04\x87\xfc\xd2%E\xf5j\xf0]0\x13K\x06@\xf0\xf6\x05!\xde\x9f\xa4\x85\'\xa3\x8f\x9e\'G\x87\x9a\xde\x12]\xd0\x83=\x9b\x1f\xe9<\xc4\xb8|\xa8E\xf4\xa1P\xf4\xdf\x01\x93\x86\xb7\xc0S&i\x9e\xd7\xfe\x80:e\xa3[\x1bUd\x08\xdbE\xba8\x9a(\x04\xeb5\xa7m`R\xfc\xbf\xe6uxBVe\xc3\xcb*\xfb\x8c/g\xb7\x1e\x07\xc4\xae\x01;\xc6!\x9e\xd4z\xd8\xcb\x0e\xe1\x96\n\x8d\x96]\xe1\x11\xa80\x1cd\x1c\x8e{\xd9E~\nX\x8bmQ>W\x19\x1a\xbf\x9e\x8d\xe9`D\xb4\x91/\xcb\xe6EV\xd7\x1c\x85\x01\x1aY\x89+\xa6#\xd1P\'\x02s\xca\x16\xbd>\x10\x91\xdc\x97\xcc\x19e \xae\x84\xd7P\x0bM\xe4\x99\x94\x8d\xb2\xf15VU{\x9f\x00bc//DX|\x08P\xfa/5\x1d\xa9\xcb\xdbQ\xc9d[^`\xbc\xf1N\x01\xd1\xb1/\xee,*d>)Z?\x96D[\xe7\xa0TZ\xfb\x0f\xa1\x9a\xe0F\xce\x8e\xb2\xfe\x89\xd4\x9d}\xb2\x1dq\x18\xb2\x84\x1f@\x0b\xa8<\x9ar\x19\xa2\xc3\xda\xc6X\xa7\xf8\x15\x16\xf4\x0e\x02\xcdb\x90\xc6v{\x95\xf6b\x9f\xff\x8b\xef\x8b\x9b\x10?9!\xa7 /\x8fg\x9e\xbd)\xd0\xde\x18\xb68|\xc4~\x1cr\xda\xef\xeb\xdd\xfa\xa4\xc3\xc6l\t\x89b5\xe2;\xc5oE\x08e\xf9:O\xf1\xc17@:\xe4\x89\x80\x04\xdc\x899\xfb>\xef\xfe(@-2\\\xff\x1c\xd4\x9e\xd8\xe0\x94\xb1\xbb\x00W)b\xb3\x80\x9cCC\x86:\x92\x7fmW\x01a5\xeal\xfe\xe8[\xf0%j\n<\x0c*\xbb\x99\xce\xec9T@Z\xbcg\x8d\xad\xae\x0fI]]\'\xb4\xa2\x86\t\x0e\x8a\x8cJt[\xd8\xd7\xbe\xd9\xb9\xee\x89\x1b\xf2\xa6\xdb\xac/\x8c&2B0\xc4\xea\xbc@TD^\xc9ze\xb9\xd2\xf9\xfc/n\x06\xad\x12\xfcw\x07\xe0\xe4~\xd3\xb1\xa6\x18{\x80\x00\x84\xd3\x81\xf0\\B\xb9\xaewoj\x90\xa0\xc5\xb5\xa40\xc9?\xaf\x1eJ2V\xca\xb8T\xba\x7f\xd8q\x8e{}\x8fW(>\x87\x9b\xbc\xe9Dg\xe1\xa1&\xf1\x19\x0ca\x13\x80\xda\x0f\x1d\xbe\xc1\xb8*\xb8\x01\xa5\xac\xa4\x10\x8e!\xdb\x80G\xfd:?J\xed\xb9$\xf9Zzb\x06\xca\xc8H\x12J\x82Gl\x97\xbf\x03\xd7\xfdv\x04\x85\xefm\x1e\xc0\xbf\x90\xdc\x13N\xa5{l\xf3\xb8\xb8\x8b\xc5R6\x1b\x17\xd6Q\xf9yK\xd4\xcc\xcb@#\x05\x9e\x96\xc7\xf4\xb3{\xa6\xcd\x01SQq\x12bY\xbc$Or\x06by\xd8\xcc\x8b\xc6\xf2\xaa\xc7K\x10\x1f\xceLe\x9c\xe5\xd0\xa5\xcf\x99|s\xaa\xed&\xa9\xfa\xd6\xa6\xc3\xedO;\x93\x91E\xe1F/\xb3\xed\xdcC\xf46\xe4\xfa\xb1\xb8/7\x19T\'\xd6\xcd\xa3n\xdcu\x146Yw\xd6l\x85\xed\xe7OY\x83\xa6+\xd1/Vr\xb94\xb2V\xb0d\x9f\xaaK&\xbb\xae\xa8S}\xa5\x87\x04\r\x1e\x8c\x0b\xf6\xc2\xafWr\x99f\xc42\xdb\xb5\r\xdd\x83\xc3\x1cL\x11~yg`ZS\xfe\x9b+\x10[.\xdc\xe9\xaf\xc9\xe0!\xf2j\xd31\xe3\x0b\xb5,}\xd3\xa7\xf4\x99\xbc\xc9\xd1`^_\xf0Mqc\x04c(q\xf9\x91\x10\x8b\xa4Kx\xda(\xed\xc0\xc2\xf9|\x9a%pB\x854\xa5\xack\x84\xa5\xcf\xef\x9d\xc4\xe4:>3f\x9ac\xc0\x03l\xe4\x8c,\xfeaJJ\xa3\xf9\x964\xc9\xef\xd7\xee\x19\r\x03\xf7j\xb4\x1f$\xb9\xc6=\xf1\x90\xb8\x9a\xdc.\x1a\x8b\x83T\x08\xdf/\xe3k\xf20d\'C\x8f\xa0\xd59*\xff\xffV\x04\xc0\xec\xf9\xde\xb1\x0bP\x97\xfe\x91K\xe2\xa9_o\'m\x8a\x82\x11\x0c\xd2Ra\x88~_Z\x81l\xf8t\xaa\xf7{\xa8\x93\xa9~\xdb\x94Ir\xa1\xc7M\t;\xb4\xef\x0b\xbfe\x97\x84P\xa5+~#\xa1\xb2Ev\xbch\x97\x05\x882\x01x\x18x\x92(QonW\x80\x93m|\xa7\xb3\xe9\xdd\x1a\x939/\xa8\xeb(*\xede\xfeTd\x19G\xb0\xdb\xacV\x92}\xa3\xdb\x19\x10\x97j\xd1\x11+X3Mz0\xbd\xb6\xe0\xec/\x85\x00\xe03\xf1\x7f\x1c\xfcq\xd8[h\xc2\xd0\x11\x8b!\xeb0\xeeb\x8d\xf7\xa4\xc0\x0e\x03\x9f\xe2&\xb7\x8f\x99\xfb\x83\xd4\xe9\xfd\x9c\x1fy\xd0\xfb\xd3\xc2\x0eJ\xf9\xca\xb0i\xdd P\xcc"O\xd0\x19\xa7\x19\xab\x80\xaa0XH\xb2\xf5\x1bj9\xb5\xe5V\x9d%$w,\xbf\xbb\xb3$o\xfd\x02\xe7yKQb\xf0\x1e\x8d\xbd\x82\xd8\xc8X\x15q\xc2\x1c\xa8\xe8\x0bX\xab\xf3\xa7\x95\xf4#\xd2\xfb\xb6R\xf5\x8b\xa8c\xaa\xfeng\xea\xb3c\xf5\xe8\x87\x07\x0e\xd6E\xbf\x8d\xcf\x19\x06tv\xa8\xcd\xf5\x9c\x1en\xc7_g^*\x9f\xc1\xe9\xc4\xbe\x04v\x04O\xb6\x00\x85\x15\xf77\xb8\xb0\xda\xa47\x8ca\xbco\xa8\xeeg\xc7\xb8\xaf\x89\x8a\xa07\x0e\x87S\xa8Sz\x06\x93\x8c\x9a\x13i\xef\x9c\xc9\x82=\xed\xd4\xcc*\xb5\xa5\xb1\xf8\xb9&R\x84|\xb8<,\xef\r\xa8\x06^\x1d\n\xd3\xdc\xf6\xc8.\xafEsq\xae`\xea\xf2*\xc8#\xa7\x99:\x9f\xce\xcb\xacQ_\xfe\nq\xb2\x19\xb4\xb9\xeb$\xc0\x91c\xb2\x8c!\xb4c4#Kd]"{\xd2#\xcd\x8a\xd98\xe6\xf5\xa0\xa9\x0e\xf7\x96\x8b\xb6\xb7\xb3r\xf3\x97\x1d`V\x13\xbcW|A\xcc')
|
1
|
+
from flask import jsonify,g,url_for,Markup
|
2
|
+
from flask import flash as flask_flash
|
3
|
+
to_gig_d = 1024**3
|
4
|
+
import datetime
|
5
|
+
|
6
|
+
from hiddifypanel.panel.database import db
|
7
|
+
# from hiddifypanel.panel import hiddify_api #hiddify
|
8
|
+
from hiddifypanel.models import *
|
9
|
+
import urllib
|
10
|
+
from flask_babelex import lazy_gettext as _
|
11
|
+
from flask_babelex import gettext as __
|
12
|
+
from hiddifypanel import xray_api
|
13
|
+
from sqlalchemy.orm import Load
|
14
|
+
from sqlalchemy import func
|
15
|
+
|
16
|
+
|
17
|
+
def update_local_usage():
|
18
|
+
|
19
|
+
res={}
|
20
|
+
have_change=False
|
21
|
+
for user in User.query.all():
|
22
|
+
d = xray_api.get_usage(user.uuid,reset=True)
|
23
|
+
res[user]=d
|
24
|
+
|
25
|
+
return add_users_usage(res)
|
26
|
+
|
27
|
+
# return {"status": 'success', "comments":res}
|
28
|
+
|
29
|
+
|
30
|
+
def add_users_usage_uuid(uuids_bytes):
|
31
|
+
users= User.query.filter(User.uuid.in_(keys(uuids)))
|
32
|
+
dbusers_bytes={u:uuids_bytes.get(u.uuid,0) for u in users}
|
33
|
+
add_users_usage(dbusers_bytes)
|
34
|
+
|
35
|
+
def is_already_valid(uuid):
|
36
|
+
xray_api.get_xray_client().add_client(t,f'{uuid}', f'{uuid}@hiddify.com',protocol=protocol,flow='xtls-rprx-vision',alter_id=0,cipher='chacha20_poly1305')
|
37
|
+
|
38
|
+
def add_users_usage(dbusers_bytes):
|
39
|
+
if not hconfig(ConfigEnum.is_parent) and hconfig(ConfigEnum.parent_panel):
|
40
|
+
from hiddifypanel.panel import hiddify_api
|
41
|
+
hiddify_api.add_user_usage_to_parent(dbusers_bytes);
|
42
|
+
res={}
|
43
|
+
have_change=False
|
44
|
+
before_enabled_users=xray_api.get_enabled_users()
|
45
|
+
daily_usage=DailyUsage.query.filter(DailyUsage.date == datetime.date.today()).first()
|
46
|
+
print(daily_usage)
|
47
|
+
if not daily_usage:
|
48
|
+
daily_usage=DailyUsage()
|
49
|
+
db.session.add(daily_usage)
|
50
|
+
|
51
|
+
daily_usage.online=User.query.filter(func.DATE(User.last_online)==datetime.date.today()).count()
|
52
|
+
for user,usage_bytes in dbusers_bytes.items():
|
53
|
+
# user_active_before=is_user_active(user)
|
54
|
+
|
55
|
+
if not user.last_reset_time or user_should_reset(user):
|
56
|
+
user.last_reset_time=datetime.date.today()
|
57
|
+
user.current_usage_GB=0
|
58
|
+
|
59
|
+
if before_enabled_users[user.uuid]==0 and is_user_active(user):
|
60
|
+
xray_api.add_client(user.uuid)
|
61
|
+
have_change=True
|
62
|
+
if type(usage_bytes) !=int or usage_bytes==0:
|
63
|
+
res[user.uuid]="No usage"
|
64
|
+
else:
|
65
|
+
daily_usage.usage+=usage_bytes
|
66
|
+
in_gig=(usage_bytes)/to_gig_d
|
67
|
+
res[user.uuid]=in_gig
|
68
|
+
user.current_usage_GB += in_gig
|
69
|
+
user.last_online=datetime.datetime.now()
|
70
|
+
if user.start_date==None:
|
71
|
+
user.start_date=datetime.date.today()
|
72
|
+
|
73
|
+
if before_enabled_users[user.uuid]==1 and not is_user_active(user):
|
74
|
+
xray_api.remove_client(user.uuid)
|
75
|
+
have_change=True
|
76
|
+
res[user.uuid]=f"{res[user.uuid]} !OUT of USAGE! Client Removed"
|
77
|
+
|
78
|
+
db.session.commit()
|
79
|
+
# if have_change:
|
80
|
+
# hiddify.quick_apply_users()
|
81
|
+
|
82
|
+
return {"status": 'success', "comments":res}
|
83
|
+
|
84
|
+
|
85
|
+
|
4
86
|
#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
|
5
87
|
#Email hiddify@gmail.com for free permium version. Do not crack this cheap product
|
@@ -1,5 +1,26 @@
|
|
1
|
-
|
2
|
-
from
|
3
|
-
|
4
|
-
|
1
|
+
from flask import Blueprint
|
2
|
+
from hiddifypanel.panel.database import db
|
3
|
+
|
4
|
+
# from .resources import ProductItemResource, ProductResource
|
5
|
+
from .user import *
|
6
|
+
bp = Blueprint("user2", __name__, url_prefix="/<proxy_path>/<user_secret>/",template_folder="templates")
|
7
|
+
|
8
|
+
|
9
|
+
from flask import send_from_directory
|
10
|
+
from .user import UserView
|
11
|
+
|
12
|
+
def send_static(path):
|
13
|
+
return send_from_directory('static/assets', path)
|
14
|
+
|
15
|
+
def init_app(app):
|
16
|
+
UserView.register(bp,route_base="/")
|
17
|
+
# bp.add_url_rule("/", view_func=index)
|
18
|
+
# bp.add_url_rule("/<lang>", view_func=index)
|
19
|
+
# bp.add_url_rule("/clash/<meta_or_normal>/<mode>.yml", view_func=clash_config)
|
20
|
+
# bp.add_url_rule("/clash/<mode>.yml", view_func=clash_config)
|
21
|
+
# bp.add_url_rule("/clash/<meta_or_normal>/proxies.yml", view_func=clash_proxies)
|
22
|
+
# bp.add_url_rule("/clash/proxies.yml", view_func=clash_proxies)
|
23
|
+
# bp.add_url_rule("/all.txt", view_func=all_configs)
|
24
|
+
# bp.add_url_rule('/static/<path:path>',view_func=send_static)
|
25
|
+
app.register_blueprint(bp)#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
|
5
26
|
#Email hiddify@gmail.com for free permium version. Do not crack this cheap product
|