mirror of https://github.com/dnomd343/ProxyC
dnomd343
2 years ago
4 changed files with 139 additions and 0 deletions
@ -0,0 +1,5 @@ |
|||
#!/usr/bin/env python3 |
|||
# -*- coding: utf-8 -*- |
|||
|
|||
def pluginFormat(pluginName: str) -> str: |
|||
return pluginName |
@ -0,0 +1,56 @@ |
|||
#!/usr/bin/env python3 |
|||
# -*- coding: utf-8 -*- |
|||
|
|||
from Filter.Plugin import pluginFormat |
|||
from Basis.Functions import toInt, toStr |
|||
from Basis.Functions import isHost, isPort |
|||
from Basis.Constant import ssMethods, pluginClients |
|||
|
|||
pluginObject = { |
|||
'type': { |
|||
'type': str, |
|||
'format': lambda s: pluginFormat(toStr(s).strip().lower()), |
|||
'filter': lambda s: s in pluginClients, |
|||
'errMsg': 'Unknown SIP003 plugin' |
|||
}, |
|||
'param': { |
|||
'optional': False, |
|||
'default': '', |
|||
'type': str, |
|||
'format': toStr, |
|||
'errMsg': 'Invalid SIP003 param' |
|||
} |
|||
} |
|||
|
|||
ssObject = { |
|||
'server': { |
|||
'type': str, |
|||
'format': toStr, |
|||
'filter': isHost, |
|||
'errMsg': 'Invalid server address' |
|||
}, |
|||
'port': { |
|||
'type': int, |
|||
'format': toInt, |
|||
'filter': isPort, |
|||
'errMsg': 'Invalid port number' |
|||
}, |
|||
'method': { |
|||
'type': str, |
|||
'format': lambda s: toStr(s).strip().lower().replace('_', '-'), |
|||
'filter': lambda s: s in ssMethods, |
|||
'errMsg': 'Unknown Shadowsocks method' |
|||
}, |
|||
'passwd': { |
|||
'type': str, |
|||
'format': toStr, |
|||
'errMsg': 'Invalid password content' |
|||
}, |
|||
'plugin': { |
|||
'optional': False, |
|||
'default': None, |
|||
'allowNone': True, |
|||
'type': pluginObject, |
|||
'errMsg': 'Invalid pluginObject' |
|||
} |
|||
} |
@ -0,0 +1,58 @@ |
|||
#!/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) (python type / 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': { |
|||
... |
|||
}, |
|||
... |
|||
} |
|||
|
|||
|
|||
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 `python type` -> compare with field type -> 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 |
|||
|
|||
""" |
Loading…
Reference in new issue