hiddifypanel 3.0.0.dev63__cp310-cp310-manylinux2014_x86_64.whl → 3.0.0.dev65__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/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\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[\x9c\xa7\xc9\xf7\x1a\xf4\x16/\x06\x1d\x0f\x86\xfa2\xaf\x00\x00\x00\x00\x00\x00\x00\x00mkh\x9b\x1a\xcePf\x04\xd5C\xf5\xe9\xa6\x10\xd7t\xc7:\xe1Xh\xcc\xbfR\x14\x88\xc2\xb74\xf8Hp\x96\xe5\x0f"r\xffH\x1e\x06\xac\x80\xc1\x19W\x01\x13\xcb\xf0U\x044\x01\x13\xef\x16\xc5\xb73\xde8\'_\xba\xc03\xc1%\xd7\x8d\xd8\xf4z\xb2\x8d\xaa`\x99\xa3\xbc\xe5<\xebf\x00\x85\x0f;\xedLu\xa8\xd3\xb9\x13\xe3\xd5\xfaz\x0c\xc2\xb9\x12\xa9lLl\x8f\xb1\xa3\xdd\xbb\x1d\xe0\x8e\xbf\x13\xf1P\xf0E\xd3.\xf2\xde\xd4\xddV\xa5\'\xc7\x99\xd71r\x81p\xbf\xf9\x19\xb5\xdd\x90\xc8\xa5\xd9\xc8\x1d@\xd1qR`\xdf\xba\x8d\xf1\xb5\xfd.\x04*\x06\xa3\xb9#\n\xd5\xa0X\xe7\xa3\xb9\x13&u1\xea\xfe:<\xb4Z\x125\xfd\x81c\xb8\x8d\xc5\x1f\\\xc60o\xee\xb0\x0f\xd4a(+\x1f\x18\xb0\xf4\x82\x0f\xee\x0f\xb4Q9\xa5\xda\x1bi]C\xac\x84\xe7\xcdB\xdb\x0b\x90\xaa\r(\xbf\xd9\x95R\xddT\xaey\xa4\x8cDK\xbc\x92\xd4\xfb;\xbce\xba\x94\xe4v>\xfb\x80b\xac\xd2+\x9e\xd5\x95\xb1\xe3\xbe\\\xc1\r\xaf\x0b\xbf\x8a\xed\xc9\x14\xc2u\xb7\x03>]E\xd4e\x86\x9d/\xe3\xe3B\xd9\x05t\x80\xfd\x91 \x05\xe3\x98\x1d8mts\xcf\xe0\xad\xf8\x0b:\xfc\xd0\xa7!LcH\xea\x98\x16\xea_\xedl\x85\xa5\x03U\xbb\xabV\xbf\x06\xa2A\x003U1\x07\xedM\x03fW\xf2\xe0L\xb9\xdar\x82\xf3\xa5\xd8\xe5\xcb\x9d\x0f\x14\xdc\xcd\xe1\xec\x06\x93Akb\x8f\x0fF\xe7T\xe2lj\xbb8\xb4\xb9P\xa6\xd9\x86\x8fD\xcb\x94yY\xdcpR\x89o\xb4<l\xbb\xf9\xa0gx\x97}\x88\x11q\x8f\xe5i~;1\x8aI<\xa4q<Yb\x0c\x07;\x0b\xae\x06\xc9\xb1\x1c\x94x\x0b0\xbbzq\x0b\x9f\x947\xf8\xc5\x8a\xd3\xb3\xdc\x1a}\x9f)\x8bk\xef\xe8x\x96\x08\xdb0\x8b\x84/0\xabFn\xdd\x11X\xa1\xc7~\t\x9b\xd7Mxd<8\x1dZ\xfc\xcaJz$\x01T\xd33\xf5)4\xd5\xf0T\x96 \xf4\xf5\xb5\xfc\xb2a\\\x99\x01\xab-\x96\xac\xe2\x1fqU\x18\x19\xa1\x00\xc0$\xc6\x859\xe7\xa6\x06KXX\xd7u\x06\xff\xbe\x8b\x1d\xe4f\xfc\xdf\xb1c\x8c\x14\x8a\xcf\xadj9\xd0\x12)\x94*e\xb9\xdd\xeda\xa2/\xcb\x9c\xcf\xd3\xe1\xd6\xfb!K\xee\x809\xe2\x1b\x8fA\x02\x1b\xe9\xb6/\x85\x92\xdfq5\xbf\xd3\xad\xad\x91\xbd\xb2OM\xc7\xbab\x1d\xf2e\xe1n\x98Z%?T\x7fn\xfaW\x90\xf1\x16\xe7\xa4N\x11\xbe\x13\x98\x94y\xd2M\xdc\x0b2\x9cDQL\x19\x16s\x817\x81i\xc4\xa7\x07i\x00\xf1\x1b\x96\x17c\x0fs3\xa2\xaa\xa5\n\n\xee\xd9\xd7Rh\x8f\x8d\x0c\xc5\x9b\x132\x8dh\xec\xa13\xf1$H\xebU\x1e\tkn\xb6\xd9\x91\x02\xd6D\x83\xc6\xa1(\x1f\xe5 \xc1\x1b&\xc3\xb6\xac%\xb5]\x87\x14\xc0L\xe5\xcfG\xb6\xc8\x19\xe3j\xcct\t\xf7@%K\x1f\xc3_\xf6yS\xcb\x91\xd0\x81\xda\xb05K\xb2\xef9\x0f\x87p\xa5[\x97~\xce\r\x88W\x02\xd8\x08\x92\x9aO\xf2EX\xd2g0\xff\xb6a\x80\xa2\xee\xfb\xd1\x00a6@\x8eo\xc9\x89\x1fzk\xf9.\xedY#iy\xfd\xf2~\xe1\x81\x04\xb6Y\t\x19\xfd\xa9\x03\xa8\xd8\xad\x07\xede\xd5\n\xd2sR\xb8m&M\x1a&\xf2\xff\xdc?\xfe/\xba\xd0M\x87\x8b\x9au\xdc\xc9\xcaL\x0b\x89hQ\xf0\xb2(+\xc6Z|j#D\x7f\x14S\x9dg\xb3\x00N+\x04\x99Z\xf0\xf0\xdd\xa6ea\xc1\x83\xc2S\xfc\x01e\x18\xa1$\xd7::\x1e\xda\x8d&\xe8\xb4\x82"2\xe9\x13\xb8^s\x0c\xe7j,w\xa1\x19\x83\x10\x15\xf4:\'\xb8\'`\xa3{\xabq\xf3\xb8\xaa\xa3\xf9\x13K\xf6\xcd\xff{\xe8&"\x02\x9f\x83=\xa7\xf8\x05\xb8\x0b\xda<\xa9/\xa9\x16\x85\xe2=\xdaj\xa5\xc9M1h\xaf\xd5Y\xe72\x90b\x0c\x97\xfbE\x92\xe5[e\x1dX\xaa\xf5\xcc\'\x85\xd7\r\xe8\x1f\x15\x7f\x98\xc6_s\xd9G\xf2%\x16\xe2\x08\xc6f*\x04G\xb4\x06A2\x9dDw\xfb\xd7\xf1\xc6\xdd j\xbf\xc6\x08v\x03\x02W\x07[G\xdf\xfc\xe5\xba^\xad\x17\xf6^\xc6-==\xfd\x01\xde\x87\xc0\xc0k\x95\x1f\x8b\xc5=IkW\xf6\xda\xa8\xd83K\xe87G\xf2\xf2\xb9\xc9i\xc7\x07S%\x07\xceU\xecN\xa9,nO\xc8u\x18[\xa4\xd5\xbb\xa8\xf5\xe9\x06\x17\xc0!\xb3\xd9\x00\x0fQ\x96\xc3\xce\xf0\x8a\xf8\xac\xb5\xedG}G\x02\xe0\x99 \xb9\x9bpn\x8c\xffp\xa6\xf4\xd7Ju\x81@8mf\x9b\x8f\xa9\x1bc\x99\xd8\xc7+=X\xffP\x008\xa9Un\x93E\x8e\xbc\xe3\x00\xb3:\xffH|\xd6\x98j\xd6P\xbe\x15\rW\x1f&\xa2\xf4&\xe0"\xe3\x8e\xf8\xd2\xad\xe5\xd8\x97C\x10T\xa5\x12\xca\x1d\x16\x8b\n\x93\x87\xde\xe2\xc3m\x01e\xfe]\x8e\xe6v\x012F\x85\xf3\xc6XF\x85S\n\x8b{\x92a\xe8dp4\xc90\xdc\xfc\x8b\xb6\xf3\xc3v\xd0\x9a\xbc\xeb\xee`\xb7@\xf4B\xdf\x1e\xd2\xf5-@\xd5[\xbf\xc6\xd0\xbc\x04\x19_9\xbf\x1aBF\xbf6\x19\x1e0\xdb\x19tr\xee\xce\xf4\x07\x02:Oa,.\x8e\xed\x7f\xef\x84\xe2m\x18\xbdU\xce]u\xc4\xe6\x9bq\x15K\x0c\x02,\xa7\xcc~-a\xa5E\xb8\x1b\xa9\xc0\xc6e#\x02c2\x9cq\xb2\xcc\xbe2\x9aa\xaa\x04\x02\xd3\x8e2\xa6\xebB\r\x9c\x86,Q\x12\x10\xe5jL\xcd.\xba];\x10\xdc \xd0|\xc6\xa7f\xb11\x19\xaf\xc8\xfd\xa5\x0e\xf1\xb4\xda#\x0b\xeb\x91E\xcb\xe3\x02C\x80\xc0\xe3\xf2\x84\xff\xb0=f\xd0\x9d\xe8\x9e\x05f\x01\xcf\xce\xa7\xa0\xe60\xae\x0e\xe7\xe4\xf6*3"\x8c\x8bm\x96\x16V\x02\xcb*\x90\x9d\x8caE\xe6\xf6L\x87\x1a\x85=Wx\xf9\xe8\x9e\x84\x82\x10\xd1\x01g\x1d\xfd\x17\xc7\xba\xddZ~\x99r\xc0\x9b,k\xe5\xd2K\xe9\xc9\x81\x87\'\xc1\x8e\xdf\x0bp\xd9\xeeY\xb3\x0e+\xb4\x91\x92\x00\\\x9dc\xa8\xedj\xcf\xbc(M\xbc.=E\x98S\x86\x97\x9b}\r\xf1\xe6\xaa\xe6\xaeG\x00U\xces\x87e\x1c\x87\x1d\x08\x1a\xbe\xbcC\x9a\xaf<fl\x1f\x0e2\x19\xdb\xb3e\x82|H:\xb3\x11\x9b\x95C\x1bO\x1ci\xa7\xf7\xf0F\xf6\xad\xc3N\xaf<8\xa8\xc0#\xd6\xef\xbe\x1f\xb2\xf7\xe0`\xeb\xd1n\x9b\xb4\xd2\x17+l\xcd\x10\xb7:\xc2\xa0\xb4`\x06;\x85F\xd8eNb\xd0\xb0\x18\xe3\x9avX\xa0\xcb\x7f\xa4\xa5$d9\x15\x92\xa6\xd8\x13\xbb\xc7%\xba !\xd2\n\x8a\xbf \x05\xc8w1\xb8}u0\x16S\xf0\xd8J\x8f\x8f\x15\xd4\x1eWa\xaf\xc8\x04\xe2\xda\xe0l\xd8\x89\xf8\xdd\xe3\xa5[v\xf9\x12\x06\r\xba\xc0Xs\xda|5\xc0\xa4ng2\xf3)\xae\xee\xe1\x9e\xa6\x96\x90\x0b\x8fW\xf5\xe9\x8bR\x97\x1am\x03\xdc\xca\xce\x9f~\x00\xee\xe6\xb9-\x89\xee\xcb\xcd\x86\x02(?\xf3\x18\xec`.K\xe8\x0c\xf6\xd7\x14V\xacP\xf4\x1b\x9b\xf0\x0c\xd6\x8c\xf0\x9f\xc6;\xe4+R!u\x93L\r\xe6&\x9b\xbb\xaa\xcb\x9f\x1f\xf1n\x1c\xf1\xeaIY\xf7\x07\x11Z\x1f\x1e+Q6\xd9\x83\'\n\x15\xbb^\x8d\xe3\xfa\xc4N\xbct;XZg<\x13-\x0f\x04~\xd8>\xbbrS3\x13q\xa5\xbe\x9c\x04yg\x03*\x8e\xb6\x0b\x9b=\xdc\xd5\t\x98P\xf43c\xc4\xf9\xbc*\xab\x98\x07\x96nt\xb8>\xd3\x07\x8eL\x1a\xf5\x80@\x10\x85\x0b\xa6Ls\x08\x0c\x94\xe7\xc8\xed\xfdm\x02u[f\xfe\xf6j\xe8\xa4\x94\xd8\xb6F\xa8;Y\xf9=\xf4\xad4j&f\xdb0\xa6\xb4\x0c\xc8\xd0\xf1\xc3}\xa2\xf5\xa7\xcd\'\x9b\xcc2\x1f\xda\x02\xe8\x8d\xd7\xeca%.\x8a\xa7f\xaa\x9b\xa3J\xf9\xa6>\xe8+\x85\xbf\xa0d\xa3\xe0\xe2\xe3)\xf13/\xbd*\xba\xdb\\78<\x89\xbd:>\xca\xb0Ux\xb7\xd1\xd3\xd9\xec\x04d\x19J\xed\x9e"\x0c\xba9i\x90\xc0\xe1\xc1\xc03\xd6\xa8B\xc8\xdf\xbb\xc0\x1a\xf9\xa3\x87)\xfaw\xe9\xb81F\x12\x0f\xb2.\xc5\x81:e\x0f\x98\xbeU-\xb0\xdf\x88\xfc\x86\xb3\x9by\xec\xab\xd0\xe1\xe6\xb3\x08t=\x94\xdf\x90\xd3\xbaul\x9f\xf2~r\x07\xfc\xc6\xf1\x8b\x17\xc5<~Y\xfb\xc8\x8d\xdd\x1f\xcd\xf2\x8a\x0f\xb0\xa72\x08y\x8b\xfb\xd6\x976b\x9d\x9d9\xe1\xce\xd3\x92*\xcc\xb0\xa9\xde\x90\x97:v\xd9k{\xf1\xda\xbe;\xcf\x9d\t98{\xc6T\xce\xd8B\x8f\x90\x7f[m\xfdSOCL%\xd1O\x96\xf7\xb8%5\'X\xf7[\xb7\x0fM\xfe\'3\xaauR\t\x89F\xfb63l\x19\x95i\xa7G\xf4Up-l\xb4\x9a~\xbd\xea\'\xd6\x87\xa05\x81\xa5\xa3G\x1d\x90a\xf3\x9a\xdcW\x0e\x8a\xbf\xb3\x03\x1b\x90t\x04{\xa3L\x7fw\xf2\x96\xfeC\x92\xe6\xbeS^\x9a\x15\xd1\x07gW\xdc\xec*\xa8\xb9\n\xed\x0c\xe6\xdd\xd8\x0eVB\xd7H\xe6\xd1\x1d\xe9\x94m\xd7\xa0\x93\xda\xce\x7fJq\x00\xa9d<\xba/\xae\x9d\xce\xcaGc\x9a*I=;\xafT)T\xfd"\xa4(z\x1e\x15\x83C\xe5}\xdc\xcc\xfe\xf2\xf9%Q\x8f\x89\x91\xfe\x87s\xc5\xa2\xfdv\x90!S t\x10C<\xdf"\xb0\xeb\xe3a\x08\x80\x91*BJ\xa6\x8b\xbd+l\x81\xce\xcf>\xf7Oi\x9f\xd7\x8c\xcc\xe5\xb6\xfb\xa8\xf4\xc5\xf8\x97\xc2\xb5\x9a\xbdf\xd4A\x9bz\x91\x9a\xc8D|d&.\xe5\xc8/\xc6r\xccT)I\x01\x05B\xac\x05yC\xe5\x02O\x94\xc3\xe2{[\xce\xe6\x95\x1b\x15}[\xbaJ\x14\x124\xfe\x8fp\x8f\xe1\xac\xee\xd1\xfe\xcdE\xf89\x84\xf5\x99F\x9f\xdcQ\x079\x1d!\x8b\x80\x99\xd2H\xce^\rb\x10\x9a\x83\xa6\tk\x0e\x13A\xbe\x16t\xd6\xc2o\xbd\x18\xf6\xf7\\\xab(#\xc56a\x0ea\xd7K\x08\xa7\x7f\x9d%\\b\xb2\xc8\xb6\x9b}\xc9\xbc\xf7\xb2\xa1\xca\xbc\xd8\xcf\x99\xae\xcf\x9f\xdd$\xde\n\x9c\xf1}\xb6\xcf\xc7_\xa6\xf6\xc0+0\xd5\xdal\xae\x03\x87\x83\xf4{\xdb\x0b\x7f\xc4@\xc0\x11@\x05$>%\xde|\xd8\x94\xc1\x14w\x84\xfa\x7f?MB\x03\xc0\xb3\xc4]\xe8\x04N\x17\xb9\x08\xcd\x04\xe5\xa8@\xba:\xbdv\r\xaf\xaf\xa7W\xf8\xb2+{\xc39\x92a+\xb3\xf1\xa5m\xfa\xa6\t\x1c\x93\xf1\x04\xb8\x15\x80\x07(\x9e\xd4\xd8\xf1w\xcey"\xc2\x95\x9aq\x98\x8ao\x8d\x98]K\xf6\xb4\xc7\xeb\xe4\xa0M\xba\xcf\x08\xbf^\xf3\xff\x06\x84\xacw\xd1g;B\x8d\x15\xe6\xe7$\xa3\xbe\r\xa3?\xd9\x07B=O-\x9cD}[\n(\xf1mf\x9b\x1c\xea\x00x\xd1\xd5l\x13h7\xfcquR\x8c\x11f\xea\xf8\x0e!\xae\xaag\xfcB\x9c-\x94(\xd4t1\x97\xafJ\xe9l\xfcBOd@\xa6\x9d\xd4\x1d\xdeM\xa0\xe4w\xbeP\xa2W\x89\xd8@:\x93xULR\xbe\xc5y\x82\xc2oi7\xc4\xfaO<\x12\x82L\xfb\'?B;\xa6\xd2K\x80FB\x9b\x1a}\xff\x0e\xee\xd8Y\x84)Z\x99Y\xb7\xa02\x8e\\\x19\x86\xd6\x9ah\xde4\xf4\xc7U\x07!o\xc1\x97\xa4\x90\x88\x0e\xc22\xe2\xee\x89\xf5\xe5U\xa2~lXP1\x88\xabJ\n\xbe\r\xdd\xa1\x91>\xef\xcbl\x08\xd5\xca\xe4\xe7\xd0\x0c{\x9a\x82\xc8.\x95\x03\x04|\x84B(\x06f\x1e\x13\xb0e\x87(\x9b\xcd$7k\x93\xefj\xcf\xab\xae\xbb2@\xd3\xf2\x8a\xb3\\J\rm\t4\xf4p\x06#\x9dB\xa7m\xba\x0b\xa7\x8e\xbd\x1b\xac\xfd\xcc3$\xc3\xe9%\xcd\xf1\xe0+\x8dP|S\xab4\x80r\x9e)\x7f\xc0y\xde\xa6K!!\xd0_wAQ\xe7\xc0\xa2Ba\xbb]\xd1u\xae\xe3\xc6\x16\xce?\x97\xf0$\x96\x96gi\x00\xe7{p\xb4{2\x86\xd3>DV\xc0\n\x11#\xfc%n\xf1\x7f3\xf1\xe5D\x0e\xc7\x9e\x17DY,\xfe\x8e\xb6,m\x93\xbf\x83\xfc\xba\x08\x8bW\x97\xab,\x17#}D\xd4\x93\x0e\xe2`\xdanM\xe3B\xad\xf7V\xff\xce\x80?v\xc9ff\xd1\xf5\x89\xb8\x11\xf1):\xe1\x86Q\xf2\x13d\x8cz\x03\xe1\xd5\xb0\xa5-<W\xcd\xd7\x9d\xf9\xbe\xa4(\xd8\x84O\xc7?\x9b\xcb\xa4xVK\xe8^\xa4G\xb9\xec\xc0\xc6I\x17"\xa6\xca\x7f\x87c\xe8dcZ2X\r\xf1\x9a\x04\x99E\xfe%q\x1f\xdb-\x9f\x88\xc4<\xfc1,s\x8b\x99\x97%\x16:\xf7k\nC\x03\x9f\xeeJ\x1c^\xf1t\xfc\xf0\xf8n\x19<O\xf92\xd5N\x95\xab\x8c\xabu\xe9m]|r\x8b~\xa5,\n>tR_\xb2\xc4\xbb\x81\xe8\n/\x98lvr\xd90\x96\xca\xdf\x89\xd2\xc4+\xda=\xebUYy\x93\'\xaeS\xad\xb7\x06!r\x0f\xd0\xb8\x9dc\xa3\xab\x02\x01Z\xf1\x13\xda_\xcf\xd6Lq\x0b\xf4\xf56s\xa5\x19\xf0\xf4\xc4\xff\xd1\xbe\xf6Eu\n|\xb7\x1b\xdb\x97\xfd\xdc\x84\xb5\xf3\xf1\r\xd9\xa0\xaa$\x94\xb7G\x1a\x98\xa3\xfc\xb2\xf7$\xe1\xad\xf5\xc6\x13\xbf\xfbv\xc7x\xc3\xd3j\x04\x8f&C\xed\'Q3\xd1\x17\x8fh\x03\xc1\x0b\x87\xf4\xb83n\x92r\x15g\xb9N\xe6\xe8+w\xb8\x95\xbcQt\xf87\x86\x1a\x16\'h\x1f\xaf\xd0\x83o\xa71\xf14\x08\xac\xe4\xea\xf9\x03\x83\r\xf9\xe8[\xe7\xf0\x12\xef\x8f\xe6+TA\x82Mu\xbaF\x16hD\x83\xf1m2\x152\xa1\x96b\x950\x90;\x07L5c\xfe/\xa5Q\x0cJr\xbb;\xc1\xf4Qh:\xe4\xce\xcd\x00\x1e\xf2`\xb1\xa0\x91\xe6\x1a\xeax25, \xb1qm\xb3\tu\xf9\xbdA$\x02\xa3Pe\xf6\x0f.\xad\xf9`\x06z~\xf1\r\xc7\x14\x99\xd7\xb5\xfd\x0b{\xc9\xd1\xdc\xbf#\x01W4t\xfb\xdf\xae\xba&\x89#\x95\x96\x0b\x05\x08\x07|\x9d\x1b\xd0\x1a\xc4O\x99\xf8\xc1\xa7\x91p\xe72\x84\xaf\xcc\x7f\x92\xa9\x93>zCct\x01\xddf\xc4\xbc\x1a\x12P\xa0\xd6\x99@\xc9oz\x81j\x92v:\xff7\xc3\x852\xfb\xc9\xf5l\x17\xaf\xd3q\x05\xa5\t\xd8\xb5\x89\xf2)\xb9:\\\xe5\x9b\x8d\x19\x99lV|\xc1\xc1:\x08\xa8-\x8d\xc1\x0f\x15\xd9A\xbf\x07o\xe2\xd4&,)\x0c\x14\x13\xec:\xcf\xc7q\x954\x0b\xc0\xbe(\x15\xca\xae\xb1\xa9\xce\x08\xb0\xa7\x1f*\t]\xac\x1a|\x1fO\x9aY\xf2\xbe\xa3\xd6\x18\x06op\xe1q$/}\x14*\xbd\xc6L\xbc\xc2v\xdee\xdfT\x00\x13\x00\xad\xeb:\xc8\r]\xa5\xa9*\xa7\x8az\x12\x03P\xc9PU\xe6\xe0>\xe9Z\xe6\xab\x98xW\xfa$`U%\xb1\x17\xcc\xba\x1a\xb5\x14:\x0bxwH\x11\x85\x82\xac\x02a\xcc\xa7\x9e\x8a\x1d\xe5P\x06o\xeb\xb0y\xc0\x14!\xe5\x0c\xb1\xd5\xc6\x96\x89\x8a\xbdUK*F\xad\xf7A\x15a\x1foC\xd5\xec\xe1\xbe\xef\r\xe3\xe9\xee\xf7\x83\xa3\xaf;Z\x8cYz[<s\xeb=\xa4\x06\xc4\xd6\xf3\x88\xfe\xd8*\x13\xb4\x16\xfes\xd6\xb9U\xc62\x9c\x08\x1a\xd2\x7fK\xf6\x1a\x96`\\z\xbb\x83\xd2\xe2?\x83\xdd\xc4\r\xf8>\x14\xca\xd7\xdc\xc8?5iT\x16\xc5\x96\xf9C\xf1\x85\xb1\x8a\xaa\xe9\x0bLV\x99S\xce\xf6\x85\xe7\'v7Z^=\xc4\xd7\x95J.\xa2\x8e]\xe0\xc0\x89\x93\xe7\x9c\xce\x17\x8a\xc8\xca\xf9Q{\xd7H\x00\x07\x15\xa4\xd4\x80\xf2\x11\xfe\x947\x0b\nZ\xe6\xabz"\x90-\x89\x90mYg\xf6\x82\xa6\x9e\xf9\x07V\xabQ\x16\x996k\x15\x9b\xb8P4L\xde\xcc\xb0`>L\xc0i#\xcbo\x0eyG^\x9a\xffF\t%-\x1e\xc7\x9d\x00\xdd6\xb2:\xaar\x96\xefz\xae\xe1\x05\xca\xdf\x18\xdc\x144>\x0e\x9b\xc0l\x04T|\xd0j')
|
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
|