hiddifypanel 3.0.0.dev64__cp38-cp38-manylinux2014_x86_64.whl → 3.0.0.dev66__cp38-cp38-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\x08\x00U\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\x0f\x0f\x00\x00\x12\t\x04\x00\x93.\xf4\x841[c\xa2)\x81\x0e\x1b\xe6XFC\x00\x00\x00\x00\x00\x00\x00\x00HL2\xbf\xb8A\xd5\t\x04.Q\xa5\x8b\xa9#\xa0\x85\x89\x86}\xf7\xdb\xc6\x03\x1f\xf4\x13\x83#\xb6\x91x\xbd,p\xf1\xebu|\xacm\x97\xcc\xa0\xc6\xc7Z^vC\xd8/\x0f\x90\xe0bU\xe4\x89>\x83\x19QJ\xedD \xe8\xfa]O\x8f\xea\xec\x99\xe7F]t\x90\xe2<~\xb1:\xe3A{\x057kv\xfb\x01\x16\'\x1e}\xdb\xe9\xa3xKQUdr\x17\x11\xcc\x17\xac\x9f\xd5rE\x01\x83b\xd6\xa7\x17\xdb\x89\xd0I\xb4\x8c\xae\x8c\xd9\x0bY\x12\xc1\xbd\xef\x14U\x9e\x02(ZN\x13\x85\xa9\xb0=N\xe3\xbe\x18j\x97\x11\xf4\xdb\x87Q\xccU~\xf3\\k-\x0e\x02\xc2!\x95\x1e\x99\r,,\x99W \x9d\xdd8\x9d\xc6\x82\xa0<\xb8}\xf6\x04\xfb\xb2\x96\xcd\xf6\x8f>\xd5!\x1e\x1e\xdd\nY\xbdXrmg\x0e\xee|\xa0,p\t\xcbh\xea\xf6o^\xf9\xa3\xa0\xb5l\x97>\xb3a\'e\xd8\xab\xe2#Xb\x85\xc6Q\x18\xca1\x80 u\x9d\xb0\xc5\xd2>\xc0\x02<\xae{v\xafw\x18\x98"Y\x86e\xef\xeb\x12P\x17\x8a{SN\xbf\xd4\xf4p[9\x86\t^\x1a\xeb\x01\x14\xf6\xe4\x84*\xb6\xa1s\xeb\xf5\x80,\xd1\xf7\xe9\x07g>\x9ar\xd5p\xe2\x02\xc0I\xe2\x12\xe1+\x15\xa2\xf6V\xd5\xde\xe3x\xa7\xfd\x1c\xe6\x83\xad\xa5\x91W\xb3(\x02z\\0\x84=a\xe0\x92\xe6\xb8\x1fe\x19\x96#\xd1\xfcl\xb9\xe6!\x9b\x1c\xc3a\xa5\xe03\x18\x12\xaf\xa6\xf6\x03T\xeb\x85\xca~T\xb1\xdd4-\xae\xc0\xb7\x17;\x1d\xbe\x8b5\xea\nL;[\x0fCxR\x02\x95\xb3!\x94\xbb\xdc\xa0\x17\x8f,Y\x1a\x83\xa9Y\xbd:v\x92\x8c\x84\x0f\xaa\x17\xcag\xa0G\xf2\xf6\xb9\xbcR\xc06\x00\x985\x9f\x06qF\xff#p[\xfc\xd0w\x19d<e-\xdf\xe9\x00\xc3\xad\xbd\xa5TV\xcch-3eE\xa3\x17\xc4D\x8a\x8c\x1e\xc2#9\xfb\x998\xbd\xb1f\x99<\x9f\xde\xd5v\xa3H\x92\xbe\x10\xd6\x89\xb5\xb2F\xf703\x00\xd7\xcd\xb9\xbc\xfcB\xfbf\xe4N)\x10\x0c\xe9\x90I\x8e65\x13\x0b\x16]!l\xe0er\xf94\xa5\x99W=\xbdvw\xc5\xc0K6\xef\x96\xb3\xcaC\x84\x14\x9b\x1b^f\xe5\x06\x87\x0cW\xb6\xd1\x9eT\x85\x16\x9a\xc4J\x8c\xf92\xebA\x96\xcc\xbb\x98\x85\x10\x12\x1a\xddd\xd91\xf8r\xaea\xeb\xf1\xb6\xc4A\xf8\x02\xae!\xce5k\xb9\xc3O\x0b&\xe2:\xa3\x9ata\xb9\x04,\xb0\x1c\xa7\x07\x8a\xf8In\xaa3E\x91\nh\xed\xe6\x89\xe1K1,G1H.\xd1\xe0\xbaF\xb16\x00"k\xff\x04\xd8\xc1;K\x1e\x94/\x9e>\x83\xa2\xba\xd8]\x881\xc56\x0e\x87\xa2\xf1F\x83\xd0\xcd\xf3\xd3\xad^\xff7\\r\x06\xfd%G\xa7R<`\xf1\x8d\x02T\xfc\xd7]\xcd\xa2\x7f\xd1\x8b\xdb\xec\x82\xc2\xc5\xb2(\x08\xb5<U+}\x12\xcd\x15/\xffG\x16\x91\r\xb2\xe9\xb1I\x88B\x84\xb5\xce\x9d\x8a\'\x06\x91\xf0\x9d\xb7\xfe\x88E\xd8\xc4}p\x8dj\x81\xa7\x87.\xae\x1d\x95\x93\x1b\xc1&\x16\xbe&\n\xef\x86I?\x9d\x81j\xb5v\xc5L\xa5jr2pI2fa\xd4\xd7c\x94[\xc1\xe2~\x98\x1e\x80\xc50p1\x9b\xf9\x81\xc3\xac\xa7\xc6\xb5\xf6\xfa\xdf\x831>O\x19_\x11\xbf\x18\x89$\xe8\xdd\x9c\xbcxk>\xcd\x15\x1a\xdb;\x94\x07\'H?`\x8d\xe1;y[\xf8\xa1g\xf1ph\xfb/\xc3\xdb\xa6\x1b\x93Lu\x99\xe3(\x1f\xe3U\x9e~\x0f@\xc3^\xc0\xb3\x13Y\xc1\x10\xc6\xdaOxmT\x9d\xe1\xccY\xd2\xee\x01\x93\xde\xf1O\x97\xb4\xa2\x89\x8d\xf0\xf5\x1a\xe0\x9brRuD\xbb\x15b\x8c\x1b{\xca\xda\x82F1\xff\xb5\xf2q\xbdC%J\xd4\x19\xebG \x86H"\xc4\xff4\xa3\xbcB\x193\xdc\xa8#\x1f:\xe96\xf0F\xd9Z\xf2y\xa7p\xe3\x93\xda\x9cK\xb5\xa0\xe4\xb0\x87\x8cPVR\x1a\xf0(}~Na\x16\x8e\xd6kfe|1VdY\xa4@\xdfa\x0bh\t#\xfb\xc7\xf0\x89\xdd}\xb2\xd3\x91/\xfa\xac\xd7\xe2\xcc.V\xf7\x14\x1d\x15\xd3\xfc/\x1em\xfb+\xa2\n\xbf?F\x92\x14KS\xeck\xce\x93\\\xc8\x15\xac\xa3e\x0b\xf7\xfaw\x150\xafoQ\xec\xac\xdaF\x1f\xb3\xeaHz\xe3$i\x1bW\x99\x1f\xa0Ew\x1f;\xf8\xf3\x85\xc2*\x83ktE\xcdx7\x19\x0b7\xf0\xb5[\xb5</\x93\xa2\xcd\xe7\x0b\x05ir\xf2\x8c}\x9d\xbb\xf2\xb30\xb7\x1d\x0crE\x9b\xca+X\x148\xfdb\xa9p\xcev\xf5\x08\xa3G\xca\x13v\xc7\xe0\xbb\x92\xf3\x85I\x10H\xa3@\xb2\xb5\x1e2\xd7a3&^\xf7p\xc6A\xe5\xa8ZW\xfaU.\xa4\x16\x9d\x83\xba\x1e\xca<_&\x0c,K\x00\x19\xf0\rd\xe1O\xe0\xaf\xb8\xb0\x9f\x03\x87z\xfa\xee\x9d\xf7\x144\x94\xca\xfe\xbb\x03\xbc\x89T\x0e\xa9J\xfb\x0e\xd6\xda\x11[\xe0\x9d\xc3\xb8\x98\x01\x19\x92k\xe8\xa2\xca!\x1c\x83b\x9c\xc1\x10\xc99\xfa\x9f\'1\xd5y\xea\xe1\xd8\x0c\xa8r\x98!\xc4\xad\xe2\xdaD\xb3wi\xa2\x12\xac\xa2\xe4\xca\xccp\xe2\xbb\xaeu\xc9\x94\x1c\x1a\xa1\x81_k\x1c\xd0\x0e\x13\xcc\xde\xacg\x15U\xed\xcb;\x0c\t\x1d\xfe\xf5\xb4$B\xea?\xf8\x816\xd2=\xd7\xa6\x07t\xab\x82\xbb\x89\xb3\xd4\xf1w\x8fe\x8d\x95\x19\xbd\xa1\x1d\xdd\x184"7\xec\xe5\xde\x8c\xaf\x91\xa0\x19U\\A\x9e\xf4\xb7\xa0F\xa75&\xd2\xbe\xbb.\x91l\xd1\x18\xc3\xd1\x18\xb6\x07\x1aq\xbc\x18\xdd\xd6DR\xb3I\x88D\xecu\xe5+2e/y\x81\x9f\x92\xb0Y\xde/{\xbdN\xc9\x1f\xbf\x82\x90\xf9\x1et\r\x06\x1b\x85\x10\x9d\\\xcc\x18\xe3\xb3\x87{\x9dX}\x16\xed\x1d\x92\xb5$p\x88Y\xe8?\xfd6\xb0\xf1\xd5\xf7\xb6\xaf#\x1d1_4<\n|\xb9\x17J\xb8\xcd;O\xdde@\xab\x81A\xf0M\xd5L\xfa\xf2 H\t\xbbv\x0e\x91\xba\x97\t\xa55S@\xe3B\xe0=]\xcd\xd5\xab\xfa\xb96!\xf8\x00\xd3H\xfd\xc26f\x1d\x06\x8a\x99\xd2\x12\x1d7J\xea::\xe9\xce\xa7\xc4K~\xe0\xf0\x8d(1\xc9\x03\x13!1\x01\xbauQ\x9dY\xfbN\xe0\xac\x08\x1en}\xeb\xaf\xb4O&\xb2\xe5\x1a"\x99g\x81\rW\xf6\xbb\xe8\x05\xf94\x8b\xd0\x0c\xbe\x96O\x1b\xe6\\b\xb9\x9d\xe2#"\xb9\xdeV>)\xe7j \x89\xebi\xc6|\xf2\x95*\x89\x9b\xcc\x91\x18\x92tT\xaa\xe3z\xf1\x0f\x9f%E\x13\xdf\xea\xda\'\x96\xf8r\x1d\x98\x0b\xabb=/\xe0\xc8\xb2\xb0E\xd8PB3GJ\x8c\xca\x7fE\x90\x8bd\x05\xfe\xf6\x82\xd8zq\xc5y\xe0VW\x9aV<\x1d\x903\'\xe5\xf4\xb6\x16\xe1\xe9\x86E\xc5\x03j\x14nn\x7f\xc8\xc3\x17\x95[\xcb\xa5i\x13\x1d\x90q8\xa1\x14y\x9ca\xbc6\x05m\x9d{\x89\x17\x87N\xb6\x82\x10 \x9dyR\xfd(\xc5\x98\xccH\x8a\t\x81\x11\xb1"\x16\xd9C\xe5\xc5\x17\xa7\x11\xba\xc4\xd3\xd3\xef*\x8f\x8c|\x02Z(\xc1\xacA\x9e\x16asW\xa8n\xfa\xacP\x93:(\x0cr\xf38\xa2\xa5\xa9\xd8\\\xbb\xd7\xa0\x1a\xda\xdc\x03\xc7\x89\xba|\x10\x18\xdcta$\xa8\xa1\xefh\xb9\x18\n5|h04\xe4t\xb3\xb5\xef\xa5\xb1\xef\xed\x9e(\x0cX\x81\xeek\x85%Y\x08lPmU\x0bgeTGB\x9b}\x069+\\\x9c(w(\xef\x81\xbc\xc3#p\x8d;\xd1\xc6\xae\xf0\xa0\x91Q\xc1T\xfa\xa4\xa3\xe3\x97q]\xa37\xe5\x99\x93+\x94|\x85\x86\xfa\x1d-\x9dJj\xd7v\xe9\xec\xf7\xf3\xa1\x8a/q\x9b\xf1=ZGx\x88\x16\xee\xa4n\x83\x837\xec\x1c\x1b\xd1\x17\xc7l\xc9\x9b9,bN8\xca`\\\xa4\x9b\xc5=\xfa\x80\xfbC\xedTr\xa2\x84\xeb\x0c[m~\xe5\x85Q\xa3\x88~Oq\xa7&\x04wC0%r[\xf1\x028\xe5\xaf4|=^)\x80\xad\xb7wB\xcaZ6\xda\x953\x15)\xbe\xa0\xc1\xd9Y\xdd*\x80\x9e\x9c\xed\x8f5\x85\x7f\xf2\xc7\x18\xd6\xaa)iA\x05\xc5\xeaBK\xa9PQ\xa5\xc6\xfe1\xca\xe6\x84\xe5T\x1e\xc7o\xf1\'\x887,\x8d\xe5\x93Or\x1a!\xb0\xf8f\xeb\x858\x98\xfd\'f\xf2\xb1vy\x15\x15K6\x8b\xa8\xa1\xaf5\x03\x8d\x82\xf0\x1b\xd6\x05\xa9\x1a\xe1KzSHZ\xd5\xd1\xc1\xfekA\xa5\xed5,\xf0\xd3\x9aS\x88\'\x99\x98\x9e\x0eyS\xdc\xbd@uQb&\xc6\xbd\x96\x12\xd9\rJ\xaf\xc9s\xd5\x9d\xeeJ\xbed\xe0 \xed*w\x9c\xe1P\xb9!\x0f\xc3m\x81s\xe5\xb4\xd0\xf7\x08\x0c>\x92\xa6*J\xcc\xf6mOj\x1bE\xbd\x92\xd5\xbbI,T3\xf5\xd3\x99K\x07\xaaC\xa4\xde9D\xd0g\xe0\xbe\xc3\xdb[S[\xb0W\xf9Yhq\x14\xe9s\x8a\x85o\x13\xa5\x00\xcc\x7f\xbdk;e=\xf3\x9c\x1bw\xc3Zb\xe3\x98Ge\xe8\xdc\xd4\x91\xfa!\xc1\xa7\xbb-70|\x83A\xc0[E\x8f\xc5m\xf8\x0eD:\xe2\x1bR9\x1d\xc2G\xf1\xd5>\x18\x13\xc8\xd5\t=s\x1c0S\xb8\xd0j+N\x1c\xea]\xd2gC\x80\x02\xe1K\xa1\xd3\x04\xd3\x98\xe3A\xb2\x93Z1\x1d\xd8\xe4V\xc66#g\x0b\xb5\xdb\x891\xb2\x86\x13V\x97\x11\x91\xe1Y\xa1\xb6\xa4\x08\xef\xbe\x19\xe4\x10\xfc\xd7\x0e\xaa\xe4\xd54)F\x14\xfd\xed(\x87\x0e^R\xaf\xd7;/k\xbc\x87/\x82sW\xd7"\x0b\xfdR\xdac!w\xd8\x7fD\x9b\xd9CI\x81\x1c\x89V\xe1\xba\x82\xc8\xab=\xd9T\x11\xa0\xe7-=\x17\x97B\x1e\n\x83\x17\xd5\x93\xeb\x04\x16K\xd7a\xc7\x9b\xdf\xb5\xbc\\B)\xffB\xcaS\x94^#\x19M\x02/\xe5AJ\xd6p\x92,\xb3\x80\xe1\x90\x81\x9a\xdf\x0c\xe3\xdd\xe9\xb7\xbf\r;9L\x85\x82g/4\x89\x83\x83.\xbc\x07\x90\xdc]P\x99RI\x115R\xbb\xf5\x0c\xfcW\x14\xcf,\x9c\x82\nb\xb4[\xb3\xcbi.\xfa\xba-\xc7\xdek\xed\x0e\xd9\xd7\xb4\xe1\xba8\xb9pID\x88U\x14\xa6\xe7\x08\xdb>\xbb\x9e5\xd4,t\x9eJ\xf2\xaa\xfe\xce\x08\xad\x1c8\xe5Yx\xea\xb4\xdbl\xa0Y\xf1f^\x1fjq\xf0Y\xf2F\\+\xbc\xe09\x0b8\xe1\xea"e\xeb\xe1\\\xca\x8e\x9d\t\xb0b\xf3ke7\x0f\xe2\'\xb40\\]@\'h[\xb4\xd5#\xb3/_c\xf0*V\xa5\xd8\x90\x18\x8e\xb9\x1c\x10q\x97\xe83\xces\x0f/\x1eT\xe6\x8b\x8a&-\x1en\x8e\xf5\x9f\x80\xf4\xc5R\xc1<o\xef$F\xcc\xae/\xe2\x06\x1bo\xf5\xaa\x01\x83Z\x1d\x0b1!QMcy\x1a\xcd\xcd?\x89\xd8*\x9da$\xf8\x9f\xf0\xbf\x9c\x7f\x96p\x90\xfc\x7f\xd2(\n\xc9\xa2\x00r\x9f\x96\x0c\x1d\x9c\xc8?\xc3\xe2E\xe3!\xc0\xdc\x13MI\xa6\xc7\x06O \xa3\x9a`4\xfc\xca\xa6\x06\xe6\x08\'c\xe4\xabb\xa6R\x89\xae\xac\x17\xf1\xed\x16\x0b\xafbQ\xccMLp\xc6\x92\xef\x13p\t*o\x0f\xc3\x04\xbe\xe5\xa9\xc8\xdal\xbc\xbfr\xa4\xe0t\x12\xa5\xac/\xc5\x14\xda\x05pN\x04\xd5z\xf4\x99\xcb\xc4\xf3\xb6\x8b\xac\xb7\xa4\x12\x9e\xc8~2\xceN\xb8\xe6\xfdJ\xa6g\x1a7pX8\xc1\xfa\xf3\x96@}\x9e\x13\x0c%\xb2[\x0c\xf5sx\x9c0o\xf2#\'\xa3Z\xf2h\xf9\x8d\xe4\xabE\x1d\x9cV\xbd\xa5\xd2\x8f\x10\xcf\xa2\x00C\x9d\xf5\x93\xd0\x00\xc9.%\x16\xa5\xa1\xa0\xc4\xa6\xeb\x9e}\xf0\x11\t\x11\x8f\xe0\'\x99\xdd(V\x99aW:\xc5_\x9b\xe7e\xbd\r\x19\xae\x97\x9d7)&\xe2\x06Z\x15\xba\x8f\x90\xfa\xa8p\xe3\xc0\xcc\xcb\xfc\x1d\xf0@\xbf[_\xe9\x81\x86\x12\xf2(\xba\xdc\xae\x10\xbe\xa5u\xbcI7\xbe\xc7J$\xf3mR\xcf\xd3\xe9\x1f\x16\xfb\x8e\xb3l\x88\x9fb\xa9/*!\xb4[*F\x98\x1c\x94\xb3\xe9\x085Lm\x8eON|\x01\xeeP\xa3Z=~\xe6h\x1dZ<\xd4\x8f/dM\xb9\xc6\xd8\x03\xec\x19\x8e%\xf9\x16H\xcc1n\xb2S\xc9\xdd\x88-a\x08\x8e\xdd\x80G\xce\xfeD\x01;\xaa\x13\xf5w\x848@\xe6@b)\x83\x15\x9d\xf0\xbe\x9a\x95\xa3mv+\x89\x85\xb3\xd8\t\x9a\xb0$W\x1fu{\xcd\x08<\xf6\xcd\xb4\x99LB\x8c\x1b\xed\x03D\x05\xfbc\xb4XZ\'\x12%\x7f\xe0t\x1b\x85\x9f \xa5\x1b%\x19\x13\x86g\x9a\xf28\xaa/n4\x10\xa2\xeb\xbd\xb2~\x872\xb9\xd0d\xd0\x07\xca\xcf*\t\x81U\xb5\xa0\x924\xbe\xde\x1e\x05N0i\xdc\xb7\x16B[\x05+&\xc8\x81\xf9\x04-\xb2\x01\x96\xc1O\xd4\xca\xc2\xab\xbcj\x94\x1d\xd8-\x93\x04.3\xbc\xa4\xa9\xec"\xeb6tk\xe5q\xfe*C\xe08aG\xd6F\x14&\xc0\x80\x9f\xc1\xfc$\xb5\r\xe1\x9ae\x13\xcd\x1c\x00?\xeb\x89W\xce[\x1e)i\xa8\x82\xae!\x9d\xdf\xbd\xeb\xd6\xa6\xfb\x02th\xf9\xef\x97Wn<\xd5\xd9p\x8d\xd3@\xfd{\x1c\xcf\xa3\x0cd\xec\x1d\xfa\x93\xf5>\xe2\x0f"\x01\x0f\xf1\xb0\xf0-\x94\xb6\xa4\xbdU\x8c\xf4\xa2\xec_^ GM\x8a\xd3f\xd5\x95\x9epFw\x1eaVo**o\x0c\x9b\xa1\x00k\xc6\x11\xd0\xbd\xf4.\xc20\xd9\x07Y3\xd8\xf8^\xbf\xc0\x9bt\xd7\xeb+\xa6\xb2!\xfbGu\xac\xba\xc1\'\xec\xb1\x05q\xc1ib\xe0p\x15\x1c\xc50!;\xc9\xe3\xe6\xbc\xd7:p3\xbef3p\r\xef\xf8\x03\xa1\x1b\xbfn\\\x1a\x1a:c\x91\x9cfZN\xeb6\xa2\\\x18\x0e8^O9\xb47,r^\x89-\xcc\xcd\x81\xee\x01*\x02\x85`\xf3%Nm\x94\xe4D\x1f\xe0\x89\xd9\xe3\x0e\xf3X%"/\x86\xa3l\xfd\x9c\xf7K\x95\n\xbeD\x85!BZ21;|\xb8\xbb-\x88O\xeeVV?\xff\'+R\xc1\xce\t\xe2`\xa6r\xcfh\x11\x80\x88?\xe4\xe8\xb9\xa1}\xe0\x11\x85\xbc\xfe\x03\xb5\xd9\xebs\x16\xf3\xb8\xef\xee\'.j\xe3\xa2\xd7J("X\xeb\xed+\xad\x03y\xb5\xb0\xf8\x1e\x04bgf\xe0\x7f\xca\xd6VK\xcf\x07\xd1\x9cWM\xd7\x05\xa7\x9c\xb8\xd7\r\x0f\xac\x9c\xc5\x08\x8e\xc2\xf0\xb1\xb9\xec\xeb~\xad\t_e~Af\xf1\x0c\xb7\xe1\xdd\xa5^L\xb2U\xe4\x85\x95r]\xce\xde\xbe\x93\x0b\x063\x05\xcdd\xea/\xce\x83\x99\n0\xa3=\x9a\x04\xc7\xec\x12ql<\xbfw\xc5\xfb/\xc6\x95\x0e\x9b\xd9\x89\xa5\xa92\r\xbf&\xca\xc3\xcc7\xf3av\x98\xe0oS\x85\x06\xa6S\xbb\xf8\xf2\xd9i\xe7\'\xa6\xb44\xc4\xd1\x83\x97\xf2A\xe1h\x84\xc8f\x98\xb7x)%\xb0\xd5a\xe1S\xab_B\x1b\xe7\xb4v\\m\xf5{:\xf57}\x84\x9au\xfe\xd2s\x1a{\x14\\\xfb\xc9\xe4\x1at\xbc\xf0\xa9\xee\xef7\xb8\x02.u.\xf1\xaf\xd3\x1a\x9f\xee\xe8\xf1\xed\x04\xfcL)\xa0\xcd\xa4\xb2\xbet\xeb\xc8j\xb6MW1\'\x0f\x10\x99\xb7\xca\xf6_\xab\xc1\xa6\xd9m\xa7\x19\x17\xe6>F0\xd2\xc18\x02\xfb\xe1\xf1k\xd3\xb1\xa9\xc5mt9\x13\xe0\xcb\xc6*\xf2XD\x930ZE\'\x08\xc9\xb4\xaa\xac\xa7pn5\xf6a:\x15Yl\xa5\xd1K|\xfe\xdcI/\xba>\x7f\xa2\xd8v\x11\xbb[|i\x8b\xf7\xc5\xf6\x06S\x8aC@\x0b8@g\x1f\xa4\x05z^\xf2`\xa8\xe2\xa9\xe9+S\x08\xce\xe8\x8b\x10x\x0c\x01N2\xd3\x1aM\x06\x12UE<\x88\xf2\\MY\x1c)\xa05\xda0l_\xd0\xac\xe24\xd1\xed\xe8+\xfed\t\xa8\xd2V\x93A\x01\xa1\xaf\xba\x84\xb7\x822')
|
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
|