hiddifypanel 3.0.0.dev63__cp38-cp38-manylinux2014_x86_64.whl → 3.0.0.dev65__cp38-cp38-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/templates/config.html +1 -1
- hiddifypanel/panel/admin/templates/proxy.html +2 -2
- 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/home/multi.html +1 -1
- hiddifypanel/panel/user/user.py +233 -3
- hiddifypanel/static/css/custom.css +11 -0
- hiddifypanel/templates/500.html +1 -1
- hiddifypanel/xray_api.py +109 -3
- {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/METADATA +1 -1
- {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/RECORD +69 -71
- hiddifypanel-3.0.0.dev65.dist-info/top_level.txt +1 -0
- hiddifypanel-3.0.0.dev63.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.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/LICENSE +0 -0
- {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/WHEEL +0 -0
- {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.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\x08\x00U\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\x0f\x0f\x00\x00\x12\t\x04\x00\xb1:\xb15\xce\x19\xdc\xad\xb4p\x11\xc8\x93)\r/\x00\x00\x00\x00\x00\x00\x00\x00\xa33\x8c\x8d\xfcy3fo\xa7\x8f\xf8\xf2y\xbcHD\x1f~\xc0O\x11\x0f:\xe0\xfc\xd3\xc7\xd0\xf9<\xf2\xb9&s\x14\xc3p\xd5Z\x8c\x84K\x1b%\xa1\xcf\xfe\xb8x\xb3\x14\x18\xc0\x9dp\x12\x88\x91\r\xc2\xce\xbf\xc5\xa35\x82\xf8\xe1\x9c\xb4k\x94!8\xa1\xab(sgwTO}K\xae\x87/Qv\xa4\x1bD\x10\x81\xc0E\r\x14\xafi=Z!\xe3FM\xe9\xdce\x8ah\xf7\xdfc\xe0y\xbe\x98\x92\xe4\xeb\x11\xfeN\x12\xec\xb6\x02iw+g\x91\xc1`\xba9\x0b8\x81y!\x1f\xfc\xef\xf7\x04"\x1b|\x94\xe8\xfc[\xbb\xfa\x14\xd6_\xc5\x90\xaf\xf8 \x97\xc7\x065\x8e\xf59\xc8\x1a<\x0c\xd2su!\xed1\x18\x0bn\x95\xa7C\x84\x9a\xfd\xad\x11\xed\xae\x99\x9b\x99\xaa\t##!n\x9e\xc6"\xe5\xc3\x98k1\x1e\xf6\x10\xe8\xc3\x8az\xbf\xb8\xdf\xc3\xbf\t\x93\xb7\xd0\x02\x97c\xa5r0]n\x19\x81F\x9a\xf4\'XH\x06"T*\xd7\x02\xa1\xaf\x14\x0b\x90#\xaa\xf2\x10\xc3<X{G\xca\xe1(\x1bU\xe2\xde6\xaf\xedZ\x114A\xac\x90\x14\xde\xfa[Q(?\xb5%\x17\xa7\xb6\xba-\x10\xb3\xab\xac\x93\xaa\xc3\xe0)\xe9aL\x13\t\xf4\xd6\x06T#\xbeD\xbex^\xd9<\xe9v\x85\xdd "\xaa\x8c\x13qF\xd0\xb1\xf2E`\n\x93\x17C\xf9\n\x8a\xcbJ\x07P;n`\xc1c([\x93\xe0 \x7f\xe2\xbd\x9dA0!\xf8,\xe7l4(\\\xd1\x16N/\xb0]\xc1\xb6c\x98G\xd6\xc1\xd8\xff\x90q\x84\xa2\x17\xfaG2\xbc\xd4\xd2!A\xba\\\xd9\x890Mj\xcf\xee\xa4R\x85\xaa%\xb68\xb5V^\xa1\x07\x93p\xae,%\xf1\xd4\'\xbb\xe1\xc7B\xcc#\xfe_\xb8f\x02\xa7\x16\xc1)\xc7\x970\x1c\xb2\x16\xf4t^\xd7n3\x84\xb4W\x8bsa\x98\xcc\\\x8e=@\x08\xfc\x98XQK\x86\xe9\x83qF;\xe0\xb3al@,\xf2\xf4\xc5Q6x\xaa\\K\xd5\x95\x9d\x9ah\x95\x0f\x9c\xfe\xdf\x7f\x11ob\xe3$\x98\x8a\rEP\x1d\xe2\x1f\x05\x810\xa0\xdd\xd7\x90\'Z\xee\x12\xabI\xc1OD\x02\xabX]~A\x05C\x07\xb14\xfd\xb2\xb8\xadQ\x8a\xe2\xb5\xd8@N,|\xdcN\xc4*\xea\x1b\xf8\\\x9c<\xfb\x11\x1c\xff;\x15\xa3h<k#\x15\x8c\xf7\x99@\x06\xbbh\x8bR\xe4\xc8\x94\x9ej\xdb4]Nf\xfd\xa60%\xef\x1cR\x88\xfb\t`B\x0eQ\xfc\xc4\x0f\x0fbb"\x9dE*\x9d4\xfaQ,\xac\xa0t#\x04\x1e\x00\x07\x89\x8c\x99/\x94\x1f\x1e\x95\xe4\xb5\xc8e\xb9-\x8a\xe9_F\x86\xd0\xcc\xe7ISO\xdb\xd7\xae+\xbb\xe9K\xcdHd-\xb4n\x07\x07\xb4\xd0\xb2\x97\x0b\xaeb\xacZ\xe3\x10\xfd\'<\xe0\xc8di\x17\x99(\xdc\xc8c\xbb\x16\x82Z\x9a\xe8f>\xc7%*c\x83\xc4\xd6\x15\xf7\xe6S\xbd\xd9+N\x90q\x0eU\xb9\xba\xe9\x10\xaf\xa1\\\xd6\xdd\x9c\xf2\xe3\xbf\xd2\xfegNj\xbf\x14\xfa\x97\xa6f\xf1v\xc8\x00\xa5\x8eMJ\x07n\x0f\x8f\x03#\xafl5Z\xc0\x85vd^\xfe\x92\x01\x07\xe8\x0e$\xa2O\x10\x0e\xb8y\x81\xd2\x97p\xba\xd7\x8dN\xd9\xe8\xbd\xe4X#{N\xc9\xdb\x96">\r\xad\xb4ACtN\xc2$\x84\xf5M\xddkC#\xf9\xf4\xf2N?19e\x8d\xfa\xf5\xa8g\xf1\n\xb7>\x97\x04+%\x15\xc3\xd2\xff\xc3\x9c]\xe4\x0f\x0c-\xf0\xd1\x98\xea2^\x1bL\xf0\xf4\xf3\xbaz\xf3\xdc:q\xfe\xcc+\x8c\x91*\x82\xc9\xcb\xa8F_\xd0\xb3\x83\xd1\x04\x14\xad\xb0kS\xb8\xe1\x9a1\xechP\xcc\xff\x92;\xfb\xb7\xf9\xbfT\x01\xccW\xd7IS\xd4Y\xf7u\xb1\x18m\xcd>\xa7Cc\xbf\x10\xf9\xf2A\x16\xd0JLWg\x8e\xcf\xa3\xdc\xe7\x1d9\\]2*\x9e\xdd\x04\xc15\x04\xc8\xd6\x8c\xfb\x04[\xecW\xae\x91\xc4\xe2\xf7\xd0m\xe2\xca8g\x7f$\r\xbf\xc7\xd9\x11\x92\xd2\xf5\xb0 I\x985,\xac\xde\xc1\x94\xd5t\x12UV\x80\x04\xed\x10\xef\x87U&\xb8\xe7\xfc\xc0\xed\xdc\xbd\xde\x03\xe4\xe1\xb1t\x82!\x9c\x9a\xbd\x0b\x17C\xb7\xda\x8a\xc5\x89\xd0\x7fEa\x07\x8a6a\x9a\xf1^\xe5\xf5@[\x13\xb1\x02\xe1`\xfa\x11\x84\xa2\x1d-\x15\x9a\x05\xe7\xb4\x8a\xc3\x8b\xf0\x83\xeeZ\xe8\xb1\x15\ta\x13>/\xf2~\xc5\xd7\xb7f\xfa\x07\xe74b\xc6Cp\xaas\x18\x10w,<H\xdd\xd09\x11\n\x17\x99l\x8f\x9fm?\x8f\x07E\x0e\x1a\x85b=\x0f\xc3\xf3\xdf\xcac\x8a\xd2\xdd\xbe\xf7h\x99\xaf\x81x\xa1Y\x04\xb1\xcfQ\rv\xb0_\x08\x9b\x05\xfa__\xbc\xadr\x8e\xd3\xae}\x83\xbd??\xc0\xad\xc8\xb1F\x8b\xea<C\x91!\xf0\xa8\xee6\xecs\xc4Q\xc4\xa3\x19o\xc5\xfd\x9b.xq\xcb\xaca\x8a\xc9\xc6\xc9}OV(-\xb2\x18\x14\x8c\xf5\x127\xa0\x98\x97\xbc\xc6|w\xf3\x90\x8d)\xbf\xb0\xe1\xce\xc4\xd2\x9f\xbe\x9e\x08\x16\xf0\xf2#\x85\x84\xec\xad\xb6\x8d\xb8*\xfe{\x93\xa0k\x10/\xe1\xc7\xfe\x0c;\xcc-E\'\xc3\xdf\xd8\xd1p{\x9aZ\xca\xf8\xaa\x9ba\xf3b1\x8c\xc1\xb9\xeb\xeb)=\x8dru\xed\x0e\xbb\xa3N1\x8a\xd6\xb2\xc1~\xe5\xfe\xcf1\x1ey\x85^7\xa5n\xb8\x9e0\rkm\xdab\xd6?\xce\x9f\x97^\xaeL\xfa\xect\xa1\n\x12\x1eQ\xa9\x19\xa9\x0f\xfe.!\xd6\x1f\xa3\xe4N\xe7\x92N\x15\xe2yd}\x9c\x17\xeb\x05\xfd\xc4\xaf\xb6\xa3{=\xd4\xda\xf5\x95_\x03#86<f\x05\x8b%l\xc9\xf3\xff\xee\xcc}\xc4\xb1\x94\x03\xb7\x94if9\x15\xad\xf0g\x07\xfbV\x19Y\xc0\x87J\xd6b\xb1qbON\x9a\xf2G\xde6\x87\x8e\x19|\xd14Y\x06\xe6\xf8\xacng\x84Z\x10q.\xfeh\xabEw\x9f\xf1\x98\xb6\x19.\x8f\xb2\xe8\x0cR\xe2\xf3\x1f\xd5fhe\xb6\x93\xec\xb3\xf1\x11\xfd}\xdaS\xd6?\x8d~\xdfc\xf2\xf1\xb36;\x04\xb2\xc7C\xf1\xc1@]\xe9\xfe\xeaf{_\x1coE\xcc\x04X\x11r\xb0\x1ev%Kk\xfe\xae\xf1\n{\xc2\'\xcd\xfb\x93\xb0\xcd7Hz\xd6\xc9\x10\xd9@OP\xfa\xbe\r\x8c"\x97\xa5\x80\xd4\xcbe\x1d:\xec\x8f\x16\x02\xfbv\xd3\t63\x0b\xe8\x18\xa6\x0b\xb9A\xbc\xfd\xddQ,\t\x98dWg\x11\x9d(\xe4\xd9\xd2\xff\x97\xdd\xe2\xcc\xd9M\x9c\xc8m5\x93\x0e\x90\xbf\x1f\xd0\x17\xf3&\xfe\xc5\xf0T\xbc\xcf\xa4\xc9\x0es\xda\x97-v\xe3\xcfy\xa0"\xda\x9b\xf5\xb3\x0c\x14\xdd\x8c%\xb9\x858\xb7ISzN\xe3\xb4\xf2u7x\x9c\xd8\xb7\xf0\x15\x85a\x8a\x87\xaeHJ\xabM\x10P\xb8O\x04\x8f\x0b\xf6G\x92\x9e\xd3Q~;\n\xf8\xd3%ym\xe3[\xc2\xec\x82\xf6\xb2K\x88F\xe6r\xb4\x81\xe4U\xeeH5\xd4\xeb\x19\xcb\xa9\xb2h:\xa0\xf4\x874\xea\xe51\xf8\xee\x80\xe3\xe6\xf8\xafX\xe3\xa3\x1d\xda\xa1\xab\x00\xde\xf0\x05@C\xa4r\xe8\x93\xe5wb\xecd\xb7\xe8h\x02T\xd9\x9b\xc4\x12\xfd\x8dl\xfd\x1e1QtXO<$\xbc\xe1[L\xe2n?\xd0\xfe4\xc6\x88\x14=\xc6L\x84\xbe\xb1\xbc\x86\xa3\x12\xf8\xaa\xb6l\xdf\xb0\x12\xa9\xf9\x1d\xd07-\x10\xec\xb0\xb4\xf9\nb\xe7\xb9s\xc1\x8dz\xa3\xc5\xd0\x14\x14<\xa9\n\xb2*ji\xa9\xc3mG0\xc4\xd2\xe4\xdb\xf9N\xd9\x9fO.\xcd\x87\xfa\xa6"\xd7\xa2\xcb\x15\x8e\x82%\xedH\x89\xc5\xb0\x12\x95D\xfe`\xf65\xff\xab0\x9f\xca\xb5n#\x88\xdc\x85\xcd\xd6\x1f\xb7m\x00\xe2\x15\ruJUG\tP\xc6\xcd\xc6\x01\xe5\x96\x1e\xd7w\xc1\xdf\xdeN\xedc\xf0x\x1b\xe1\xde^J\xb4L\xa2\xf3\xe5&_C\xba\xd4RKb\x95j c\x19\xbbJ\xa4\xf3\xd6\xca\xe3\nzk\xa3\x9a\x1c\xdciA:\xe5\x02D^@\x0fQ\x1fc\x08qpk"*\xef$U\xef\xd5\xa9\xb6\xd6\xf4\xee\xc6\xc1@\xf3AE\x81;\xea\x8dA\x87qq\x883\xb2)\xcedD2\x16\x04?\xfb\x0e\xb4k\xc2\xbd\x02\xb4\xfe\x81(\nC\x1a\x12\xa6!\x04M\x86\x90\xb80x\x06@\x1c\xccW=6Z\xf4\x8f\xf4\x16\x92;\x8a!\xb4e<g\x19\xbd|\x00\xb1\xee\xbe\x00\x9dO\x92\x95\xc9\x8d\xb1\xb6j\xb8\x9d\x02\x85\x04\x99N\xadu\xa3\xd0\x94BRn4oPv+q\x018\xb1\xaf~2\x14\xb2\xce\xdd\xf9u;\x9f\xe8\xf8\x1b\x9c\xf1\x8c\xad\x04oU\x08\xae?\x87\xaa\xc6\xa8\x91\\\x1b]\x8c\x8f\r\x15\xd9~\\:\xe6X_\xc5f\xea\x15\xc6\xe0\xc2\x9e\x92\xf8\xc9a\xb43\xafm4\x95\x9d\xe0\x02\xd7\xc1\x93Vg\xeb\x9a\xefIWG\xe3\x12S\xc2\xd2q\x1a\x05\x19\xe9mMWS\x96\x0f\xb7\xe7\x92\xb1T\x83\xbc\xce\x14\xb11\xd5\xfd\x98\xf7\xb6\x9c\x8b\xec2\xb8\xb2^\xee4\x1c\xd9^\x10o\xd3\x86\x08\x8b<\x14\xd6.\xb7u\xce\xa6=/\xf48\x94y\xb8\xbe\xc3\xb9\x07\xb4\xff\xe5\xb9\xd0\xf9\xdaC\xba\xf9\x02_dJ\xc1\x98\x8f*\xeb\xca9\xc2\x12\x13\x89\\)\xb2<\xdd\xff\xb0\xd1C\xed\xda\xf0\xf9\xfd\x95\xfeN\xe8.\x9b\xc9\xfd@\xfd\x95\xd1\xc1\xd4}\x16\xd5\x15+\xfaHvK\xb2\x94\xdb\xd5\x00\xa7\xa5\xb1N\x13R\x05\xc8K\x13\xa9\xfe{7\xa8D\xe0\xa5\xbd\xbb\x84\xb10\xfb{\x1c\xe8;\x9c\'\xcaM\x7f\x8a\x1c\x81\xbc\xbf^\rH\xca\xdb\xce\xc1&(-DZ\xb4}\xe8fE|A\xd1\xbd\x83c\x025\x8f\x04\x86\xfdE~\xb5\xa77\xc9n\x9a\xe5\xb5\xc2\x1b\x0b\x98\x93\x0b\x18\xa7\xb16\xe0e\xf3\x0eI\xa4\xeb)\x06\xde]\x8c\xbcsJ\\\x02\xbb\r\xd1\xffds\x8f$V\r#:Uv\xe4|3/M\xd1\x03YT\xda*\x10d\x87\xe8\xb7\x87\xa6\xf4Q\xd7\x96G1\xceYG\n!\xbb\x83\x86\xdc\x07\x89C\x9bvh\xac\'\xb5\x16\x81\x03\x0f2\xd5\x8b\x90E\xe7\x80-\xd5\x148\x9a\x93\xe8\xbeQ\x91AZ\x81dW?p\xa3\xf4\xbb\x00+QT\xf6\xf2\x16\x08:\xf72[\xf5\x19\x0e\xde`\n\x90z\x13\xc6<K\x9f\xd0a\x96n$&\xa3\xd3\xa3\xac\x80\xb9ooFn*\x9f\x1e[\xc4m\xa1\x0c?\x07y\xad\xff4\xb8\x8a\x89\xc4\x18\x88\xc2\x82\xa2}l\x04\x9a\xcf\xe6u\xe5\xda\xa0b8Vb(\xf1\xa5\xc9[\x8c~\x970\xdc\xa0\x1b\x8c\x99/g\x03\xd9k\xe4a\x88\x1f>{~bc2\xccg\xe2c\xaeS\xc7\x1b\x8b\x92\xd5<,\xfe\xe5\xb2\xad\xf1?\x8ap\x9aa\x0c\x9f\xb4\x8a\x12Nm\xeb\xab\x14\x8ae\xbe\xbf*\xe88\x8e\xea\xdb\xf6n\x05\x95\x0f\xfa\x818\xf3\xb1\xfe\xdd\x9c\xd1\xff\x88\x0e\x18\xc4V\x0b\xdc\xd9l\x1a{{,\xcbC7ayz\x02Z\xba\x06\xa1\xbc\xf2\xf6q\x03\x0f\xfbSJ\xe5\xf6C\x10\x00\xe1.\x85\xb9\x8c\xde\x9d8a^/\x1c\x91\xc5\xfa"\xd8\xd6\x15\xacK\x0c\x06\x83\x9d\xf4D\xaeF4B\x08&\xa5r`QY\n\x9e\xeb\xaf\x8d($k4\x12\xf6\xd2\xae\xeejM\x00\xcf\xee}\xb9+\x96K\xe9U4T\x8d\xbc\t2X\x1a\x92\x1b\xc6\xde\xc4\xefJ)B\xc1\x85\xd0p\x8cK\x17\x92\xf1\x91\x85\xc7\xa3\x03[ \x0c\x05\x97\xe4g\xb5%\t\xbd[\xdd\x04R\x0f\xbb\x1b\xa2\x84\x07\x14\xa7\\o1\x14\xd0\xe3\xc6[$w\x98\'3=\x07\xcd[\xcd\xb8\x8f\x1b\x88>\x8aB\x8c\x90\xfb\xb9\xe8[\xc3\x95\x0f\xea\x7f\x07U\xc7b\x9b\x98\xfa\x88\xc4\xe3i\xd2\xd2\xb2\x85\xa4\x85\xef"\x9b\x84\xd7\x96n\r\x7f:|\x92\x81q\x8c\xf0\x0fa\xf3\xe8\x8e\xf5\xc4\'\xed\xdc\xbb\x82\xb9h2\xc0\x11\x84\xdc\x8c\x87\xe6\xc4\xbf\xf1\xd1\x1a8d\xf9fz\xaa\xb8\xf6A\x0675\xd2\xf9\xf4es\x82\x19\xe5)\xec\xba\xeb\xf0u\xfe>\xc4\xc8\x87#\xcd\x1a.\xe9\xe2zj\x80\x81#\xed\xc1\xfdbS\\\x8aq\xea\xd4\r\xd6\x95\xef\xa6\xa8\xaah\x87u\x9b\xe9\xcdm\x0f\x1ef\xb7U\xdf\x8dd\xa7\xc4*\xf81\xc8q\xfc\xc9\xb2\xb6 \xb6\xec\x16%\xd7\r\nC\x14Ut\xbdtr\x88\xf5\x99\xe6\x00I\xc4\xd7\n\x92D\x82\x8as\xb9\xda\xde\xe6F\x18\xe2\xe7\xe4w\xec\x9e\xfa\xca\xc3\x1e65g\x19\xcf\xf0\xc2\xd70\x1a\xd6\xda\x98\x11LgF\xb9~\xd0R\xd8NV\x8fJ\xdc\xb1 \xf9\xf8\xfd,\xe1df\xcc?\xefA%O-3j\x97\xf2M\xff\xd8\xb7\x143\x98\xa3\xab\x7f\x94\xcf\xae"F~$E1<\xc2\\\xc1\x87\xfc,\xa7\xe6\xb7\x10\xc4\xf2\x9f\xf8\xa7\x1c\x90}[ho\x82\xa5j\xb1tn\xa4\xce\x92\xa6\x07\x93\xa9\x1c\x8e\x06\x12_EB\x0e\x1a-\xf6\xcf\x02j\xfd\x96\x19\x85_\xc4\x8dCV\xd4\xdc\xc5\x97\xaa\x895\xcd\xed\x99m\xa2\xebQ[\xaah=Ms\xda\x07i\x0e\x1a\x01\xd17\'C%\xcd=|y"\xca2\xb3\xa5\xf3s3.,4\x18\xc4T\x82a\x029e2\xb2\xf5\xda\x1a`\x89e0\xedz\x8e\xc2\xc9\x00V\x03\xa7\x1bW\x89\xff\xd7\x1c\x1a\xc3\xdd\x0cu\x13\xaf\x08i\xa9\xf4\xfd3\xa8\x8aXB\xa4\x9a\xaa:d\xa1V{\xc2\xad\x0f\x88\x9d\xcb\x07e\xa2\xfd\x11\xab*\xf0\xa9\xa4\xacZvl\x0f\xc8t\xcbvo`\xb0\\X\x07}l\xf1\xe6\xcb\xd4\xd2x\xa2\xebuz\xd2\xeaq\x0c-]\xea[\x9d\x13\x13\x83e1\xb2\x9d\xef\x1b\xf6B\xe4\x00\x11\xa2\xc7\xa7\xdc\x04Z\xa6\x1d\x9c\x8a\xb4\x02\x0c\x94\x85\x00\x138\xa1\x03\x12\x9d\xc1\xfd\x8d\x18\x8fK.\xd3(\xd9\x0f\xba\xd1\xb5\x15\x12g\xb7?\xf2\xa9\xcc\xb8\xde}\xac\x90)\xdb\xd7oWV\x90\xb3P\xae\xd1\x89<)\xb3\x08;\xfaoG\n\x15O\xe0E\xd1o?\xe0C\xc9\xc8\xc2\xfd!\xac\x9eU\xda<\x035\xb3^\xe1\xf9\x8c\xe7v\xef\x11\x81\xe0#\xf7\xbb\x1d\x9d\xc5\x19p\xc1\xa7\x8e\x16\x85H\xe0@\x1d\x82\x1d\xd4\x90zv\n"Z5\xc0\xf1\xa2\x02Af\x95U\xdd\xa0\xd6A\x80W\nE\x93\x9b\x88\xec\x19\x9e\xde\xe6]\xf9>\xdf\xf9\xf2\x06\x8a\xd4#F\xa4\x8b\xfd;Vh*w\x00\xac\xe3\x01\x87\xfe\x11K\x1c\xc70\xf8\x13u}\xd7\xe9\xcb?\xdb\x9b\x07Q2@\xed\x98\xb1\xd60\xa6,\xa1\x02\xb2r\xbe\xb5\x85\x13\xdf\xbdd\xc8<\xb4\xdfw\xb4= \xfab^\x18u\xc4\x86oi.\xd4\x8d\xa3\xbc\xb3\xd2z!>\x17B\xa8\xc8L\xa2\x0e\xc1\x9ar\x96\xb0\xf0\xe0S\xe7Zx\x145d\x01\x06{\x01.\x95H;\x8b\x7f\xdd\xa26\x9d\xab&/\x9fN\x04$\xa5\xbeT:\xa4n$\x946T\x98&\x9f\xbd|1C:EF=\xd0\xd1\xe9\xa3\x1f\x1f\xf5\x9f\xfc \xc9\xa9-\xe4c\x01\xcc\xa8l_,\xd3\xa8\xcfJ`\x99v\x99_\x0f?\xd7B|\xed\xadp\xb0H\xce\x1b\x8b%\xa8P\x86\x95\xe4\xc2\xf0\x90>\x87\x17?\xac\xe2h.#\xa9\x82wb\x1c\xc3\xf1\x83\xaa\xcf\xbb]l\xe0\x13>\xfe\x08vb\t\xf0\xe8o\xd9\x84p%)\x82\xec\xc4/\xfa$x\xb9\xe2D\xab\x13l\x8cfJC0R\x89\nn\xee\x8e\xe25\x96\xa6/F\xcb1\xfc}\x0b.\xd6\x03]Y\x1c\xea6~\x87\xf0?k\tm\x0e\x14\xee\xf2\xff\x9fA\x89\x19\x15\xd6\xff\x1d`\xfeGo\n#\x8b\xbay\xa5\x0c\x1ap\x15AE\x05\xb9\x12^\xd2\xffvi\x82R\xae.=\xab\xac\x0e\xcbl\xb9"K\x03\x9e\x91\x12H\x89\x8cD\x8f\n\x98\xb4/\x93\xd6\xa4\xa7\n\xd1\xa3\xc8@\x85\xf0b\x852#"\xb1\xa1\x16\xd1\xd9\xcc\x8d\xfc+\xb8\rm')
|
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
|