· 6 years ago · Dec 01, 2018, 08:42 PM
1import socket
2import json
3import sys
4import hashlib
5import pyaes
6import base64
7import requests
8
9oauthserver='localhost'
10lport=9999
11
12def get_len(conn):
13 rb=b'0'
14 rbf=b''
15 while(len(rb)!=0 and rb!=b'\n'):
16 rb=conn.recv(1)
17 rbf+=rb
18 if(len(rb)):
19 return int(rbf[:-1].decode())
20 else:
21 print('error with connection, end too soon')
22 sys.exit(0)
23
24s=socket.socket()
25s.bind(('localhost',lport))
26s.listen(10)
27c,addr=s.accept()
28print('connection from: '+addr[0]+':'+str(addr[1]))
29rb=c.recv(get_len(c))
30user,passwd=rb.split(b'\n')
31phash=hashlib.sha256(passwd).digest()
32
33#connect to oauth provider
34print('connecting to oauth provider at '+oauthserver)
35r=requests.post(oauthserver+'/oauth/token.php',data={'grant_type':'client_credentials'},auth=('testuser','testpass'))
36if(r.status_code!=200):
37 print('error connection to provider, code '+str(r.status_code))
38 sys.exit(0)
39jtoken='{'+r.text.split('{')[1]+'}'
40oj=json.loads(jtoken)
41
42#get oauthtoken from it
43if('error' in oj):
44 print('auth failed')
45 jresp='{"auth":"fail","token":""}'
46 c.send(bytes(jresp,'ASCII'))
47 c.close()
48else:
49 print('auth success')
50 print('got token '+oj['token'])
51 aese=pyaes.AESModeOfOperationCTR(phash)
52 jresp=b'{"auth":"success","token":"'+base64.b64encode(oj['token'].encode())+b'"}'
53 c.send(aese.encrypt(jresp))
54 c.close()