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.
Files changed (72) 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/templates/config.html +1 -1
  32. hiddifypanel/panel/admin/templates/proxy.html +2 -2
  33. hiddifypanel/panel/admin/websocket.py +9 -3
  34. hiddifypanel/panel/admin_2.py +33 -3
  35. hiddifypanel/panel/asset.py +17 -3
  36. hiddifypanel/panel/cf_api.py +35 -4
  37. hiddifypanel/panel/clean_ip.py +125 -3
  38. hiddifypanel/panel/cli.py +172 -3
  39. hiddifypanel/panel/commercial/CommercialDashboard.py +59 -4
  40. hiddifypanel/panel/commercial/CommercialSettings.py +224 -3
  41. hiddifypanel/panel/commercial/ProxyDetailsAdmin.py +38 -4
  42. hiddifypanel/panel/commercial/__init__.py +50 -4
  43. hiddifypanel/panel/commercial/restapi/__init__.py +14 -3
  44. hiddifypanel/panel/commercial/restapi/tgbot.py +57 -3
  45. hiddifypanel/panel/commercial/telegrambot/DefaultResponse.py +11 -3
  46. hiddifypanel/panel/commercial/telegrambot/Usage.py +71 -3
  47. hiddifypanel/panel/commercial/telegrambot/__init__.py +6 -4
  48. hiddifypanel/panel/commercial/telegrambot/admin.py +120 -3
  49. hiddifypanel/panel/commercial/telegrambot/information.py +123 -3
  50. hiddifypanel/panel/common.py +98 -3
  51. hiddifypanel/panel/custom_widgets.py +71 -4
  52. hiddifypanel/panel/database.py +18 -3
  53. hiddifypanel/panel/hiddify.py +655 -4
  54. hiddifypanel/panel/hiddify_api.py +70 -3
  55. hiddifypanel/panel/init_db.py +393 -3
  56. hiddifypanel/panel/usage.py +85 -3
  57. hiddifypanel/panel/user/__init__.py +25 -4
  58. hiddifypanel/panel/user/link_maker.py +416 -3
  59. hiddifypanel/panel/user/templates/home/multi.html +1 -1
  60. hiddifypanel/panel/user/user.py +233 -3
  61. hiddifypanel/static/css/custom.css +11 -0
  62. hiddifypanel/templates/500.html +1 -1
  63. hiddifypanel/xray_api.py +109 -3
  64. {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/METADATA +1 -1
  65. {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/RECORD +69 -71
  66. hiddifypanel-3.0.0.dev65.dist-info/top_level.txt +1 -0
  67. hiddifypanel-3.0.0.dev63.dist-info/top_level.txt +0 -2
  68. pyarmor_runtime_000000/__init__.py +0 -4
  69. pyarmor_runtime_000000/pyarmor_runtime.so +0 -0
  70. {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/LICENSE +0 -0
  71. {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/WHEEL +0 -0
  72. {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/entry_points.txt +0 -0
@@ -1,5 +1,87 @@
1
- # 2023-04-08T15:11:20.751388
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\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
- # 2023-04-08T15:11:20.902572
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$\xb1\xa1\xc2\xe4\xadc\x91\xc3\x8c(K1W\x1d\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x92\x85\x91\xe1\x80\x92\xa0\xd9]8RN`\x06l`\xad\x16\x0b\x13\xe4\x94v\xe0\xcd?\xe2K\xaa\x07l\xb5T\x81nk\xeetE;\x9cb\xc18\x8fd\xd5\xf8"/)\x0c\xc3N5\xd7\x99\xbf\x94(\xc3\xf2\xd7n\xf2\x12\x85x\xa4w1X\xe6\xffs\xd4\xee>0Fc\xc6E\x05\xfby\x89bE\xcf\xe6\xda\x05or\x18\xe6\xe8\xc0\x82\xbd\xb5\rj\xe4\xec#\xfb1\x99V\x9dq\xe1p\xf5\x04\x19\x91\x1b\xd6.q\x9e\x91\xb2R\x0b\xa7\xf4\xd9=2\xa0\xc9\x01h\x9e\xf5\xfc\t\xbf\xed\xa4\x039|\x91N\xde\xeb3\xed\x91\x1c\xf4\xde\xc4~\xc0\xa0\xd6(E\x9e,0\x95i\x18\x94i\xe4\x9d\xa1l\xf3\xc5a\x974(\xde\xc78\x82\x9d\x1f\x96\xfa\x17;\x0e\x90\xec-\xd1\xb0\xf3D\xa9\x9b2!X\x0b\x80[\x83E\xde\x8f=Ku`\xa9V\x1dl\xcf\xbd\xc3=\x01\xe4v\xcfB\x1d\x94\xfaW\x7fE\xdc\xdd\x892$\xa9\x84\xad/\xaa\xc3\xec\xc3\x11\x04\xa3\x82\xb3w\xe3\xe8\xff\xe3\xeap>?\xb3\xa1\x80D\x14\x7fi\x82\x0e@h\x87\xc0\x1fF\xad?\x04\x894\xff\x11\xbf\x90\xb4\x81\x16t\x0e\x0c+\xef\x9crmC#w\x95EF\x84Xw\ng5\x9f+\x90\xea.\xb99\x93\x91!\x8d\xfa\xc1.\x14\xe8\x1e\x89QN>&\x0bO\x93?\xe9M\xe2\xb3\\uTF\x03F\xd8z1\x0e\xcf\xa5v\xc1E\xc0\x07\x93P\xfd\xab\xb77/\xdbg\xd7\xf3f\xae\x85k\x8eV\x17\xcb\xa1<\xe6-\x04h\xc6\xb0j\x11N%\xb4LtA{\xab\xfa\x81\x17\x18\x07I\x898\xf0\xbd\xff)\nt\xe5\tEu\x8b\xf9\xef\x14\x9e\xde\x80\xcfr1\x16*I\xee\xf0\x15+B\x98n\xcd\xa2n\x9fh\xd55\xe5_\xfb\x17\xec\x95\xbb\'\xbd\xa5\xcc\r\x19\xeagp\x01i\xdc!\x17\x90S\xe8\x97\xebel\xa6\xe1\x96\xc0\x08\xdfO|6\xe3$\xdc z{\xaey\x835\xb0I\x93\x7fl\xac\x9cS&Y\xec?q{\x03\xcd\x16yJ\xd1\x17w-\x05sJ\x1bZ\x17\xc6\xc8\x82\x15\xf8,\x86\xeem\xf1d\xb7%\x04\xcd\x1b[\xa9R\xd5\xb2\xe08N\xcb\xf5\x08\x88\xd4C4\xf3\xac8\xe0\xe0j\x8c\x8d\x88\xaf=\x8f\xbc\xb2s7n\xe88,\'\xb0\xfe\x97\xce\x8fZ\xc7\xd8\xd8j\x98\x84{\xa2\npD\xdfA\xd0*l\x0f\xac\x87\x16\x14{\xb2\x17\xfc\xf3\xda:\xe2\xc2\x92\xe3\xcb,\xa2QP<l \xc2\x11^6\xf5\x04\x95\xf8.\xb4i\xdf\xcd\x1clGD\x80\x0c\xfd\xceE\x81\xae\xa3A\x14ns{*@\x11\x8fZ\x19\xa0\x93\xb4t\xfd\xa3\xca\xdcs\x80\x8cD\x01\x041\xa0\xd4\x8d"\x8d_A\xfe\xed\t\xd2\xce\x92\n"u:E\xa1\xf5x\xcbf\x86\x12,\x04\xba\xa1\x82\x13-p\xccPd\x02^\xd2\xea\x99V\x87X\xaf\r\x87\x82X%\xafn\x1e\xf0\xc5\xa1a\xf9\xa5\x9d@\xdf;\xd4v(m\xa2T\x83\x90\xdf\x0f\xe0\x0fl\x0e\xf3\x1e\x17\xe3\xf4\xb8#\xff\xc3)oQ%mE"\xe8g\x14\x19\xc4\x01e<\xca{\xea_\x7f\xf5\xecm3|\xeau\xf26+\xe5\xa8f\xd28\x86\xc9i\x0eyu\xb7#\xd3\x11\xcf\xf5\xc5\xd9\xf2f|\x1eL\xc2-\xe1\xbb^\x99cr\xf1\xaaf\xe3}0yTy5D\xeb+n\xfc\xc7\xf3\x87\x82\x8d\xc6\xc5\xab\xca\xe5\x007V\x7f\xd1\xe31\x0c\xdf\xe8d\xc0p\x96\xa7\x8f\x99\x876\xcdT\xdac\xd9\xe6~\xd8\xca/\xce!\x8a\xb3\x80SiW\xa8\xb5\xf7\xae%\xd5\xe4-\xa0\xfd\xb3\xa2\xb8+B}\x97}pQ/F\xe9e\x1d\x98\xaf\xceUO\x8fyr+\x06\xb7\xe5X\xc6\r\xc6?87\xfd\xd1\xdcK\x83)Q\xbc\x88\xab\x91\x86L\xfe_rVMg\xe2\xee\x8f{i\x87\xa0\x8f(\x8em#\xedy\xcc#$\xc2W\\N\xb9\xf0\t\xbb\xf1\xe7]C\x8dVrsq\x89\xdb\xed&\xd7\xc7\x14\xdcmE\x8d\xd5\xd8[pR\xbe\x035\xe0\x06RK\xd9!j4$\xd1/!\xd3P\xeb"\xc9"\xeck\xae\xb4h\xb7\xbcT)\x88\x1f_|\xac\x05\x9d\xc6p\xe6\xa8\x16cw;\xc9C\x08\xfa\x01\xec=\xf3\xf3\xdb\xac\xdap\xa6Oc\xd1\x1ax\xd1\xa7\xee1\x87R\x90\xf93\xbb\xe1Q?m\xf9\xceT9_\x1d\xcd\x94\x8fSA\xfdE\xd9\x93\xca\x1cu\x17\xa5X\n_u\xc6\x8c\xc0\xde?\xa1j\xa9\x173\r|N\x9a\x15;\xe8\xaez\x86u3HtxE\\\xea"Dmtq@\xe7\x1e|h\xce\x07\x81\xa8\xbf\x82\x8f\x92\xbf\xc5\x14\xa3\xe4\xdd\x81\xfa\xe6\x1a\x85U\x99\x8b>\xe2I\xc4\xe3bX\x94Oua\xd8}\xa8\xb4\x80\x0f\xa8\xe2H\xc5\xa6\x8d\xa6l\xae\xabY\x19\xa4\x9a$\x1c\xca\xdd\xa6\xbc\x92\xd0g\xed6\x8e\xb7\xa5\x94\x10z p\xaa\xe8.\xa9^_i:\xd3\x1d\xd3*;\xe7 (bp\x19\xe6\xdc\xea\x9bi\xd6\xe6\x0b<\xbe\xe7\x00B\xafV,\xbbwT\xe4\xd8B!3\xd9{\xb0\xca,\x04\xe4\xd3\x7f\x05t[P{\xa9\xcfoy_\xf9b\xc2\xef\x82\xfd\x93.\n&E\xde\x0c\xc8{\xde\x91\x99\xd8\xa7l\x07:.o\x856\x8a\xf9\xde\xe5\xf4\xd9qod \xe9\x90%P\xa1\\\x11\xfc\xf6\x1cg\x99\xe4gq\xf9\xf1U@(K+\xe88\xbbJ\x8e\xe3\xa2\xcbY\xe5\x14w\x06\xe8\x8e\x98\xb8<\x16\xfc\x8b\xf2]1=~\xc9\xb5I\x9d\\\t\x1aZ\xb5\xa0\xdc')
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