Skip to content

Instantly share code, notes, and snippets.

@Justsoos
Last active February 27, 2018 15:05
Show Gist options
  • Save Justsoos/46b4bd0bff6b0257120ba674cc5fcf5f to your computer and use it in GitHub Desktop.
Save Justsoos/46b4bd0bff6b0257120ba674cc5fcf5f to your computer and use it in GitHub Desktop.
def json2link(configs_json):
d = configs_json
links = []
try:
if (isinstance(d, dict)) and d['configs']:
j = d['configs']
else:
j = d
for i in j:
server = i.get('server')
server_port = i.get('server_port')
password = i.get('password')
method = i.get('method')
protocol = i.get('protocol')
protocolparam = i.get('protocolparam')
obfs = i.get('obfs')
obfsparam = i.get('obfsparam')
group = i.get('group')
remarks = i.get('remarks')
stern = 'obfsparam={}&remarks={}&group={}'.format(b64encode(obfsparam), b64encode(remarks), b64encode(to_bytes(group)))
uri = '{}:{}:{}:{}:{}:{}'.format(server, server_port, protocol, method, obfs, b64encode(password))
links.append('ssr://{}'.format(b64encode('{}/?{}'.format(uri, stern))))
except:
raise
return links
def to_bytes(s):
if type(s) == str:
return s.encode('utf-8')
return s
def to_str(s):
if type(s) == bytes:
return s.decode('utf-8')
return s
def b64encode(data):
if type(data) == bytes:
return to_str(base64.urlsafe_b64encode(data)).strip('=')
elif type(data) == str:
return to_str(base64.urlsafe_b64encode(to_bytes(data))).strip('=')
else:
return data
def b64decode(data):
if type(data) == str:
return to_str(base64.urlsafe_b64encode(data+'='*(4-len(data)%4)))
return data
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment