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.
Files changed (77) hide show
  1. hiddifypanel/Events.py +27 -4
  2. hiddifypanel/VERSION +1 -1
  3. hiddifypanel/VERSION.py +1 -3
  4. hiddifypanel/__init__.py +7 -3
  5. hiddifypanel/__main__.py +13 -3
  6. hiddifypanel/base.py +88 -3
  7. hiddifypanel/base2.py +40 -3
  8. hiddifypanel/models/__init__.py +10 -3
  9. hiddifypanel/models/child.py +26 -4
  10. hiddifypanel/models/config.py +105 -4
  11. hiddifypanel/models/config_enum.py +207 -4
  12. hiddifypanel/models/domain.py +106 -4
  13. hiddifypanel/models/proxy.py +55 -3
  14. hiddifypanel/models/usage.py +58 -3
  15. hiddifypanel/models/user.py +171 -3
  16. hiddifypanel/panel/__init__.py +7 -4
  17. hiddifypanel/panel/admin/Actions.py +170 -3
  18. hiddifypanel/panel/admin/Backup.py +80 -4
  19. hiddifypanel/panel/admin/ChildAdmin.py +122 -3
  20. hiddifypanel/panel/admin/ConfigAdmin.py +54 -4
  21. hiddifypanel/panel/admin/Dashboard.py +70 -4
  22. hiddifypanel/panel/admin/DomainAdmin.py +195 -4
  23. hiddifypanel/panel/admin/ProxyAdmin.py +128 -3
  24. hiddifypanel/panel/admin/QuickSetup.py +127 -4
  25. hiddifypanel/panel/admin/SettingAdmin.py +224 -3
  26. hiddifypanel/panel/admin/Terminal.py +51 -4
  27. hiddifypanel/panel/admin/UserAdmin.py +277 -4
  28. hiddifypanel/panel/admin/__init__.py +82 -4
  29. hiddifypanel/panel/admin/adminlte.py +13 -4
  30. hiddifypanel/panel/admin/commercial_info.py +23 -3
  31. hiddifypanel/panel/admin/websocket.py +9 -3
  32. hiddifypanel/panel/admin_2.py +33 -3
  33. hiddifypanel/panel/asset.py +17 -3
  34. hiddifypanel/panel/cf_api.py +35 -4
  35. hiddifypanel/panel/clean_ip.py +125 -3
  36. hiddifypanel/panel/cli.py +172 -3
  37. hiddifypanel/panel/commercial/CommercialDashboard.py +59 -4
  38. hiddifypanel/panel/commercial/CommercialSettings.py +224 -3
  39. hiddifypanel/panel/commercial/ProxyDetailsAdmin.py +38 -4
  40. hiddifypanel/panel/commercial/__init__.py +50 -4
  41. hiddifypanel/panel/commercial/restapi/__init__.py +14 -3
  42. hiddifypanel/panel/commercial/restapi/tgbot.py +57 -3
  43. hiddifypanel/panel/commercial/telegrambot/DefaultResponse.py +11 -3
  44. hiddifypanel/panel/commercial/telegrambot/Usage.py +71 -3
  45. hiddifypanel/panel/commercial/telegrambot/__init__.py +6 -4
  46. hiddifypanel/panel/commercial/telegrambot/admin.py +120 -3
  47. hiddifypanel/panel/commercial/telegrambot/information.py +123 -3
  48. hiddifypanel/panel/common.py +98 -3
  49. hiddifypanel/panel/custom_widgets.py +71 -4
  50. hiddifypanel/panel/database.py +18 -3
  51. hiddifypanel/panel/hiddify.py +655 -4
  52. hiddifypanel/panel/hiddify_api.py +70 -3
  53. hiddifypanel/panel/init_db.py +393 -3
  54. hiddifypanel/panel/usage.py +85 -3
  55. hiddifypanel/panel/user/__init__.py +25 -4
  56. hiddifypanel/panel/user/link_maker.py +416 -3
  57. hiddifypanel/panel/user/templates/clash_config.yml +1 -0
  58. hiddifypanel/panel/user/templates/home/multi.html +1 -1
  59. hiddifypanel/panel/user/user.py +233 -3
  60. hiddifypanel/static/css/custom.css +6 -0
  61. hiddifypanel/templates/500.html +1 -1
  62. hiddifypanel/translations/en/LC_MESSAGES/messages.mo +0 -0
  63. hiddifypanel/translations/en/LC_MESSAGES/messages.po +194 -190
  64. hiddifypanel/translations/fa/LC_MESSAGES/messages.mo +0 -0
  65. hiddifypanel/translations/fa/LC_MESSAGES/messages.po +123 -120
  66. hiddifypanel/translations/zh/LC_MESSAGES/messages.mo +0 -0
  67. hiddifypanel/translations/zh/LC_MESSAGES/messages.po +123 -121
  68. hiddifypanel/xray_api.py +109 -3
  69. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev66.dist-info}/METADATA +1 -1
  70. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev66.dist-info}/RECORD +74 -76
  71. hiddifypanel-3.0.0.dev66.dist-info/top_level.txt +1 -0
  72. hiddifypanel-3.0.0.dev64.dist-info/top_level.txt +0 -2
  73. pyarmor_runtime_000000/__init__.py +0 -4
  74. pyarmor_runtime_000000/pyarmor_runtime.so +0 -0
  75. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev66.dist-info}/LICENSE +0 -0
  76. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev66.dist-info}/WHEEL +0 -0
  77. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev66.dist-info}/entry_points.txt +0 -0
@@ -1,5 +1,87 @@
1
- # 2023-04-08T16:23:20.496493
2
- from pyarmor_runtime_000000 import __pyarmor__
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
- # 2023-04-08T16:23:20.599007
2
- from pyarmor_runtime_000000 import __pyarmor__
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\x00L\x05\x00\x00\x12\t\x04\x00\x03\xd58\x03+\x94\\\xa3\xc9\xbf\x96;\xa0\xa3\x03!\x00\x00\x00\x00\x00\x00\x00\x00V{\x8c\xf7\xa7?V\xc2\xd6l K\xccH\x1b\x8b\x1e^^*\xb7\xe6>\xb8\xe8UHE8\x05\x9b\x18\x0c\xad\xe6h\x1c\'<\xc4\x11\xd0|\xdc\x8d\xacx?Do}\xd7\x03J\xbe\xcf\xac%\xcf\x91 j\x9b\xbe!\x90)\x8bA\r\x13\r\x91\x03\x9b\x02\xfc+0x\x1f[\xca\xe5\xc7\xfa\x82\x98]\x83\x9aH\xb1\xab\x1bC\xfd\xd5\x0b\xc5\xc1\xa1g\x9fr\xed>\xfd\x7f|\xfa\x84\x06\x80e\xe2\xa9\x10\xd5\xaaC\xae\x8fR\xc6s\xb11\x7fH\x0e\x94+\xdd\x067R\xf9<\xfd\x81u\xfc:w\x11\xeaS\x03\xb0\xf3d\xd6\xf6 k\x89\xe0\x99g\x94\x0e\xfa\x08\x8c\x90t\xa0\xe2)\x94\xf7\xc7\xf1\x82I\xc3&\xe5\x8b\xb6\xe65WxG\x94\xbdOD\x1d\x9b\xe4\xcd\xe7H\x95~\xda\xbbu\xc3_\xf7\xde\xc4&\xcd>x\xe90\x99\xa5\xcb+s\xdaE\x97\xaa\xa6?F\xf4\xbf!\xc4u\xcc>\x0c\x06\xb4<\xcd\x98\xc5\x1e\xf2\x12\xa7\xf3\xf7\xafC\x8f\x198\xc7\x17\x96/\xc2\xaap$}\xfae\xf1be,\x96\xe4`B\xb1b/O\xbfE~p\x1e\xd9\x9e\xbbgq\x84\xed\xd2\xd7\x01U%\\\x9b\xd1\xf88\xdd?\xc6\xb5E\xe6\xd0\xda\t\x9a\xdbn\t\xc0h\xae\x96Q^b\x8c\xb8Q};\x03\xe3D\x10\xca5\x8b\xe0\x9c\x98\xe1Pr\xa9\xf7 sU\x84\xcb\x9b~\xb9m\xf0\x08BP\x17\xcf\x19\xe2\xeeg\xb3\x81\x96\xd15\xed\x8e\xe0m\xe6v\x03D\xd2\xf7\xfa2\xdf\xcc9t\xa6<t\x18;\x8f\x94H\xb7\xc9\x16|#x\xf3\x08\xef\x83F\xeb\xc4h\xff\x87\x9e`\xf39:\xa5F\xee\x07\x99Ty\xac\xf3$U\nK+\x9d\xf3/;T\xef\xa1\xe5\x16\xbc7ON\x7f\x9b\xe9\xf3\xa4h&\xb1P\xb9\x0b\xa3\xea\x13\x150\xfc\xec\xe7\x03gK\xfbx \xf5\xc6\xe9gB\x01\xe2JK4\x9f\xc2K\xbfg,oS\x11\xf8:\xd0\x1fES\x00\x14\x95\xcf\x99\xd6z\xb2^\x80\xa1V9\x9cn\xd6\xa9\xae@\x85\xa5mE\xf5C\x1a\x18\xfeV\xf3\x9b\xd5O\xf3\xaeuw\xc6<\xe6n\xfd\xc1\xf73\x1d\x99u\xf3\xad8\xbf\xf8{qWxR\xea\xe9k\xbe\xe1\xf3q\x9d;\t\x80\x00\xc7"Av\xf5\xf1H/7\xd0\xe5\xb2\xfc\xd9\x1a\xfa\x8f\x8c\x9f\x01\xb1\xdb\x97\n\xbb\x01\x80\xc2\x03\xc2(B\xc7 \xe7;\xcf\xb8\x1e\x99\xa8h\xca\xfd\xbc\x13I\xfa\xd5\xfd\x9e9\xebM\x9c\x9a\xee~\x08\xe4\xf9\xc4S?\xb2O\xcfP\'\x11\xa9i(\xc1\x1c\x1f\x13\xab*\x8fo\x0ew\x93H=\x04\x83\x16\x81\x1c+\xfb\xed\xfa\xb2\xc9\xd8V(%\x8e\xa3@\xa6Z\xbf\x86|\x18\x00|\xba\xc8\x14+\xa1\xa7\x86\x82\xdc\xa4\x0e\xf7\xaa\x82\x95H=\xe4\xe4\xa1.c&\x17\xa0\xbf\xa0t\x0c\x13\xd0\x0f\x80D*\x15\x942Vp\xba\x92\x90\xc6\xa9\x12\xa6H\xba\x9e\xe7\xdf\xbam\x9b\xcb6+\xd6\xcaJ\xb5\xea\x0f;\xaa\xbbf\x0e&\\<\x07e\xca\x0b=c|\x9d\xad\x80\xbf\x97X\xab\xa0j{t\xd4\xd2\x842\xc5!y\xf8\xb4\xba\x18\xc43\xcd:\xd8\xdf\xe2\x9d\x8f\x97\x17Y\x0f\xc9\x8f\x85w[\x934\x14?\xf5\x95\xca\x08\x18\xce\x85\x05E\xe8\x93\x8ds\xbey\x9c\xe8\x8ch^\x87E9\xe4\x0cv\x1d\xb5S\x02\xc1\x1d\x9f\x98L\xab\xc2ZX\xf2\xa0\xafm\xf3\x93\xc7d\xf9\x993ke9\xd3Y\xa7\xa8J\xd5!3\xc2\x16A\xe4[\x1f9N\x8b\x16\xce\x15\x96\x8fE\x05\xdbY\xbc\x8ex\xd2\x8b\xb0YB\x90\x9c\xf3A\x9c{\x1d\xef\x83\xd7\xac\xf9\xdd?M<\xef\x9a\x19\xb1\xaf\xcf\xd70\x12\x86\x9b\x9d\xc8\xfd\x90\x97\xeb\x83\x94S\x12\xd52\r\xb2\x17dw\xb7\x8d~_\xa6 )\xd6g\x08\x83\x9a\xc5\xb4\xd5\xdf8\xd3j\xe3\x922\x0cT\xd6#6\xe60\x85\x01Q\xc8<\xcbH\xc1\xa2"\xe8\x8d\x12N\xa5\xb0\xb1\xdb@f\xece\xd2}L\xb2\xc6\x01\xb4\x99\xf7\xe5\x04\xa9=\xb5\x88\xbc\xfb\xe6R\xd0\x98\xabt\xd7g\xbc\xb0\xa3\xcd\'i\xe2\xa0]\x06\x132\x94\xe4M`\xde\xe0\xea\xa0\xce/(\x80\x8a\x8c\x81AE%}\xaa\xdc\xca\x17\x0c\xb1\x07b\xc2V\xa1\xe6A\xae\x84\x00\x8b7\xd7\x00]\x12D\x02\x95\rerN34X\xf9P\xa77!\xf7\xc0\xce\x9e\xf4\x83P\xe5v\xa3\xa7\xd6\xb9Y\xefU\xc1\xbc\xb3\x90G\xa7m-\xa0\x8d\x06\xf2\xae\xe6\xe9\xe2|P\xf1\xban\x16(D\x8e\x81\xde\xafynn\xfb\x08\x9b\xef\n\xc4\xe1\xeaU^\xe8F\x9e\xd6q\x00\x96\x98\xbb\x81\x17\xc6\xe7\xe04\xb9\xc2MF\xf4\xd4\xca3)I"n\xdb\xba\xf0\x1d\xd6\x14\x8b\x8f\x0b\xf9\xcb\xae\xce\xebF"\xcd\xb1\xe7L\xe8\x08\xfb4\xe9\t\x98\xc6\x8e\x9a_zda\x1a\x8f/\xe7\x85H\xb1O=\xa4Z\xae\x11uZ\x0e\xbb\x17&J\xac3@\xd0\x03\xf2p\xa4\x05e\xf1\xca\x05\xe0\xc7\xc944O\x8fg\xbf\xa6\xaf\x19?\xca\xf4\x13K\xa4^\xbdd|BdE\xe3~h\x1cP\xb5T\\^\xefF\x1cmu\x82\x12F\\\xe7\\R\xa6 \xbe\xd5\xcd0\x9f\xf2\xc8\xbc\x1e7\x1c\x15\xb1S\x04\xe1X\'\x90\x8e\xa1\xdc\x18\xf0\x0e\xb2\x19\xf9\x8b\xef\xd6C3\xa5u\xf8|\xbbD\x91\x9b\xa7bY\xe1y\xdbO&`\xd0\xa1l\x99<j%\x93|\xc8h\xe5\xa6\x12\x93\xed\xc2]h%\xe5zF\xb7\x91r\n"\xc8\x81\xa0\xafY\xc0\xe3KD\xf6\x1a^\xde\xf9\xe5\x16\x05D\xd8')
4
- #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
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