hiddifypanel 3.0.0.dev64__cp39-cp39-manylinux2014_x86_64.whl → 3.0.0.dev66__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/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\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\xa2\x07%\n\xf6\x94(6\xa5=\xcb\x07\x86\x0e\\V\x00\x00\x00\x00\x00\x00\x00\x00\xad^\xc4\x02\x13-"\x8f\x04\xa4\xa14\xed\xeajWR\xe5\xa9\xc5\x1fKs\xb0\x80\x9a\x11s\xba\xddn;\xfbg\tpA\xf8\xa7\xbcd\xc4\x89\xb9G~\x10N\xca\xc6\x90\xb2\t\x0fu\xa6/P\x13a\xd4ImS\x00\x9a\xf1\\\xbeJ\xb5\x0b<94\xb8\x81+\x9b\xa5X\xecT\xea\xc3\xd5~bO\xf1\xa4a\xa3\xbc\x9c\xc8pbu\n\x07\x0c\x98v\xe2\x0bT\x89\x7f\xee\xe8\xe0\x8b\x12l\xf3\xab\xacB\x8fe\xaeP\xd7\x7f\xe3\xe2\xecNq\x88\x84\xcb\xe5yA\x86\xc3\xa5\xa1BK\x83\x8c\x8c\xefJ\x8d$\xe4W\x8b\x88\xf2\xa9\x81&\x15\x03\xd8\x88Q\xc7\xed\xb6b\xf8\xa3\xe4\xc8\xacz\x94F\xc8\x8d\x84\x80\xday\xaeD\'\xee\x94\x10V\xf4\x8d\x1b\xc1\xa8\xffT\x91\xcevT\xff\xc1#Mf\xcd\x0bl\xbd{\x93\xa6M0K}\x15\x0e8\x06Iv\xf0}\xd7\x05+\x0b\xf6\x83f\x87e_\x8ef@\x19\x82Y-\x864\xfc\x02\x9a\xcbQ\xfc\x82\xad\xb2#\x129\x7f\xaag8\xbb\xc5$\xad%\xe3M\x92\xaf@\xf5\xb5\xfc\x87\xeeA\xe2G\xcd\x12p\xa5\x16m\x01\xa7\x11\xefX\x00\xacSy_Ggy\xb5\xf03\xe2\xef\xc3\xa1\x9b\xc0x\xdb5\x88\xda\x8163\x88\x89t\xb0\x03.\x84~\r\x81\xbdSp\xa1\xb7g\'/\x92\xe9\xbc\xa54\xfa\x9fA*`@%\xc2\x88\x08~\xfe>\xb7\xa8\xa2@\xf9P\xec+\xd91\xb8\x06\xce\xb5lY\x12\x9b#\xe5b:\xb6}\xeah2\x14\xb0\xa5B\xdc\x17P\xfe{\x15\xbax\xccyk\x81\x1bl\xf2\xa4\x15O\x8b\xa6%\x89A\xb0s\x07;7\xf9t\xe2$q\x88j\xe0\x08\x8c\xa2n\xd1%\xfc\x90L \xbc\xb3\xbe\x91 \xd7\xec\xb8K\xae\xfb.&\xccm\xcf\\E\xa7\nb\xc0\t\xa8,\xe8\x84\xbb&\x1cJloU\x10!\xd2Y\x1b\x95\xd3r7\xa4\x7f\xbb#4&,\x8a\xb5\x85\x10\'\x8d\x0c\xcd\xe6\xaf~t\xc0\xde\x12\xd9\x90\xde\x12`\xbc a?\x0c\nQ\xaa.\xf7Fy\xa6;\x98\xf6|\xd4^\'\xe6@F\x92\x14\x03\x91D\x03u\xd8\x8f\xc2t\x98\x17\'+\x10\x9d2.\x1b\xdfIMw&\x88\xb3\xd8\xf0\xece1[\xd9\xc5\xd6\xde\xc8G\x03\xc0\x06\x14f\x95\xfe\x9b\r\x0b1\xa2\xbf\xdf\xc9\xdb\xf1fNMG\x9f\xe6cn\xd8\xa8\xd6\x1a\xdf\xdb\xb7\x05\x10X!\x05\xe1:\xe1\xc9@\xe9\xe4\x95\x18D\xf5=\x89,\xadj\xd8\xaf\xfd\xbb\xf0)H^rR\x8e\xc1|0\xd8\x01\xcd\x89\xc9\x15\x1d>\xaa:\xf3\xf86\xa6\x07Q7\x19"\x89\x9d0\x88\x9f\xa8b>\xcf4L\xf8\xa8\x1e\xa8\x02\xea-<~\x99-\xfeT7\xf5Vi\x95\xe7\xab\x9e\xfc\xde\x88\x9c\x9fa\x1d\xceX\xdd$?\xfd\xa4`\xf3\xdf\x99\x11\xe8a\xe8`\xeeD\xe1\x07W6\t3S\x90\x1e\xb7?d\x12^\xa4\xb4!\x87t\x1fw\'N\x89\xce\xc6HS\xa7\xad\xb6\n\x0b\r\xc6\xe7\x10\xa5\x1f\x85\x1a\xf4\xa17\xbc\xb2\x99LZ\x91e2\xaa\x1a4d|\x10\xf7\xeb\x9bk\xe4\xc7/z]\xc2i\xfa\xa1`\xad;\xae\xfd,mHQ\xd2&\x9f\xb8\xd2\xd75B\xdbF\xb8\xa8t\rw\xc1\\)\xb3V8\xf8_\xba\xddD\xb6"=\xe1\xf9%\xe6\xac\xb4U\x84\r\x15\xa4\xd8 \xab\xb3\xab\xce\xef\x0b!\xa4\xd7\'\x1c\xe9\xe1R\x12\'\xa7\x99\xc6Ni\xe7\xfc(\xe2\xf9\xcb\xda\x9c\xedrx:F\xfa\xe2\x81Vc\x1aaY\x11\x07\x05uGZ6\xb5v\xf0\xe8\x89;|\xa2\xe1\x14\xf9\xaf\xb9\xb8<\xfd\x06!%@\x02\x1c:(\xa9\x852\xb0mP\xd6\xfeJ3\xe0\xac\x13Qt\xffU\xcfU<\xf6\x9f\xffr\x10\xdfp}[\xa1\n\x04^\xe3\xf5+\x0f\x18\xaf\x06\xd5\xea\x83A\x18\xb7\xbd\xf1R\xe4\x96\x8fnx\xfdN_\xf5\xc9\\\xba\xfb\x9f\x15\xd9\x19\x9bg\x14\xff\x0e\xd8+\x99\xfcX\xb7\xe7\xe7\xcf\xfd}\xa6\xf8:_\x17cKz\xcb^\x1a\xa3\x7f\xd3\xa0@n\xb1:v\xbc\xbf\x03#\xc0\xe4\xd6<\xde\xcdw\xbd@\xfdm\xff\x14\x13\xf3W\x9e\xb0\xc1u\x8a\\db5\x8b\xf29\x96\x05\'\xc78\xc3-\x0c-,\xfc\xe7n#\xbf\x03\xbb\x17g\xd3\xb9e\x07\xf74\xeb\x9a\xbe\x14:<"\xac2\x85K)\xe7\x06\x10\xcf1#ThE\xd0=#\x11\xb8q\x9c\xc7P\xb0\xc0r\xf5\x95\xd4;\x94\xeeA\x8cQ\xef\xdf\\\xec\x17XR\xb9\xe4\xd2\xbd\x15\x9e\x19\x85JP0[\x88\xa3\x16\x15%\xff\xa9E\xe7S\xe2\x19y\xe5\x9c\x81\xdc\x856\x91hg7ZnVC\xba\x7f\x1b\xc8#n\xff\xe2\x0b\xa08\xeb\x9f\xc1-?QD\xf5\xc2\x13Rl\x19q\xe7`\xd3h\x94\xca@_\xc8xs\xf3j\xaa\x8e\x1e\x93\x95\xc7\xfdK\xc6\x9c\xc6u\xef\xc1\x0bv\xc9\x17\xbf_\xc9\xf5V\x1b\x01\xfd\x85$E\xe2\xb1\x16:W%<\xe1m[f\x07\x0f\xcd\xac\xf7[~B\x1a\tU\xfb\xe8*\x1d\xbc\x9f|\xb4\xb5\xd9F\xea\x16\xcc+\xeb>\x1eN?\n\xde\xfbC\xe6J\xe4\x1a\x8cp\x99\x16z\xbf\n\xb6\x81r1\xcd\x89\xb7(\xdd0_\xa6\xf74h\x11\xa0e{&\x86 \x9a{\xc2T\x06\x84I0\\*\xe7\xaf\x1b\x1a\xda\x96j\xdcm\xd8\x8f\xd4\xd4\x10m\xb9[tPg\xc9\x9dQ\xdc\x0b\rC\x8d\x0f\'\xb4\xf1"\r>\x95\xf7?\xe4\xd8\xa5\xec@\x90l\xc1gA/m\xe7\x9e^9\x96x\x7fV\x03j8+n\x19:\xb8N\xcc\xd8\xd8l\x85\xf7\x0eq}4\x7f.]\xd6\xb2!=\x17\xcd\xbd\xc8<{\xc1\xdfv\xd0U\x0f\xb5\xdd\xa9\xca\xddRoe<\xd9\xb7\xfa\x8a\x11\x90D\xd9N@\xc5\xbf\xa4-WZ/\x8frK\x91\\r&;\x85\xa81\x0b\x90=\xc1r\xca\xae\xb0F\x93\xc0\x0c\x0b\x8c\x1f\xacJ\xfa\xa1\x97\xa9\x16\rw\xae~\xbf07\xf8\x1dD\xdf\xe5\xdf\xfbG\xe5&5\x11\xffIa\xb8\xee2\xb8\x9c\xee\xba\xd7m\xdb\x8d\xb6\xc5\xaf\x80\xcd\xbd\xa4\x84\x89\x8c%6<\x1c}\\s\x0f~\x16\xa6\x80|S\xfa\xfa\xd8N\xd5\xba?\xb0\xf0\x121?\x15\xb2\xda\x9a\x90\xf2\xb8\x82M\x01\x99 \xac\xdd\x16\x19d\xd5\xcd\xaf\xbepO\xcf2\xcav\xb7\x865\xf4\x9c\xbd\xd9J$\x0b\xaf\n\x12\xce\x97d\xc2I\xc1\xad\xc4Y\xcfBL<C\x98\xc0ri \xbb\xb5\x1bVv\xdaC\xe8\x1e9\x89|\xad v\x8f\x8b\\n\xa5\x0f\xa0\xdf\x1e\xf0\x02\xd7>\xcc%C\xf2r\xc0P\xd5\xd2\x9c\x0e\xb4\x1b\x11\x96\xec\x1f\x1a\xd6\xac!DJ\xf5\x91H\x14\xf4\x11FGf\x83\xa2B\x8aC8\xb1\xd8\x99\xc9\x9f!eu7:E\xa3ZrN,\xca`>\xa7\xa0\x81\xe9\x8d\x98\x8c}\xbbF\xa4\xc4\x04w\x8a0M\x0e\x16\xecz\xc1/\xad\x199\x84Y\xc8\x9d8F\x11S\xdc\xe4\xa8\x13\xabVF\xc9\xce\xae\xa9\xdaFF\x99\xfe\x13\xa0\xf9\xd29+\xe0\xdd\xca\x8c\x16\xb9\x8a\xbb\xe2\xc9.\t\xd9\xf1\x95\x84\xd9;\xea>\x1dE\x84\x1cM\xea\x8e\\\xb8t\x853h\xf9\xbe\x97\x03!l\xca\x08\xf1\xd6d\'|\x8597q\xc4#}P|\xfb\x0bcr\xae\x06\xab\rbHJ\x06\xcf\xe2\xfd\x8a\x11B\x86\x83\x03\x12\xae\xc4s\x0e\\\x1a\n\xfd\xb2\x04\x7f\x80&\x86\x9f\xef\xb1\x95)D*\x07\x1e\x9f\xdb\x06\x06\xc0\x90WC\xf06`\xa1A\x8a}\xba\xf8\xd7\xefjfHu\x9a\xdd\xdd\xa8\xb3\xe0\x93\xd2\xf3\xf6{\x17\xb1c\xc8M\x80\xda\x1aGo\x17\xf7\xa7\xad#\x98\xb5f4\xf6\xe9\x9c.\xae~/\xb9\xfc\xcd\xac\x01JYZ\xf1\x1e\xef\xc6\xf6{7C\xa6Y\\z\xf8\xd0r\xdc\x10B\xf4\x9b\xc0\x15\xe85\x8d1,\x8c(\xc5\xb7\xae\xf5\xb7\x86\xcf\xe4!\x03\xe8/\xcbM&F\x87\xf8l\xc1V\xf3\x8e0i\x92/\x81k\x94\x91\xd2f\x08[\x11\x9c\xbd}\xfc\\\xf4`4j=\x11\xdb\xdc\xcd\xf1\xfb76%\xf82i\n\xf7\x8a\xe3\x7f\x97\xcf\xe9\xed\xf2D\xfa\xb1O\x1dL\xa8t\x00\x1c\xc9\xf1gz\x0b\xa5\xbbT`\xb55\x04ba\xcbBB[\xc9\x02\xfcZ!\x90\xdcx \xf4\x17*I]\x97\x8c\x19\xe9\xe7\xc1O@\x02\xe3Q\x86\x80E;\x8a\x00#\x97\x1fYz"\xf8\x81I\x11\xd80\xfcT\x7f\xe7[\xb3\xdb9\xae\xd7\xbd \x93\xea)\x91\x0f+\xd4q9\x82Q\xd5qS\x1f\xc7O=\xa9\\\xef\x8f\xcd\xc1\xda\xb1\xf0<\xd6\x87\xa0<\xf9\x0f\x9e *"\xe4\x07"h\xf5P\xb5t\xcaB\xf2Q\xa3\xcf]p\xab\'\x9d\x99d\xb8\xef\xc6\xe7\xf8K\xd1F\x86\x9d\xda3\xf4q\x11\xc1~\x1f\xb8\xe6\x00\xa1A\xc8\xe0bW\xc8\xa4\xe3^\x0b\xf0Y\x9d\x95Uki\x1e\x88\xe2\xceVI\xa6\xf3\x8bals\x99\xd3\xb6\x86\xc7A\xf9!\xe2\x91\'\x84\x8a\xc4}\xa6[\xdf\x1dj\xa7\xaem)\xc3MW\xa2\x8d\xd0h\x077\x88\x0f7M\xcc\x12/!\xf8\x9a\r\xf9S\xf8\x8d\xe1pk\xe8\xea\xd0*\xc0\x88\xac\xc0\x87\xc4:\x85\x14\xb3E\xac\x9b\x12\x91d,\xd1\xec\x8c`\xbf~\xa0^W\x12\xcdj\x84D\xba\x19\r\x10\x06\x87\xb5\xa0\x10\xe3]m\x07\x86L\xf5R\x8d\x07\xb52J\x07\x7f\x9f\xd9c\xee}\rS\xd6\xd4z\x1c{\x80\xde72\xb6\xf8\x9a\x9a\x02\xba0\xe5R\x08r\xdfMc0\xc3\x06*\x00\xb0\xed\xa1\x80\x15\xc6\xca\x1cT\x04-\x88\xd3\xae}\xac\xc1\x05\xa1ln\x94\xf7\x16\xe4Yf\xec\xa9\xea\xda\x1e\xa4\xfd\xdc\xa6\xd8e\xdf\xd2\x81\x8c\xda[e"\xe8\xfb\x98\x11y\x89\xea\x060\x98\xaa\x89cx\x01f\'\x7f\xb3\x8d\xdb\xd3\xf7F\x9eJ\x9a\x83\xb4\xf6\xe1\xf3\xc0\x81l\xcd\xd8\x7f\xc7s|<\xe1\xdb\xb6V\xb8\x9c\r\xac\xcd8M\xdc\x1e\xc3j-1\xde;\x86t\xdceB\x15\x15\xb2<\x8f\xad\xc9\xfa\xab\x03\xfem\x15\xd9O\xf3\xf3hU\xa8K\xf5\xffn\x92\x88\xa4`[\xb4\xd6\xa1\x90{/%~\x1bd\xc0\x12\xc3\x91\xca\xdd\xca7\xdb\n\x82\xa0\xc10\xdb\x10\xd9+\x7f7VVfd\xe0\x9b\x9f\xff\xa8\xa0\xcf\x1b\x9b&}\xff\n\xae:;\xae\x8a\xf2g\x04\xf7\xdc\x8e+e\xde\x19\xd5\r\xd7\r\x0fi\xa6\xf9,J\xc4\xdd<\xa7\xf8\xd6\xc7a\x15\x9e\x1d\t& (\xa6T\xdb\xb2\x031\x83eM\xed\xfd\xa3\x0f\xfc\x1a[\x9fm\xd6\x17\xd9D\x11\x19\x8f4\xfb\x1e\xfe\xd3\x8e\x04\xc2\\\xff=O\xbd~\x86\xf2q\xfc\xbd\x0f\x8f\xf3\xc2!\xd4\x85\xcb\xb9\x99\x11\x81\xe0\xe4\xc5\x9e\x8a\xae[\x18oa0v\x15\xa1\x10\xd5\x1e\x91\xe3.\x9b\xe2wj-\xae\xa4\xe6El\x05\xec\x82O*-\xc4V{\xf3 \xe6KZ{9Mg\x07\x0b~wz\xec\x9c\x82\xe8\xeb\x82\x8b\t\x89\x13\x983\\\xd9\x99\xce\xa6\t\x0f\xca\x97\xee\xbc\x9e`\xd0\xb3\xb8\x19\x11\xdd\xd5W\xabA\xb4)\xd7>u-\xb6\xbb\x8e\xfe\xda\xf4\xa1\xa8\xe5Le\x10\xda\x9b\xe1J\t\xe1\xf4\x91D\xd1\x03\xe0~p=\xd10\\\xea\xd1\x14c\x85\xd0\xff\xce\x7f\x8d\xf5\xb2\xd6\xa2\x0c\xa5$}\x86g\xee\xe7\xe9_}k\xbc;P\x94\xc0uq\x02\xe7\x16\xf9\xb0\xa9\x02\xeb\xd3\n&\xc7w\t\xf9\x08\xd1\x92\x9a\xb4\xd3q \xfa\xf3\x1e\xb2\xb0\x19\xa0\x14\x85\x0c}W\xe8;\xb5j}\x1f(/\'cR\xb2\xfaE\xe5\xd4B\xc2\x9b\xca"\xf9\xcb n\xdf\xbd=\x11#H\x02\x98T\x16\x03\xd4\xaf#S"\xf3\x8e\xb7\xc9h\xbbY \xc1\x9d\x85\xc7N\xd8l\xbf\n\x00\xf6X\xd7\xd4\xdbU\xad\x99\x91af\xed\xf6\x85~\x1c\xda\\\x0e\x9d\x93\xacw\x18\xf1\xd3\xf2\xf6*\xe7oV\x90C*\xbbtW%\x9dH\xcd\xbdXg\xa0\xfa\x0fw?i\x8d\xc7)\xf3\x85\x12\x02\xd2n\xd2\xd8\x05s\x95\xa2\x90\xbcU\xb2\xda\x931\xf5\xbb\xe1,\xd7\x9ep#*\xb0\x0b>\xa4\xad\x1e\xd4R\xa8\xaa\x05F\x8e\xc9\xbd\xaa\xb7=B\xaa\xcf\xb2\x15s\xdcW\xa3R\xf2\x0f.\x9a\xf6\x95\x11=\xa5\xcb\x8cf\xdb\xce\xfc\xa4\xf7\xfav\x91\x7f\xf8h\x11\xc5mb\xad\xea\xab\x81\xa9Uf\x85\xec@\xb2$\x88cpt\xe9\xb7IHbE\x10K\xc7\xbd\xb6\x11\xd0\xc7\xa5\xe9M\x84\x81ld\x19\xba\xc8\xf8I\x01\xb7\x82\xee\xd1\x9f\x10\xce\xf0\xaffV\xcc=\xce\x8c\xc9R\x1d\xf7%`\x8dm\xf6\xb4\xf5,d!3\xc5>\xe1q\x80i\x85\x0f\xa2\xb4\xd5Ml9\xa3\x81\x8c\xb7i/N\x07R\xf3p\xd4\x9d\x97\x82\xd1\xc9uR\n$\xdc=6\xcd\xaa6:h\xdak`c\xb1\xe9\xcc\xd5\'M\xd0_\xb2\xa9F\x18Y\xfd\xc0\xbc\xbf\x94y\x9fV+.\xa6X8\xd6\r\x9bh\x13\xdc\xf1jL~\xaa\xf6*\xbeE\x0c8g}GjX4\x80(?\xefbVR>\xe0\x0ej\x15%kA\xce\x1d\x83^U\xef\xbd\xb2iLt;\x9e\xc2\x9d2\x902\xb3\x95\x8a\xa4\xbc\xad`6e4\xf0\x18\xf7\xe0\x1b\x93\x8b8\xf0K=\x03v\x0e\x08\xab\xb7\x84\x16\x9b\xe6\xa6gHR6\xa6\xef\xe7\xfb\xd4<\xc0\x1f^i\tv\x97\xbf\x1f\x1e\x8d\xf9\xd2\xcdk\xa9\x8b\xb7\xbc\x0eu\x0fB\x10%n\xdas\xb4\tX\x86~4\x7f\x97\x17\x9bdy\xa6?4\xb6\x94\xd3P\xfa\x8b\x8aH\x9b~l_\xe7#\x9f\xadE\x9b\xf3\x13\xa8\xcbA\x89\x9f|9\x9cOq\x98y|\xf1\xe2\x00~\xa3\xa5\xf9DC\xfc\xf1\x93\xc5^\xe1e\x1c\xd1\xe2A\xf3\xbb\xdb/\x11P|\xfa\x97f"\xafW\x1e2\x97\xca\'\xff\xe9\x88^\xc0\x83\xfcJ\x0b\xa0\x01\n\xc4\x1b9\xf3\r\xd2\xf8\xe4\xbb1\xf8\xf8\xe3\xa8K5\xb5iUb\xfd\x9d\xac\xc7\x8e\xcbz\x06\xe6|If\x1d0^\x12B\x16\xcbZm\x91\x06\tHC\xe3\x16\xffZ.\xe7vNz\x1c\xe2+\x19(\x90\xec]e@1\x9d\xfa\xc0x\xa0\xe9\xa3w"f\xa4\xae\x9c\xe3\xb53\xed\x83h\x99\xabzh2\xd1\x80\xd5_\xfb\'\x04\x7f\xb3\xbf1[Ob\xd7&\xcd{Y$\xb5z\xe0k\xec\xfeH\xabH\xe7\xd5<e\x15N\x05DR!\x88\xb7\x18!j\x89NI\xcb\xedW\xe7\xc1\x97\xdbRn\xbb\xb62\xfe\xe0S\x1b#\x9c\xdb\x8fNr#\xdf\x9aG\xed"\x1b\x1a\x19\x93Bs\xa7\xbb\xced\xb1\x05\xcezRN\x81\x9akG\x06C\xf7N\xda\x8f\xae$\x99\t{\xe5\x15\'\xfc\xdedyz\xd0\n\xe0\xf1\x1b\xaa`E!\xf9i\x8e\x83+Z/_\xc3*\x1c\xfa\x06\xb3S\xd0]\x19d\xc7\x8b/J\xee\xfbJ[\xdd\x9d\x93\x04\x13<5\x1d:\xf2GB$L\x89\xcdJ\xaed[\x85\x19eoi\xd4lh\x00o@N*\x86\\\n\xa0!\x8a\x11\x07hw\xcfi\x164\xb1\xd5\xa0\xed\xb4\xc2eJ\xcdO6!\x15vRB\xa0\xab\x0eL\n\x0e\x16T-\x14H\x13<\xed\xdb\xcc4\x95\xaf"\xdf\xd6b\x12\x1b\x99\x8d\x99\xed\xacz\xfc\x9f+\x9d\xaf%\x08\x9d\xe5\xab0|\x9b\xbe\xa7\x7fSG\xc6&oM\xcd1\xd9\xed\xd0\xc1q\xb2\xb2d\xc9\xb3UB3\x00\xe9\xfb\xa4Ip\xfc\xad\x8d1^\xaa\x93\xa0\x1f\x02\xce\xc1\xea\xc1$J#\xcd\x86\x1e\xb6d\xed\xd5\xe5\xf0\xb8S\xde_\xb1\xb8X\xe1Y\xf1[\x9d\xa0\x82D<\x82\x06F\xed`\x91\xf6\xef\x05\xa3fe:\x7f\x9a\x10\xd4,\x88O?\xa9\x04\\\n\xe6\xbb\xd6_\xf3\xfa\xe8\xb6\x97J\x1b\xde\x8b\x80Q\xd9\x90\x82\n\xbc\xba^g}\xdf\xe5\x0fb \xb6`u\x00\xa1EXc\x87\x84[Q\xa9g\x87\xddY\xa9.vO\xf2$[\xd9\xbcw=\nnT\x1f\xd6?\x83k\xb3\xc8\x93')
|
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
|