hiddifypanel 3.0.0.dev63__cp39-cp39-manylinux2014_x86_64.whl → 3.0.0.dev65__cp39-cp39-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\t\x00a\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\xa3\x9b_\xf2\xc8{G\x12q,\xb1\x81\x1e\x12\t.\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x7f\xc3Gs\xb1V\xfd\x8e\x83\x95CC\xf9\xc7\xce\xf7J\xda!{\x8c\x8a\xfd\xf9\xfa\x1b\x07\xfc4\xf5\x8dH\xb1-\xd0\x8dW\xe7\xa7o\x85q\xf4%\xc3Gr!\xa8\x9c\x97\xeb\xfe\x93\xc4Co9|\x9dv\xd8\xc3A\xc0\xdet\xd8;\x80\x95\xc6h\xe3\xe8\xa7\xa1\xfa\x1d,\xb6\x83\x1b\xf2\x10\x9a?\x19\xe4\x90\x87&\x93G\x15(p\xd0\xa0\x1a\x8d^\x8dK\xf9 K!p\x16\xa9\\ze\xe4\xab\xb1\xb7K\xedd\xb6\xf5A\x93\xc5\xf3\x9e\x97\xa3zi\xf6\xb9\x1f\x14h\xcc\xaa1\x95\xee[\xf6\xa4L\xeeha\x0e\x17\xa2\xc5p^\xe6<\xb6\xeb[\xaf\x94s\xc1\xd8O\x92hL\xe2& \xea\xe3@fd[\xf8\xbc*\x8a\xbc\xa8$\xb5p@V\x96\xbe\xeci\xa9\x17H\xbe\t]\xe5\xd0\x1e\xc8\xa5\xf2~\xc3\x98\x03X\xd1\x0f\xb3\x07\xd9|Zu\xaf\xe7\xd4:8<\xcc\xc90hx\xd4\xec\x00\x1d\xb6\x94\x9d\xbbz\x13\x15\xbd_\x1c\x14A\xba\xcdT.e6\xaf+\x1c\xd0\xba\'\xe2c\xbfunw\x99\x1f\x8e\x83gF\xde\xbf\x0fM\xab\x04\x87)\x10\x8b{\xeag\xc83\x1c\xfaS\x1a_*X\xc5\xbdAL%@\xf5\xa1\xa7\x88z\xa6\x96\xed\xce-\x994\xe1\xfb]\xc3E\xc8\x84%\x0f\x85\xca\x99b@\xcd\xffH\x1b\xb9\xbfm\x15\xe2l"\xc8\xb6\xb6\x93\xda\x9c?\x81\x07\xfa\xaf\xd0\xbd7_\x0e\xe3{\x16\x11\x1d\x8bumo\xcf\x8eH\xb0\x9f8\xc8m\xaaE\xb57\xc0\x1f\x15$\x99I\xb3\xe7"<\xe6`\xdc\xdb\\\xe5}\x08\xcb\x8b[j\x01\xa3\xb6\x1bH\x89\x95K\x80<\xbd\xacV\xea\xb9\xa6\xf9\xc0vG\x94in\xf5i9b\x82t\xa9\x04\x84\xf4\xf6\x1b"W$?0d\xd2\x1b\x86o\xb7\xf5\xcc\xc7\xcc\xf2|\xf3\x15\xd7\x158\xfe\xe6\xce&+\\F\x10k\xaa7\x0ck\xfd\xa4|\xb8\x9f\x8fw\xfe\x17\x07\r\xa7dZ\x14\xc8\xe5\x06[\xc8\x9b\xab\xbd$\xffS\xc8;n&q<H\xc8\x1bl\xf5\xc3\xbe\x07S\\|{XO\xab*OjE\x0c\xe5>\xf5\xb3\x86[\x83\x01\xd1J\x03\xad\\\xe0\x06Ie\xc2\xa6\xa5\x1f{wG\x044\xd22i\x830y\na\xb9\xe3\x0b\xe3U\x83\x1c/qf\xb8\x91\x9fs\xe5\x1cs\xdbk{z\x04QFi\xf8\x99\xa9\xa5s#0\xb0\x9eSI\xacY\xa7\x85\xf0A\x874\xa9Q?\x00\x81)\x19\xe0n\xfb\xc4\x14\xc6\xe5\xe7\xd7\r\x95\x044\xba"\x1f\xae\xec\xe8\x11\xfbx5\xb3\x189\xc0q\xaf{\x14x\xe3\xd3\x86Gq\xbdS\xbd\xb1f\x85{\xfa\xe6\x05\x13\x95;C8\xe7\xa3\xab\x95\xf0\xff\'\xef9\x7f\x9b\xda\xed\x85\xc0a\x1d\x87U\xd9\xa7\xf7r\xb6#\xca\x81\xaa\xaf)2\xdcu \x94\xfa\x1f}\xe3\xef\x85\xe5fnT\xbb\x8cH\x02\'\xfb\xda2\x95\xf3\xf9\x84I\xa9\x08\x07\xf9*\xc8\xb1\x07\xa352\xd2\x19\xc0\xb1\xd4j\xc1+y\xd6&\xd6V\xd7\xc4\xcd\xee\x08\xfec\xd8\x80\xed\xf1\x94\n\xa1:i\xcfe\xf3%oJ\x9d~\x16\x15\xfd\xae\xf0b\x81!Z$\xb5\xec\xaek("0\x9bp\x1c0\xeb\x9f|"\xe3=\xbd\xe6@\xaa.9D\xa1.6\x1cqJ$\xe2\x81\xd1\xd8\xcb\x18\x97\xc8\x80"\xb2\xa9\xd47\x11~\x1c\x12\x9e\xa2\xbf\x08\xccw\x1b\xc5E\xe2j\x06K\x83\x98_\xb7\xd5\xea\xc8\x8b\xc9~\xa4Na\x0f\x05\x8e\xc1\x9bR\xe9[z\xc84\xf9=@\x95\xee4_\xb3\xc4e\x1c\x03y\xd5\xd7\xdc\x0b\x0eKF\xf8Z\xe0\r\xa4\xc9#\xf5\x8c08\xc9U\x1e\xab\xa3N\x10\x0e\xc9\x01G\x92\x97\x1d\x9cgaW\x1dGrY\xb5kA"v\xcf\x10m\xcc.\x95M\xb7\x19\xa6\xac\xca\xd7\xb0O\x1b_\xd0Sb\xaf})|w\xf4V\x8b\x9e\x99\xe6\x8d\x81\x1d\xb7\x1diQ\xbc\x08\x0f\xbc\xfca\xe8\xa2P\xbe\x84\xb9\xa4\x91\xcd\x0c\x06}\xc3\x06\x1d\x8b\xe3j\xe1\xb3O;\x93\xd6e\xb9\xb4F4biV\xf6\xd8RQ\xff\x0b\xb0\xd1\rn\xd9[\xa2*\x1dy\x8b+\x81\xc5\xb1\xa7\x10\xaf\xea\xff\xe7q\xe2\x85gP\xf3\xe2\xf5\x91\x89l7\x1b\x93\xac\xb6\x80\x8e\x0b]\x9f\xcf\xe2\xb4\x98m\xab\x0c\xfe\xe0\xc9C7u\xa1\x04\x12\x0b\xa8\x05\xc6>\xc8\xdd\x06\x1a\x13\x10\xa4G\x99"\x97a\xc7~\xa1\\9)\x15\x94&\xdc\xfb\xd9a\x9f\x01\x15\xb5[\xdcW!x\xb2h\xb6\xe7\x8d\xa0\xde\xba\x12\nl\xbd\x0f\xd85\xb6\xc9\xb6\x86\x88\x1f\xbb\x90\xa62\xf3\xc7\xda\xd5A9[\x08\xa9\xab\x97#n\xc8\x03EXm\xa5\x7f9h\xa4\x9b]d\xe1`\xd1:\xb40u\x82\x9cj\xd4L\xfd\xe3\xb5-\xbb\xe3\xbf\xc3\xbe{\xb3T\x05\xc2P\xdb^-n\x89\x84\xc8Q\x98:}YG\xb9\xe8lV\x19?\xect\xe6M\x8a\x89\x05\xa75%\x95\xb2\x83\xfd\xa7P\xf0+h.\xb0`\x13\x17Ph\xe7v\x03w\x8e\x8eOHu\x11\xe3P8\x8d\xdar7\xc0\xaeV##GOb\xda\x9e \xa5v\xf8\xb7\x8co\xba_\x97$\xc4\x86\xf2\xe2E\xf5G+|\xf9P"/\xa8\x01\x16\xd3\xff\xafS"\'4\x17\x03\xcfh\xde\xc7\xf6\xf8S\rV\xc4\x92U\xe2\xa0\x1a/\xaf\x19v\xdd\xd8\x02\xfc\xaf\x04\xff\x99\xe4 >fg\x0e\xf2UZ\xa6\xaf\xd0\x07\xa6\xe7i~\xaarP/j(U}0\x84\xb5\xd0l\x96\xbf\xd6\xe2[\xc0\x93\x95o\xa6%\x0e\xf1\xc6G>\xf4U\xdc\x9b\x7f\xc4w\x8c\xe5\x85[%\xca\'s\x1c\xf6\x135p\x8dp\xc8\x0f\xc6 VX.f\x0c\xb2\xb8Fyl\xcc\x9f\xc9\x0b\\\xa9\xfcv\x8f\x1d\x14\x81\xb6\xcd\xba\xae\xe1\x87\t\xd1s\x9c\x1d\xd2|\x91\xe89*J\xc3\\-\x10P\xf8\xcbOi\xe7\xb4\xda\xbe\x1e\x1d\xe8\x8d\xde\xda\xc0\xa8\x00\xcd\xfd\xb6\xf3@z\x8d\xa9n<\x92\xc9)\xae\x9b\x9e \x81\xc25h\xe6\x91\xe6\xb6\xac\x19\xa8R\xf6\xba8\xc8\x1e\xf3\xc0\xfc\xd6$0\x979\x8c\xb6\x83\x8a\x83\xf1\xa0\xd3\xb0\xa5\x86@\x01\x06\x87\xed\xa9\xf5E\xeb}\x8f\xbc\xc91i;V\x05\xbdg\xec\xf8\xba3\xab\xa2\x9bg%\xc6\xd90p\xde\xc9y\x1eB\xf8\xe8\xf7\xb0}\x8a\xaa\xb8\x96\x14\xda\xb3C\\\x82\x90&l\x18\xd98\xddS\x03q\x8a\xab6\xa1B\xb6\xa6\xa8\x04\x87D\xcb\xeeq\x94Lw\x8a\xe4h\xb7fei\xa1\xb31\x0f\xdd\xb2\x0c\xaf8\xa9\x1d\xd3\x96\x10\x9b\xf1\xc8\xe9\xdfF\xe3\xaeP\xdc\xa4x\'\x90q\xb4\xf7\x18\xf9\xbf\xc6\rV\xc0\xaa\xd95\x82\n|]O)\x8e\x1e\xe8\x1a\x9b\x93g\\n>\x82%\xaa\xc7\xd2\xa2\x065\x93\x8c\x83\x89\x05\x9a=H\x87\x8bwd\xad\xf2\xa1\xc6\xa0\xad\x85E\xc2e5_(N\xe8\x96\xf3\x1fu\xea\xb6\xc3\xfd\xae\xcfe]\xa1\xfbj\xf5)\xd2\x90\xb0Q\\\xf34\x9a4Q\x9a\xed]\xec\xc5\xe9\xfawB\xb8\x8eY0\xdc\xc5\x03^\xee:\xcd\xafD\x13\xd5}\xf0a\x18*a\xeb\x87\xc9=\xfa\x1ei\xf6\x9f\xf2gf+\xc1\xa0\xbd\x9flX\xa0\xc9\x0e&?\xc5\xd3\x00\xd5\xc8-\x8c\x80+3\x1d?0\xd0H\xbb\x9b\xf6hI\xb1}\xb8\x01\x9d\x04T\xdb\xb12\x02\xfe\xb9P\x01 "\xdbv\xc7\xd6\xfbDs\x89\xae\x96\xb1\xa6\x9b|\xf6\xa1\x19\xc3\x97\xd4W_\xb8\x9f\xda\x88j\x93\x90\rGo\x11G\xa0\xe8\xf1o*\xac\xeb\xc9\xcd{\x80\xf93\x82\xd9\xe7.\x89\xde-5\xa3\tmeEj\xd3!F\xd1\xb4\x1d\xe7\x1b\xa1aq:\xc4\xd9)\x92\x10i\xdc\xf1\xc9\xec\x80\x92rW=\xb0\xc4c(9\xd0\xde\xab\xf5\x1e\x17\x85\x15\xbf\xab#\xb4r\xb7sp\xf5#e\xf9\xfbS\x01\xbf<\xcb[h\xd3\xa2\xe4\xdbf\xe2\xfb\xe7n\x06\x04\xdd\xf7\xa3]\x95v\xea\x05 \xe63\xa3\x9b\x0f=\xb1\xe9\xcap\x95Yk\xaf\xf9\xd1\xe8\xbe\xcc9NvKG\xf1\xdd\xce\x88bf\x927\xde\x9f\xf0\x04C\x8a*j\\.\x8ce\x94n\xe3\x16K\xf0/\xbd\x0b\x05I\xb1\xed\xf0\xb8\xe5*\xc8H\xa6\xe5\xf6\xb8?\xf7\x1as\xe2g^Dy\xaa\xfdH\x95\xaaA\xb9Y\x1eN\\\xa8\xc6K"\xf9\x1f\x1c\x194<%\x8d\xddN\xab\x06\xb4%\xfa\xa7w\x0b;-\xe5\xb63\xd1\xf5\x140=\x05\xdc.\x8d\xa6\xaaM/xxc\x1e\xd3\x93\x9f\xaf\x1e9\x0b^\x05^>\xec-\xbe\x97Lf}\xdc\xa4\xbf\xf5\xbd\xba\xd0\xfe\xa29UD\xf7\xeaNc\x956\xfc\x1a\x9e\xc8\xf7%?\x05*$M\x91^\xc2\x9e\xaf\xcc\xfe\xfc!\x98c\xf1\x98\xd9\xf7l nU\xca$\x05\x89\xc3\xae:\xf7s6i\xd2\x90\xd8b\xa9\xc5\xc6Q\x81\x8e\x89@\xd0\xe2\xc9\xcf&\x87\xa7\x1d>\xf5\x0b\x96\xec\x16\xa3\x1e#\x87\x81iu\x9eb\x1d\xf9S\x13e\x1d \xf2S2R\xdd\x1d\xac(\xcb\xfb\x1c-\xe7\x17\x9a\xfd\x0ctR\xf2\xf5\xd4\xd1\xbc=\xa3\x85\xb0\x0b\x8e\x04b\xd8\xa1\xfc>\x19FBs\x9d\xe7\x9e\xdb2\x98\x89\xa3\xe4\xcf\x868A\xf5\xacD\xf7&\x82)\xbeN}:y\x83wy\x07\xfe\x0e\xdf\xd7e\x86\xc9\x93\xcco\xb9\x8f\xd6\xc7\x0c==)\x1a\xe7y\xf7\x10\xf1\xef)q\xfeJ\xfa\xd2OTP\xb4\x8eV\xea\xf8\xe9\r]y&\x80$+U>V\xb9\x01\xf1I1\xf6\xd6\xb2\x84\xd7\xcd\xd3\xc04-\xb8\xeff\xfc}$\xd9\xeb\xc2Q\x92N\x83\xec\x9cv~\xec\xe8Z\x161o\xc7\x02{\x00\xd1\x82\xb6\x82@\xbfX\x04\xfe]\xd8\xd8\xd8\x83\xb0\xf5\x9e\xc6\xb9G\xe3\x96/\x84\xc6\x1c"\x05\xa5x\x9b\xed\x86~\xd7\x16\x131\x82\xc8\x98s\x9cm\x0c\xdcK\x07\xc3\x94\xa3\xe5Z\xed\xb9\x18N\xc0\xef\xa0\xa5\xcd\xe6_\x8f\x00b\xf7\x9eZ\x99\xa47)\xee%\x1b\xaa0\xfbm\xa3\xe7GU\x7f:!\x8b\xb5\xff\xf8o\x82_9\xde\x16|\xb7\x1f{\xba\xb7bXW\xb2k\x88\xd6\xc4\x82\xc0\xaf\x9c\x15-\xf4\xfbI\x81s6\x1f\x98}\xb1\xe2*ZNZalZH\x06vC<Q\xb3\xcc\x90\xa3\xa2\x9f\xfe\xb6P\x07\xb3\xaa3\xa0sG\xbf\xa6\xdd\xa36\x88\x84-d\xa0?H=\xbc\\~ba#\x04@\xda\xbc\xdd\r\xf8p\xf6\x02Z\xa0s\'i\xd5z)P\x04@\xe7\x88\xf1\x99\xb2B\xe9\x8e4\x9a5\xa5\xbc\xaa\xaa\x0c\xa5\xd6\xb9)R\x1f-S|\x1a\xda|>db\xcd\xd7\x8dv\xcf|\x08\x0bhS\x92\xe8,\xa3R)\xe8\xb2\x19\xc1OT$\xcfAvzp\xaa\xf6\xafj\xa6\xc36|\x111\xe6\xbc\xaa\x17M\x16\x19\xa5\xe1\xc1de\xcb8\x1c\xcb\x8a\xb8\x93\xe8.\xa6\xa4\x87\xa9=\xac\x8d\xfb\x05\xdd\xfa\xefCB.\xb2\x9bF.\xfd\xb3j\xee\x13w\x96{\xa8\xf4\xb1\xd4\x9a\x82.\xf6\xc5\xe5\x86b\x04pM\xce\x90\xb5\x87a\xed\x0c4C\x8d\x99\x15Y\xe5_\xf1\x85\xba9$\xc7\xf2\xe4\xa8\x8d$\x92rM\x0c~\x98O1\x18s\xc4\x14to\x80O\xf5\xa55\x86\x98,:4\x017\xe3MP\xf1\xbc\x81\xdf)\xdd(\xa2\xc4x\xccvC\xec\x84[W\xfb\xd16\xeb\xc6\xd0\x80}\xc3\x98\x84\xedu\xe8\\\'\xc8\xfe&O9\xb7m\xed&B\xba\x0b\xf8Y\t\x19\xdb\tm\x90)\xb3\x88\xacg 1\xc1\xfa\x83\xce\xb7{\x92\xda\x8e\xfb\xf7\xa6\xffc\xc3\':\xaaM\xc3\xf2\xe1\xa3\xbf\x83\x88vT|\xeax\x1d\x00\x1c\xcb\x86\tv\xed#r\x80\x9eE<\xd9z\x81\xc5\xd0\x1c5:\xfaI\x87RK4\x10c\x0c\x99c<\xf75VCC_B>S\xe7\xa3\x1f\xcaH\x8b\xbc\'\x8d\x0f\x136\x01\x02N\x84\xd3c\xfb\xe0\xff4\x14E\xc96 \xc338\x0e\x94\xf2\x9e\xa2\xb4\x18\xb5\xab\xcc\x8c?\x15k\xb1\xb8\xe1\xbb6P\xd1\xa4\x87\xe0\xafJQjBm9|u,X4|\xad\xa0\x10iHA\x9c+p\xbd4\xb8wG0\x8a\x95`\xc1\xa8\xce\xba>\xb3\x8b\'\xb7t\x06\xfaK\t\x975\xf4\xffL\x82\xd5\xc3\x08\xb7\xb6\xd38\xc1-h\xa9\x8b\xda\xa6\x96\xd1++\x8c\tm\n\xab\t\x82b\xe1;\x06^.\xc9\xbd\xe8\\ftA\x1bY=\xc0\xbd\xf4\xbe\xf5\x91S\x82Q\x16\x92\x8aFf\xc5eq\xd5\xf5\x0eE\xd8x\x93L\x9fp\x89T\xe1\xe5##&\xf6\xaa1 \xb4o3\x99\xa6\xcdt\x87_\xe3\x82n\x97\xd9\x81!0]}\xb6\xb8\x8e\x7f\x1d\x86\x87\xb1\xa2AP\xe6\x98Rc\xa2\xf1\x83\xd5\x87\xe5q\xf0\xfd6\x94V\xd7\xf6\x17\x8f\x01H\xe9\xd6!\x83\x10d\xf0\xe1\xd8\x06S\x84\n\xb6\x99\xe7x5\xe3hs\xc7t\x97\xbc[\xc9\xba$\x80:\x13\x91\rV\xbe\xb2SKM\x0e\x10Iyj\xd6\x9f\x1e\x0bu\xb8TM.\x1c\xe8\x9e\xa8\x86\xf4\xf3\xcb\x1fR\xc1F\x94v\x1cSBA\x83$+;\x7f\x19\xc5\xcd\x8e\x9c\x07\x1b\xd6\x86\x7f=t.&\xccM\xf6C\xf6\xa1\x9a\xe1?\xc8\xd0\xdeS\xac\xab5\x8dB\x03\x14\x0f\xac]|\x0b:sJJC5\xec4\x11\xd8\x80Z\xf0\x08\xca\x11\x13\xdd\xe7\x11\xd6\xad%\xc3\x95\x9bj\xb8\x9d\x12\xf1.-i\xea\x08\xda\x93\xf2\x82=MV8\xfdC\xdba\x81\xd7V]\xc3\xb4\xb4<\xd7\x1de\xb3\x15\xd7\xd6\x9d\x15,n`\xca]bm\x05=4\x934\xa9\xbc\xe7\xe1\x1cs\x85\n\xa0D\xed\xbb\xff\x06\xc45\x161\x18\xc7\x87\xa7\xbf\x10\x02\xed\x96y\xc6q[)\xaf\xde\x8cSr\xf4\x95\xaaO\x08\xdb\xc9\xdd\xb3\x1e\x95\x07}\n\x15\xda\x91\x9f\x85c\xd0rZ\x95\xe4\xea\x7f\x15e\x10\xde\xde\xca\x1e\x80(\x92=\xa9\xfa\x15c9\xfaQ\x1d\x96&\xedU\xc5\xf7\xeb\x03\x06+,~\x89\xf9!\x05\xde}\xc5\x01\xb5Q\xc7\xa1\xc8\xd7\xcd\x0bt\xd7\x03\xd0\xa3\x99a\x9b\xa4\xfe\xc9+~\x04\xc3R\x12\x9fd(l\xe1`\xa4g\xb1\xcaJ\xb6\xee\xfd6\xa7\xad\xe1\xd1\xd5\xd9\x18\xec\xba\xce\x8f\xd8Hi\x9cu:\xce\xe6R*\'&j\xc7j%\xb5`\xaa\xebg\xdc3\x93^\r\xaf]\x07\x05\xfe\\\x0cpVb\xe2\xac\x12/1\x11\xa9\x1f\xbe\xe5\x0e\x89\xef0\xffP\x9a}\x87\xac\xb9\x0f\x02\xe2I\xb3RG\x90\xa9\xe4\xf9J\x03g\x10?/\xea\xe2\xfeC^\xbc\xf2\x15\x8f\xde\xfa28i\x04\xec"pu\x84P\xd5\x1b\xbd1\xc9k\x01\xc5\xe4\x1e\x84\xe1\xf4\x8c\xd1\x1c\xa6\xea\xb8\x86\xb7\x93\x9cL\x7foQ\\\xffD\xe2!\x96=\x1dS\x00\x86\xac\x92a^\x85\xa2\x0f\x05\x1d\xaa+4~E\xe2\xc3\xdc\xd9\x1c\xcdC\xb1\x0e\x94\x19\r\x0f\x9f\x16\x9b^c\xfa6h:\xf6\x17\xe0\xd7\t\xe9\x95\x9e\xcd\xfc&\xc2\xb9,\x0cj\xf9\x90\xe3\xa7\x87\xdb\xd0E\xbeO\x14\x9b\xf3\xbbg\x90k\xf1\xcd_Z\xae\n \x15\xab\xad\x15\xff\xe4\xb6\x19!\xcb\n;\x12:\xad\xa3\xcc\x9e<\xef\x10\x89W\xc9\xce\xd2\x9d\x17\n?\xf2w\x7fz\xcd\xda:\x97\xc4\x9f4?\xa4\xcc\x157[\x7f\x15Xi\x04o\xb5T\xe0\x1b\xc5,\xfaY\x12\xab\xf5\xa2\x90\xa4;\xc6\xc4\tfFJ\x14\xca\xe0c\xb9Q\xbc\x9b&k\xbe\xf0\xc6\x13\x8aP\x9cv\x18\xcb\xab\xf9K\xaf%\xfbO\x0ck\x08:\x1b\xe2\xd7\x1a\xb0;%J\x8ay\x99\xc0/\xd4c\x8fPp\x03\x12\x87\xdfY\xd7\x9b+\xc5*5\xd8\x836\x02<"\xe5\x8c\xe3V\x0f\xf5E\xf3,7X\x98\x97\xfd\x82\xfe_\x9dqW\xd9:\xd0\xda`8\x8e\xbd_\x7f~\xcf*t\xff9\xe8\x12d\x89H\xa7e\x94\x9ee8\x1a\xbd\x01\xe3\xc8\xe9T\xe1z3\x9e|Q\xc0\x08\xcbr\x18\xf10\x9c{\xdar\x9e\xb6;\xb2\x82\x1b;<\x97\'\xf7\x1d\xd0\xccn')
|
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
|