mirror of https://github.com/dnomd343/ProxyC
dnomd343
2 years ago
15 changed files with 148 additions and 110 deletions
@ -1,60 +1,27 @@ |
|||
#!/usr/bin/env python3 |
|||
# -*- coding: utf-8 -*- |
|||
|
|||
""" |
|||
xxObject = { # a dict that describe multi-field |
|||
'field_1': { |
|||
'optional': ..., # field force require or not |
|||
'default': ..., # default value when field is not exist (optional == True) |
|||
'allowNone': ..., # whether the value can be None (override the format and filter process) |
|||
'type': ..., # type of field content (in filter process) (any / type / list / dict) |
|||
'multiSub': ..., # whether there are multi subObject (type is dict) |
|||
'indexKey': ..., # index key of subObject (type is dict and multiSub == True) |
|||
'format': ..., # format function (before filter process) (invalid content -> throw error) |
|||
'filter': ..., # filter function -> bool (throw error when return False) |
|||
'errMsg': ..., # raise message if there is something error |
|||
}, |
|||
'field_2': { |
|||
... |
|||
}, |
|||
... |
|||
from Filter.Brook import brookFilter |
|||
from Filter.VMess import vmessFilter |
|||
from Filter.VLESS import vlessFilter |
|||
from Filter.Trojan import trojanFilter |
|||
from Filter.Shadowsocks import ssFilter |
|||
from Filter.ShadowsocksR import ssrFilter |
|||
from Filter.TrojanGo import trojanGoFilter |
|||
from Filter.Hysteria import hysteriaFilter |
|||
|
|||
filterEntry = { |
|||
'ss': ssFilter, |
|||
'ssr': ssrFilter, |
|||
'vmess': vmessFilter, |
|||
'vless': vlessFilter, |
|||
'trojan': trojanFilter, |
|||
'trojan-go': trojanGoFilter, |
|||
'brook': brookFilter, |
|||
'hysteria': hysteriaFilter, |
|||
} |
|||
|
|||
|
|||
default value |
|||
+ optional: False |
|||
+ default: None |
|||
+ allowNone: False |
|||
+ format: lambda -> return same thing |
|||
+ type: force require |
|||
+ multiSub: False |
|||
+ indexKey: 'type' |
|||
+ filter: lambda -> return True |
|||
+ errMsg: 'filter error' |
|||
|
|||
|
|||
pre process |
|||
=> field not exist |
|||
=> optional == False -> throw errMsg |
|||
=> optional == True -> set as default value -> continue |
|||
=> field exist |
|||
=> filed is None |
|||
=> allowNone is False -> throw errMsg |
|||
=> allowNone is True -> break |
|||
=> field is not None -> continue |
|||
|
|||
format process -> set as field value (maybe throw error -> catch and throw errMsg) |
|||
|
|||
filter process |
|||
=> type is `any` -> filter function check (skip type compare) |
|||
=> type is `type` -> compare with field type -> filter function check |
|||
=> type is `list` -> compare every type in list with field -> filter function check |
|||
=> type is `dict` |
|||
=> multiSub == False -> recursive check |
|||
=> multiSub == True |
|||
=> field content is not dict or not include indexKey -> throw error |
|||
=> others |
|||
=> indexKey's content not in type (dict) -> throw error |
|||
=> others -> recursive check |
|||
|
|||
""" |
|||
def Filter(proxyType: str, proxyInfo: dict) -> dict: |
|||
if proxyType not in filterEntry: |
|||
raise RuntimeError('Unknown proxy type') |
|||
return filterEntry[proxyType](proxyInfo) |
|||
|
Loading…
Reference in new issue