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