Add function using path in URL as VNC server:port
This commit is contained in:
parent
3a03e3c59d
commit
0b36a3fdb6
|
|
@ -0,0 +1,79 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
'''The program encode and decode the string with base64 and hash to validate the integrality.
|
||||||
|
'''
|
||||||
|
import sys
|
||||||
|
import hashlib
|
||||||
|
import base64
|
||||||
|
# Please change the salt for your own project.
|
||||||
|
SALT = "Some salt for security. liqun@ncl.sg"
|
||||||
|
def encode(str):
|
||||||
|
''' The func encode str, hash it and base64 it.'''
|
||||||
|
alg = hashlib.sha256()
|
||||||
|
alg.update(str)
|
||||||
|
alg.update(SALT)
|
||||||
|
hash = alg.hexdigest()
|
||||||
|
return base64.urlsafe_b64encode(hash+':'+str)
|
||||||
|
def decode(str):
|
||||||
|
''' The func decode str, validate with hash and base64.decode it.'''
|
||||||
|
str1 = base64.urlsafe_b64decode(str)
|
||||||
|
pos = str1.find(':')
|
||||||
|
if pos == -1:
|
||||||
|
return ''
|
||||||
|
hash = str1[0:pos]
|
||||||
|
alg = hashlib.sha256()
|
||||||
|
alg.update(str1[pos+1:])
|
||||||
|
alg.update(SALT)
|
||||||
|
hash1 = alg.hexdigest()
|
||||||
|
if hash != hash1:
|
||||||
|
print "Error: str hash different"
|
||||||
|
return ''
|
||||||
|
return str1[pos+1:]
|
||||||
|
def get_server_from_path(path, is_encoded):
|
||||||
|
'''The func decode host port from path parameter.
|
||||||
|
path looks like [/encode(n1.soc.cloud.ncl.sg:5901)]
|
||||||
|
'''
|
||||||
|
try:
|
||||||
|
if is_encoded:
|
||||||
|
str = decode(path[1:])
|
||||||
|
else:
|
||||||
|
str = path[1:]
|
||||||
|
if str == '':
|
||||||
|
return '', 0
|
||||||
|
phost = ''
|
||||||
|
phost = str.split(':')[0]
|
||||||
|
pport = int(str.split(':')[1])
|
||||||
|
except:
|
||||||
|
return phost, 0
|
||||||
|
return phost, pport
|
||||||
|
|
||||||
|
def test_basic():
|
||||||
|
'''The func test some basic func.'''
|
||||||
|
assert get_server_from_path('/n1.soc.cloud.ncl.sg:5901', False) == ('n1.soc.cloud.ncl.sg', 5901)
|
||||||
|
|
||||||
|
str = "n1.soc.cloud.ncl.sg:5901"
|
||||||
|
enc = encode(str)
|
||||||
|
dec = decode(enc)
|
||||||
|
assert str == dec
|
||||||
|
assert get_server_from_path('/'+enc, True) == ('n1.soc.cloud.ncl.sg', 5901)
|
||||||
|
def main():
|
||||||
|
'''The func is the main func.'''
|
||||||
|
import sys
|
||||||
|
if (len(sys.argv) == 2) and (sys.argv[1] == "test"):
|
||||||
|
test_basic()
|
||||||
|
print "Pass all test"
|
||||||
|
exit()
|
||||||
|
elif (len(sys.argv) == 2):
|
||||||
|
print encode(sys.argv[1])
|
||||||
|
elif (len(sys.argv) == 3) and (sys.argv[1] == "decode"):
|
||||||
|
print decode(sys.argv[2])
|
||||||
|
elif (len(sys.argv) == 3) and (sys.argv[1] == "debase"):
|
||||||
|
str1 = base64.urlsafe_b64decode(sys.argv[2])
|
||||||
|
print str1
|
||||||
|
else:
|
||||||
|
print '''%s [content to encode]
|
||||||
|
decode [content to decode]
|
||||||
|
test''' % sys.argv[0]
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
|
|
||||||
Loading…
Reference in New Issue