hiddifypanel 3.0.0.dev64__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.
Files changed (70) 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/home/multi.html +1 -1
  58. hiddifypanel/panel/user/user.py +233 -3
  59. hiddifypanel/static/css/custom.css +6 -0
  60. hiddifypanel/templates/500.html +1 -1
  61. hiddifypanel/xray_api.py +109 -3
  62. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/METADATA +1 -1
  63. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/RECORD +67 -69
  64. hiddifypanel-3.0.0.dev65.dist-info/top_level.txt +1 -0
  65. hiddifypanel-3.0.0.dev64.dist-info/top_level.txt +0 -2
  66. pyarmor_runtime_000000/__init__.py +0 -4
  67. pyarmor_runtime_000000/pyarmor_runtime.so +0 -0
  68. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/LICENSE +0 -0
  69. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/WHEEL +0 -0
  70. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/entry_points.txt +0 -0
@@ -1,5 +1,87 @@
1
- # 2023-04-08T16:23:31.544247
2
- from pyarmor_runtime_000000 import __pyarmor__
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\xad\x16-+ng>Dg\x8d\x17\x9d\xdb\xfdJ\xb7\x00\x00\x00\x00\x00\x00\x00\x008\xe0\xfa\x03u\xb7\x9f\x81c;R6\xf3^\x84+\x02I\xfb\x0eC\x1b\xf3\xa9\xdc\xe7&\xc3l\xad\x8d\xe9\x83\x94%h&\xa3\xf9Z\'\x8b\xbc\x10D\xc7\x8c\xe7\x80gxI\x0f\xba\x0b\xe7\n\xe9\xdfG\xabE\xf0\xc4\x88o\x04\xff%\xf9\x80\x8a\x1a\xea1\x15>q\xc9\xabO\xbb\xd1\xd3\x11\x8b_\x82\xe4kf\xcb_g#\x01#\xfc\x06\xcb\xf7\xc0,.\xde\x0f\x9a\xf2^A0\x98\x0f\xfa\x99\xff!@R\xe5@\x87\x16)\xbd(\x03F\xa1t\x9fb\xbaEP\x14d\x05\xb89xv\x83\xbe\xaf\x97\xe7\x82\x1fZ-\xc4\xfayN\xe9k\xed\x8b\x84\xa6S\xa1\xe0L\xc6\xf5\\f\x92\x08\x94\x8d\xe2\xc5u\x02\xb1|\x93-\xc48\xe7\x0b\xe7\x98\x141C\x85\x1b@Z\x13\xe4\x1a9\xbc\xd1$\xa8\xad\xbb\x8e\xdf\xe4^g\xdf\xcb\xc2\xd4\xb4\x81\xee\x10\xd9D\xcc\xc6\xd1v\xe9\xa8\xe1\x00?7t\xe2\xe6V\xee8x\n\xeaf?>\x9cG\x1c\x14\x84b\x87+\x83\xaa\xcaE\'r\x1b\xad\xf9WK\xf3\x07\xfc\xd3S\xaa*\x85\xbeS\xda\xdfW\xdd\xa2\x14\xb9]X\xf4\x04\xd8\x8b\xa1@\x88e\xbfl\xa1_\n\x11\x8e\x02\x7f\x02\x18\x82U\xf5x\xbf\xb5\xc7\xb0r\x02\xd181\x87l\xf9O,-\xe5J\x80\x1e\xbdM\xf4\xcdF\x8dk\x12\x86g\xe2\xbf\xd44=\x9c\xa1;\xcd\xed\xbb\xd8\xe7\xbf(,a\x08\xf74\xbe4g\xf7\xc0\xab\x8a9\xa3\xe7s\xbbp<\x1d}w;\x0b*.\xa8\xe5\xd5\x9c\x92\xea\xee\x07\xe6\xd6,\x83O\xb7\xc6\x80\x06:\xa1!\x9f\xe2\xfaBu\x83\xe8I{\xa8\x9a\xb6\xee\xea\xb1\x17\xd9\x94f\x8ak\x8dp\x15\xad\xbc}\x8cR[\xbe\x1c$^\xda\x08Q\xb7\xc5\xf5\xfa\x83\xcee\x1eq&N\xda\xfe\xc3D\xc6\xa0\x9f\xabS\xfe\xdb\x0c\nH\xed\xff\xac\x92k!\xa1\xa6{\xf3\x85\xecO\xb8\x0fh\xf2L\xc2H\xeb\x1a\x89dl\xe5P\xfb\x99\xdbr3\xd5T,\xafo?\x8c\x94^0\x16\xf3\r\xbf\x887I\x12\xc1\t\xe7\xbf\x0e^"Ke\x87\xd2qT\x07\x9d\xa9\x8f\xfa\xeb\xab\xe3E\xc0_Y\xb0_\xd7:G7\xfd\xc8zlV$\xcd+Ve\xca\x8e\x93\x08T\x15\xddY\xcb\x049\x04\x03\xca6\x02\x9a\x87G7\x85\x83\x05\xd5\rgU<.\x9c\x07\x9d\xb7\xd1Ns\xc7f\x1f\r\xad\xd5N\x08\x82\x05\xdf\xe2-m\xf5\x93\xaa2\xae\xb8\x7f\x05\x0bgl/\x14\xeb\x8eo\xcf\xb6\xd1w\xa9\xe8G\xe08\xef\'\xab\xf4\x82\xea\x8a\xfb\xfat\xe8\xd1\xe0<\'\xa5\x02[\x02&*\xd8\xa3\x9e6\x00\xccD\xf7V\xfcC\x9d\x9e\x8e_R\xea+\x9ab\xda\x97z\xd8q.\x14d%\xf5M6\xf5\xc2\x85\xe9\xfeK\x98\xfa\xa9Zb\x87g\xebG\xb3\x04\xb9\xf2\x0e\xbd\xb4\xa5\x8b\xb9I\x97\xf9\xb6\xb21\xc8\xf5\x16\x9cbZ\xc4:\xda\xbah\xe7\xae\x97GgY\xc1\xc1%\xd1\xa7\x87\xbfc\xb4\xd9\xe9\xe0b;\xaf\xb7C\xa1\xf4\xb7l9\x00Y\x7feo\xa2&\xc8Ho\x08\x7fgU\xbaH\x0c\x93\x87\xean\x07\xf0\x08&\xa7N\xcc\'ua\xeb\x05LA\xa0\x1a\x89\xd1kDZ8:+^\xf8\xa8\xcd\x19\x84\xa1\x90\xfc&\xe2\x0b\xcc\xf8\x1f#\x15\n\x1c\xd4I\x85OL\xf7\x8ee\xb3Y\xdc\xb2\x967\x9b\xcd\xea\x03\xf9\x7f8\xb9\xea\xa7\x9a\xf0Ae\xbc\xfe\xe1<\xeb\x92\xbd\x94\xcc\'S%,S\x0e\xde\xee\xeb\xa0\xaa\xa6\xc3"H\x9a\\\n\xe8\x15)n\xe1\xe5\x06\xf1P\xae\xcfL\x1c\x87\x91CpB\xc8`\x82S\xe2Sm\xa5\xaf\x15>\x9a$|6b\x03\x1a\xbdv\xcf\xa0\x9c_\x91\xd0I\xb5E\xd4\xab\x00.\x1f\xee\xa7\xc9\xb4~\x8c{\x06O)\xb5\x13\xc8\x91\x16\x9c\x81\xfaz\xdf\xe3\x16\x12\x89\x04\xd4\xf6;\xefCqf\xd9\r\x99\x80B\x86\xcbE\x03\xe5\x8c\x84\xbf:Mg\xaeVK0\x82C\xfcA0 I\xbaL\xa3\xbb\x9cE\xd4\x1bJcu\x86\x94(\xf7\x8b\x96\xe2=\xe8\x00\xe0\xfe\xc0\x9afSx\xf2\xf0\xf9\x972e_VW\xcb\twCv=\xfb\xc7\x19\xc0|\x95\xdd\xd6\xf3\xe7~\x07\x11\xe44\xac\x115\xa6l\xd7\xce\x151f\x977\xea.\xb1U4C\xe8\x0c\xbd\xaf\xc4\xad`\xfd\x1c\xd6\x11\x97\x8f\xfd\x8f\x85U\xb0@\x1a\xb1t\x8a\x07\x19\xbf\x97\x9bx\x18>\xa1\x0c\x8d\xf2\xd0\x11\x93\xee\x14\xa7\x19iBA\x14d\xfbX\xe7\xf5QFclf\x03Y\x94\x87\xcf#5\xa3-F)[\xbc\x90\x1d\xfa\x95\xec\xaf1\x9e\xaeEB\x965\xce\xbb\xea\x96\xa5\xc7\xbb\xe9A\x9aR\xc9\x0eA\xf3\xf0@{\xcd\xf0\xfek\x98{\x10\xd7\xb4_\xbb\xa5\xe7\xb9\xb5\xaf\x99n\xf8/h\x03\xc0\x92\x96\x990\x1du\x1aj\xd3o\xe7\xfa\x13\x8f\xeb\xb3\xe3\rqhB\xc0\x8a\x7fIS7\x82B09A\xa3\x0e\x90z_\xbd\x9e\xba\xa2rB\xcc\xe9\xae\xb2\xbbR\x84\xb4.\xae\x94\x8d\x1f_6J(@\x04xA\xf2OR,#W\x01\xf7\xf6\xd0.\xac\x82>\xff\x88\x8c\xc8\xfa~w{\x84>\x06\xdc\ng=\xab\xfb\xec7\x93\xe7\xfd,\xcc\xfc>\xe2\xd7\\\xaa`\x93\x0eK\x8b\xb1\x89A\xa3/\xd2\xf4\x89\x13\xc3\xb6\'\x0eP>\x1a!\x1a\xd6bT\xea\x9f-yS\x05\xaeV\xa5\xb9j\xdc\xc7w\xc8\x1b?\xf0-`\xae\xa3\xe9\xd6\xaa\xd6\xdc\xa5j\x10\xc1\x1c&/\xfc\xddd\xe2\xa0wc.\x0b\xf8\xb8\xf8\x94\x1f|\x95\x15&\x96`s\xe8\xae\x94\xf0\x98\xd8"|\xb16\xed\x12\xda\xfa(\x8b\x84\xd6\xb7\x82C\xc2\x9aV\xf0]>\xb0\xdc\r\xab\xce\xf0\x88r\xf3\xcf/\xabx\xdc\xda\xc9\xa1\x84\x9c%\xb8.\xf8\t\xc1}\xfel,JX\x8f\x9fJ\x16k\x87*x\x80\x16P.(\x11\xbe\x02\xe3\xdbUo\xda\x07i\x1e\x0b75\\\x9b\xdf\x85\x15E\xb7,%\xa72\xe8\x17b\xb0c"I>\xacD\xb5\xb5\xea|\x8a\x91\xb7\x97#\x81rJ\xe7\xb7A\xf8\xb26\xcd\xccZ\x04\xe4+\xb2\x96\x12_\xbe\xf9\xed\xba\x94\\\xe9\x8e\xc2&\xed\xdd\xea{%\x02\xed\x1c\xfe\xf4\xa0\x03-\x8f\x9ch\xa6%\xff\xa0\xc97\xb1\x1a\xc2\x9b\x90\xf5\xf9\x80\xf1\xe0\xf4=t\xbba\xde\xae\x873\xdd\xbfr\xaa\xde\x9e\x90Qy\x977\xdddV\x9e\xa2\xe5\xfby\xa0#D[\'\xee}\x89\xad\x1e-\x1ff\xaeL\x13s;\xd8\x1c\xb1}\xaf8\xab}%^\x88\x90\xa51\n\x82\xce\x95k7N\x96\x9ar\xaaTu\xe5K7\xc8\xecO<\xeftNvOrN\x1d1\xd1\xf7v\x89\xd2S\x8d\xd8\\\t\n-*H\x0b=\xe4a\x19\xef\x02\xeb{\xe7T,\r\xf0\x16\xee\xce\x8ezy\xe0\xe2\xf2\xcc*\xee\x07\xe9\x8d\xdd\xe2\x0be\x04\xd0\xff\xe4gk\xda^k\x85\xdcu\'\xd3\x07\x02\xd0\xacf\x9c\xf0\xf2\x9a\xa7H\tN\xd4\x83-o\xec#\xa6\xab\x9f)\xcb\xe9\xe2\xf8KU(\xda\xd1\x90\x02\xcf0\xf1ZyW\x13\xd3<|\x07\xac\r\\\xfb \xc0\xe8,\xde\xee\xc5\x11\xa6\xaa=\x1d\xe4\x0fj\xfe\x16\x89\x84`\xf0\xc9m\x06\xab\xa3\xaa\x06^\x99?O\x85CZ\xa7\xa5?-\xab\xe7\x15\x04Ms\r\xa9\x0c\x16\x18\xa46P\xa5\xd9N\x80N\xe9\xe4\xa6\x16j\x9d\xf4\xcd\xa3\xe1\x83K\xc3\xf9o\xd8.\xbdj\x1f\x01\xcf\x85\x00\xbeD\xbf\xbbD\xd5\x8e\x81\x0f\rH\xe5\x8a(L\xd8\x7f\x80\xc0\xd5c\x00\xda\xd0\x90\xf1t4&\xe2\x99\xd9\xf1\xb2\xbd\x1f\x11=\xc7)\x1d\x0c\xacqi\xccs\xc9b\x1a\x99\xa7\xcdN\xf7\x1a\x11\xd3\x978\xb2\xfb\xf0\xb8\xfc\x80B\x85\xa9\x90\xe1\x15+\x83\x98\xed171\x8d\xa8\xa0\x1el|\x05\xf2=\xf8\xf8\x11]5\x04p\xaf\xee\x05\x13N2\x96\xd7\x9eNr\xa6\x85\xce\x98\x16\xba<\xc5\xc1\x0e\xaf^C\x89S\x1d\x9f\x87\x12\xe7\xfc\x16\xba\x83\x9b:K8\xb7\xcf\xeb\x14\x8e\xe6\xf7\x8e\xbc4i\xc2z\xe1\x1d\xfb.\x81\xcd\xbb\x81\r\x9eN\x9b\xec\xae"\xf2\x84`\x80}\t\x84\xaa7p\x15\xd3\xee\x95R\xc88\x84A\x00\xee\xe7\x82\xba\x91\xcfc\x80\x8e\x07\xb8\xc3I\x06\x14\x88\xec\x94\xc6\xcb\xa7\xc5\x04\xf6\xbe\xc1\xe3\n\x9fM\xd7G5\t\x13\x01(\x9e\xb5\x91\xb3c)\xcc#\x90\x9d\x8aV\x07\xe7\xe4\xee\xfe\x14\x11\xe3:6Y\xf1\xebz/\x85JB\xac\x82\'\xc3T\xe1\x9dG\x02\xb1\xa3nW\xca\x98\xdb\x92PS\xcaE?\xe890\xbaV\x01\xf1n\xe8T5<\xaa\xd2\x06\xa5\x06\x0f\xbf-93\xdb\x15\x91\xdd)VM\xdc&\x7f\xe8\x10+\xd7\xde\xb9Z5?iX\xcb8\xe9\xe7gD\x92(FTBK\x1cI?\x96\xfb\xb2\\\xc4SZ\x81\xe7Ze\x9c:\\\x110\xdd\x04\x1a\xc8\x1a\x93\xf1\x85)\x03MH\x9c\x0e\x83c\xaej\x19xtO$\x11\xdd\xce\x082\xf1\xb3\xb7\xe1H\xc1wW\xe3 5n\xf8\x98FHW5P\x1d|t\xc5W9Q\xba\t\x98\xed\xb0*\xd0\x8e\x9d\xc6\x88O\xce \xd4u\xb9@\xfcEJ\x1f\xc7\xceE\xf6w\x91\x86`"\xa8\xfd\xf5M\xe1g\xf0\xeb~8+;^\x1e\xf4\x8a\x9dA\x14\x80\x90\xbd.\xf0\xd7\xcc4o\xa8\\\x0bFQ%v\xbd\xff\xaa\x80\x9f\xc0\xd0\ry\xa5T\xef\xb7\x0bFz\xaf\xb9\xcf/TL\xb9\xd3\xfd?\xa3iKv\xbd\x8e{M3\x9f\xc1=\xde)\xaenm\xf6\x15\xf0\xc2\xf7\xd0\x06\x18\xad\xbf-H\x85\x08\x01\xe7g\xb4A$\x08<\'\x88\xb6w>\xe1\xf50\x81\xba\x0b\xd0S\xf5LA\xe1\xf5\xf1\x08q\xd7\xff9\xc0I\x06v\xf4\x83\xa1\x16!\xcf\x13\xca!\x84\xb4\xb2\x1d\xe6cm\xfd\xf5\xea\xca\xb5q\xa4\xf5XCYl\xd7\\\x85\xe9t\xac\xe0\xdb\xe1\xc8\xf0\xbfH\xaa\xc8d5\xa2\xc10/*\x85\xa6\x1b\x03\x9fbv\xb7\x8e2\xe3w\xa3C\xb6\x81\xd8\x14R\x94\xf8H+\x03\\e\x14\xe8\x8d|\xb9\xf2\x04=\xef6\xdb\xcb\x1c4\x1a\x91\xc10z\xd3g\xd5\xc0\xfeI?cD\x84\xa70\xd4bu\xbfY\n\xb2Ju\x82\x14\x82\xd8\xbb\xedF\x18\x9e\xbbp\x1f\xb4\x16^\x14\xcf\xe0\x11\xa8o\x18\xab\xec\x0f\xd8X\xa8\x95\xcelGuo\xee_>\xaa:e\xc7KZ\x16OX\xd0\x98\xa6J\xc3S\xe3_fE^\xa4v\xc0\xa1\xb9D\x04\x87\xfc\xd2%E\xf5j\xf0]0\x13K\x06@\xf0\xf6\x05!\xde\x9f\xa4\x85\'\xa3\x8f\x9e\'G\x87\x9a\xde\x12]\xd0\x83=\x9b\x1f\xe9<\xc4\xb8|\xa8E\xf4\xa1P\xf4\xdf\x01\x93\x86\xb7\xc0S&i\x9e\xd7\xfe\x80:e\xa3[\x1bUd\x08\xdbE\xba8\x9a(\x04\xeb5\xa7m`R\xfc\xbf\xe6uxBVe\xc3\xcb*\xfb\x8c/g\xb7\x1e\x07\xc4\xae\x01;\xc6!\x9e\xd4z\xd8\xcb\x0e\xe1\x96\n\x8d\x96]\xe1\x11\xa80\x1cd\x1c\x8e{\xd9E~\nX\x8bmQ>W\x19\x1a\xbf\x9e\x8d\xe9`D\xb4\x91/\xcb\xe6EV\xd7\x1c\x85\x01\x1aY\x89+\xa6#\xd1P\'\x02s\xca\x16\xbd>\x10\x91\xdc\x97\xcc\x19e \xae\x84\xd7P\x0bM\xe4\x99\x94\x8d\xb2\xf15VU{\x9f\x00bc//DX|\x08P\xfa/5\x1d\xa9\xcb\xdbQ\xc9d[^`\xbc\xf1N\x01\xd1\xb1/\xee,*d>)Z?\x96D[\xe7\xa0TZ\xfb\x0f\xa1\x9a\xe0F\xce\x8e\xb2\xfe\x89\xd4\x9d}\xb2\x1dq\x18\xb2\x84\x1f@\x0b\xa8<\x9ar\x19\xa2\xc3\xda\xc6X\xa7\xf8\x15\x16\xf4\x0e\x02\xcdb\x90\xc6v{\x95\xf6b\x9f\xff\x8b\xef\x8b\x9b\x10?9!\xa7 /\x8fg\x9e\xbd)\xd0\xde\x18\xb68|\xc4~\x1cr\xda\xef\xeb\xdd\xfa\xa4\xc3\xc6l\t\x89b5\xe2;\xc5oE\x08e\xf9:O\xf1\xc17@:\xe4\x89\x80\x04\xdc\x899\xfb>\xef\xfe(@-2\\\xff\x1c\xd4\x9e\xd8\xe0\x94\xb1\xbb\x00W)b\xb3\x80\x9cCC\x86:\x92\x7fmW\x01a5\xeal\xfe\xe8[\xf0%j\n<\x0c*\xbb\x99\xce\xec9T@Z\xbcg\x8d\xad\xae\x0fI]]\'\xb4\xa2\x86\t\x0e\x8a\x8cJt[\xd8\xd7\xbe\xd9\xb9\xee\x89\x1b\xf2\xa6\xdb\xac/\x8c&2B0\xc4\xea\xbc@TD^\xc9ze\xb9\xd2\xf9\xfc/n\x06\xad\x12\xfcw\x07\xe0\xe4~\xd3\xb1\xa6\x18{\x80\x00\x84\xd3\x81\xf0\\B\xb9\xaewoj\x90\xa0\xc5\xb5\xa40\xc9?\xaf\x1eJ2V\xca\xb8T\xba\x7f\xd8q\x8e{}\x8fW(>\x87\x9b\xbc\xe9Dg\xe1\xa1&\xf1\x19\x0ca\x13\x80\xda\x0f\x1d\xbe\xc1\xb8*\xb8\x01\xa5\xac\xa4\x10\x8e!\xdb\x80G\xfd:?J\xed\xb9$\xf9Zzb\x06\xca\xc8H\x12J\x82Gl\x97\xbf\x03\xd7\xfdv\x04\x85\xefm\x1e\xc0\xbf\x90\xdc\x13N\xa5{l\xf3\xb8\xb8\x8b\xc5R6\x1b\x17\xd6Q\xf9yK\xd4\xcc\xcb@#\x05\x9e\x96\xc7\xf4\xb3{\xa6\xcd\x01SQq\x12bY\xbc$Or\x06by\xd8\xcc\x8b\xc6\xf2\xaa\xc7K\x10\x1f\xceLe\x9c\xe5\xd0\xa5\xcf\x99|s\xaa\xed&\xa9\xfa\xd6\xa6\xc3\xedO;\x93\x91E\xe1F/\xb3\xed\xdcC\xf46\xe4\xfa\xb1\xb8/7\x19T\'\xd6\xcd\xa3n\xdcu\x146Yw\xd6l\x85\xed\xe7OY\x83\xa6+\xd1/Vr\xb94\xb2V\xb0d\x9f\xaaK&\xbb\xae\xa8S}\xa5\x87\x04\r\x1e\x8c\x0b\xf6\xc2\xafWr\x99f\xc42\xdb\xb5\r\xdd\x83\xc3\x1cL\x11~yg`ZS\xfe\x9b+\x10[.\xdc\xe9\xaf\xc9\xe0!\xf2j\xd31\xe3\x0b\xb5,}\xd3\xa7\xf4\x99\xbc\xc9\xd1`^_\xf0Mqc\x04c(q\xf9\x91\x10\x8b\xa4Kx\xda(\xed\xc0\xc2\xf9|\x9a%pB\x854\xa5\xack\x84\xa5\xcf\xef\x9d\xc4\xe4:>3f\x9ac\xc0\x03l\xe4\x8c,\xfeaJJ\xa3\xf9\x964\xc9\xef\xd7\xee\x19\r\x03\xf7j\xb4\x1f$\xb9\xc6=\xf1\x90\xb8\x9a\xdc.\x1a\x8b\x83T\x08\xdf/\xe3k\xf20d\'C\x8f\xa0\xd59*\xff\xffV\x04\xc0\xec\xf9\xde\xb1\x0bP\x97\xfe\x91K\xe2\xa9_o\'m\x8a\x82\x11\x0c\xd2Ra\x88~_Z\x81l\xf8t\xaa\xf7{\xa8\x93\xa9~\xdb\x94Ir\xa1\xc7M\t;\xb4\xef\x0b\xbfe\x97\x84P\xa5+~#\xa1\xb2Ev\xbch\x97\x05\x882\x01x\x18x\x92(QonW\x80\x93m|\xa7\xb3\xe9\xdd\x1a\x939/\xa8\xeb(*\xede\xfeTd\x19G\xb0\xdb\xacV\x92}\xa3\xdb\x19\x10\x97j\xd1\x11+X3Mz0\xbd\xb6\xe0\xec/\x85\x00\xe03\xf1\x7f\x1c\xfcq\xd8[h\xc2\xd0\x11\x8b!\xeb0\xeeb\x8d\xf7\xa4\xc0\x0e\x03\x9f\xe2&\xb7\x8f\x99\xfb\x83\xd4\xe9\xfd\x9c\x1fy\xd0\xfb\xd3\xc2\x0eJ\xf9\xca\xb0i\xdd P\xcc"O\xd0\x19\xa7\x19\xab\x80\xaa0XH\xb2\xf5\x1bj9\xb5\xe5V\x9d%$w,\xbf\xbb\xb3$o\xfd\x02\xe7yKQb\xf0\x1e\x8d\xbd\x82\xd8\xc8X\x15q\xc2\x1c\xa8\xe8\x0bX\xab\xf3\xa7\x95\xf4#\xd2\xfb\xb6R\xf5\x8b\xa8c\xaa\xfeng\xea\xb3c\xf5\xe8\x87\x07\x0e\xd6E\xbf\x8d\xcf\x19\x06tv\xa8\xcd\xf5\x9c\x1en\xc7_g^*\x9f\xc1\xe9\xc4\xbe\x04v\x04O\xb6\x00\x85\x15\xf77\xb8\xb0\xda\xa47\x8ca\xbco\xa8\xeeg\xc7\xb8\xaf\x89\x8a\xa07\x0e\x87S\xa8Sz\x06\x93\x8c\x9a\x13i\xef\x9c\xc9\x82=\xed\xd4\xcc*\xb5\xa5\xb1\xf8\xb9&R\x84|\xb8<,\xef\r\xa8\x06^\x1d\n\xd3\xdc\xf6\xc8.\xafEsq\xae`\xea\xf2*\xc8#\xa7\x99:\x9f\xce\xcb\xacQ_\xfe\nq\xb2\x19\xb4\xb9\xeb$\xc0\x91c\xb2\x8c!\xb4c4#Kd]"{\xd2#\xcd\x8a\xd98\xe6\xf5\xa0\xa9\x0e\xf7\x96\x8b\xb6\xb7\xb3r\xf3\x97\x1d`V\x13\xbcW|A\xcc')
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:31.678538
2
- from pyarmor_runtime_000000 import __pyarmor__
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\x00S\x05\x00\x00\x12\t\x04\x00\xf2v\xd5jr\x10i\xd6\xdb!\x8c\x7f\xf4\xed\x84>\x00\x00\x00\x00\x00\x00\x00\x00UF\xf2\xb4\x19x\x97\x81PiU\x86&\xac\xb1\xe0\x94q\xb4Z\xac!\xbf\xa7q j\xecF\xd0\xb1\x98\xb8\xed\xab\x87\x9a_\xa4A?\x9ax\xfb\xe8\xc3C\x9a\xb0\xa0Wn\x1e\xea\x88\x9f\x8ch\xda\xffII\x08\x7f1\nsx\xbeq9n\xc5[\xc2U\xeasm\xd9\xb5\xd7!\xff\xe6\x8a\\\xcf\x8fL\xc8\x0f\x0e\xe8\x9d\x99\xbb\xd1x\x8e\x8c\xe7\xcbj\x89\x9c\x04\xd5J8\xe8\xda\xf1\x8c\xd9\xe4h\xeb\x95\xfa>\x89\xee\xc1\x17\x98\x84\xe3\xf2\x10\x94\xedZ^\xc3\xc4bX\x82]\xd1\xe9k\xb0\x8cJ\xe7\xec\xe0A\x13\x11\x0b\xe0\xc5}\x852\xbd#\x9em\xadFWT>\xc2\xec\x17y\x80\x96\xbf\xcd\xfbgt\x9c6\x9d\xe1D.x\x7f\xce\xca\xe6 \xee\xc4z.\x8f\x19".}qw\xb40Yq&\x8ch\x1e\xf5\x9f\xc0-\xc5\x18\x0f|\x9e\xb4q\x18\xacf\xb4\xa9\x95\x02\xa2m\xea\xd1}\xf1\x8db4\x89 \xc8\x1e+"\xc1\x7f)\xd0<\xfe\xc6\xa8q.B\xa9.2V\xc4\x93=1\x1e\xd0\x82\xb5\x95\x9b/O\x1d\xe9T\x97\xd4:\x11d\xd1k\xf2]TD\x02\xd2z\x06\xd1\x00\xee\x1f\xab\x19\xcd3\x0e\x8f)~jg2\xcc\xc8\x11^\xcb\xbe[O\xf98Dc\xb8\x10\x1b\x10\x85\xaa\xb1*\x82q\x98\\\x85u\xb8\x9d\xef\x8b\x88F\x85xXW\x80\xe3\xcf\x8a\xf6\xcf\x1eJ7\xea\xe9,s\x1c.yB\x0b7\x9a\xdft\xf4\x95n\xe4\xb0RU\x90O\xb3\x8c\x06\xa5\xb1\xccn|\xe7\x18|6\rzQ\xac8\x90O5\xe2\x10.\x9e\x1aE\xf3\xba\xf5\xa1\x826uu\x80\x1c\xca\xa0\x0c\xd6\xb75\x1eJ\x140\x1f\x1d\x96\xc55U\x1c\xd3a\'\x18\x16\xcaX\x1b5S\xef\xe2\xed\xda\xdb\xbe\xd7\xd9\xffg?\xf3\xb6\r\x8c\xa6\x9a\xe8=\x90\x86\xb4\x1b\xda\xac\xb3W\x14Fx\x0e/\xbd\x80\xa9L\x19w\xd0\xdd\xd1\xffw\xd8\xd3)\x9f\x99\x8c\xe5r\xa9\xd5\x9e\x81\x03\xd3\x121\xfb\xac\x01\xbf\x99\xf5\x00y\'\xe7\x12\xa7\x1d\xb1\xed\xffz\x9a\xf4R\xd1\x998(\x7f*\xef\xe9\xdaM\xaf\xdc\x7f\x02\xedR\x89\x8bM\xaa_pB\xa2\xa24@\xf4\x9dM\xaa\xd1[\x93\xf2\x12\x13\xc6\xb6vJE\xaej\xe2{$\x02\xcbt\xdbi>\xebDWB~a\x04\xc1\xedZ3\x04\xee\xe4\xd0\x103v\xf0\xd2!\xaa\xd6lIu5\xad\xfd\x95\x0f\x9c\x9fI\xa7oN\xed\xe0\x12\x97:^\xac\n\xaa\x00Y\xa3\xe7\t\'\xf3\x11\x15\x86ly\xff\xb4 ]\x81\xff\tjA\xd9U\xe8\xb2<\x94\xa7~0\x08Rne\xa3fm2e\x02z\x99\x0c\x1e]\x96\xf8\xda\x8e\x84\xb3\x01\xf0\xdc\x91S\x9d\xff\x04Ou\x1d\xa8\xc9)l\x7fuo\x0c\x11:\x19\x83\xb7\x1b\xe7\xb3mSi \xb2\x83\x93\xa7$f1(\x02\xa7=di\xads\xa7\xcb\xc3\x13\xca\xa5OQ}W\xe6*\xac\xb4\x87\x1f:\x97\x91\x11\x95\x9f+\x15\x86i\x8bG2\xa2\xde\x84\xa3\xb6\x83\x95\x08\xccY\xfe\x17\xd2\xac\x0cr\x15\x8f\xfd/1\xc9\xf3\xc9/\xc0/.\xb9\xf9kE\x8c\xdb2\x83\xd9\xfd\xc4I?\xd5~zU\xc3\xb6_\x07\xb7\x9fE\x13\x17\x11O\xb7\xd3\x87\xed\xd8\x1f\x0b\xe9\xf9xn\x9cq\xb6\xbet{^ \x9d\x88B\x97\xd2G\xc8\\[V\x03\x99\xd2Xa\x89\xb0;\xbd\xbeJ\xd3\xd3s\xfdR\xe9\xcb\xe7R\x8aGu\xe0\xc0\xc8\x06\xb6\xe3\x95\x1d\xc0\xc8\xb8\xb8\x11\xe3\xaf\x0et\xb5-\x80]%\x0c\x11:\xadwLOg\x02K\x1d\xe8\xdah\xec\x82\xb2d7\x8d\x84@1\xef\xa9\xd8\x99EC\xfc;\x12\xdeY3\xee\\\x00\xfe\xacV\xd7\xe1\x02e/\x11.\xddZ\xb7\xacgg\xb8\xc7#5\xf7A\x11(\x85~\xca\x863uSwSz\xe4\xf3~Y\x89\x9d0\xa1q\xc3\xf3\x89B\xa8g\xccQ\xae\xcd\xfb\xe0\xc3\x04\x9d\xf7d\xcc0\\\xfc\xac\xf0\xf1\xcf\xa2\x01\x80\x8f\xa9\xf4\xcd\x1e\xc0\xe7Y\xb4\x83\x80M)\xed\x077\x89\xb8\xf5\xc3\xc7\xa1\xd0\xa8\xf5\x83b(\x04\xa2r\xca\xd3>\xe4\xcbp\xa8\xa4`\'\xfa\xc5\x9c\x88\r\xac1w\xb2@i\xbf\xedc\x85\x90W\x9f\xf7\xea\xd1x\xd8\xafv\xdf\xd8;\xb8\x1f\x8a\xf94\x9f\xf9,\x0c\xacPq\x0b`N\x84\x89\x12\x18\xd1\x81\xe4\xf2\x1c\x98\x94\x90g3\xd7\xa9]\xe7\xc8\xc8)j\xf1\x0c\xfbH\xe9K-\xd6THA\xf0\xf5\x99d\x80\x87>\xd1\xa5\xe6;\xafCH\xb0q+R\xefo\xc5hl\xd5\x9c\xb5yn\x9dW\xd5\x9f\xf3qC\x93\xb0\xe8!\xf6\xf8\x08\x0f\xfd\xf8N\x85F\x18W\x12)kV\x86\xb0\xdaU\xd7\x8f5L\xc7)\x86>\xe6/g\x15uy\x88\xb4\n\xa3bbA\xe4.q\x8d\xa0(z\xb1Z\\\xbem7\xd5\x8d\xc6a\xcd%\xb1\x9b*\x05\xda\xc4\x81\xe8(]\x83\x02\xba\xf4\x81P\xc6$\x8bv\xa7\xdd\x16\x92\xaa\xef\x87\xd8V3-k\x04\xfc\x0c=A\xbdW-*\x19\xafj\x95y\t\x04 z\xb8tK\x96\xf8\xef5Pr\xc6\xbf\x07\xb6\x1e\xda\x01*=!\xbcJ\x07\xd3\xc8\x83[\xb7\x97n\xb6\xee\x90!G1\x9dY\xe1\x9d%\xcc\xb0a\xect\x9b\xb8q\x10\xf1\x9au\x07n\x80\xdb8\x85\xbc\xd6\x99\x02\xb1\x0c\xfcm>\xa9\xfa|<\xc5\xacc\xb3\xbc\xea\x97-\x87\xb7h\x18w,\x8fsh\xfb\xe6\x82\x03\xf3\x11\x95\x02\x1fc\xecM\xbdr\xf9\x00\xf9\x19\x85UN&\xc9\x9a\x89\x83\x0e\x17H\xc4\x10\xaei\xe7\x96')
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