Advertisement
Guest User

Untitled

a guest
Dec 3rd, 2016
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.59 KB | None | 0 0
  1. from twisted.web.server import Site
  2. from twisted.web.resource import Resource
  3. from twisted.internet import ssl, reactor
  4. from twisted.python.modules import getModule
  5. import urllib.parse
  6. import cgi
  7. import json
  8. import os
  9. import hashlib
  10. import coserver
  11. import base64
  12. import smtplib
  13. gmail = smtplib.SMTP('smtp.gmail.com',587)
  14. gmail.starttls()
  15. email_logged_in = False
  16. epassw = ''
  17. euname = ''
  18. hidden_uname = 'wq3CoMKdwr_Cs8KfwrHCnsK6wrbDi8KywqrCvMOKd8K6wqLClsKtwrh7wpXCpsOF'
  19. hidden_passw = 'bMKywrLDgsOCwpvCg1lqcA=='
  20. messagelist = []
  21. messagecount = 0
  22. userdata = {}
  23. userkeys = {}
  24. funkey = 'chess'
  25. admin_salt = 'JJ3HSYW21BX1TX3UX7L1ATC4RC7T1PAA0A94UFHBVRLO4UJCSTKVPV450BK775TZ2DRZ2NFB37KBQR97NQ4T9K5F6DP1RMPHM3E7HTBSSPI24XABIH45BE982P1DW2JTAQGX9ADZODV986XFK6EP6QR4ZD7KJYK6IC7YU54GFCICAGJSFGWLSI9XZD40DUYF43GQ74LJ'
  26. realpass = '72957ef9715534b6c02866d589dd10bb44eb54eaf3b46f2583b450e1fb46f850edebe4f39d12b2ee83a5d338af359793f521973ac1e52c891e631157bcc73ac9'
  27. port = 80#int(os.environ.get('PORT', 17995))
  28. class FormPage(Resource):
  29. isLeaf = True
  30. def render_GET(self, request):
  31. global messagecount
  32. global messagelist
  33. global userdata
  34. out = {'success':False}
  35. if messagecount % 150 == 0:
  36. messagelist = []
  37. print(request.uri)
  38. data = (request.uri).decode('ascii')
  39. data = data[1:]
  40. data = to_dict(data)
  41. request.setHeader('Content-Type', 'text/plain; charset=UTF-8')
  42. valid = False
  43. if 'adminaccess' in data:
  44. vlr = adminhandle(data)
  45. out.update({'ADMIN':vlr[0]})
  46. if vlr[1]:
  47. out.update({'CMDRES':vlr[1]})
  48. if 'request' in data:
  49. out.update(handlereq(data))
  50. return json.dumps(out).encode('UTF-8')
  51.  
  52.  
  53. ## def render_POST(self, request):
  54. ## x = request.content.read()
  55. ## print(x)
  56. ## return x
  57.  
  58. def to_dict(st):
  59. st = st.strip('/?')
  60. if not st:
  61. return {}
  62. st = urllib.parse.parse_qsl(st)
  63. return dict(st)
  64.  
  65. def adminhandle(di):
  66. rawupass = (admin_salt+di['adminaccess']).encode('ascii')
  67. hashupass = hashlib.sha512(rawupass).hexdigest()
  68. result = [False,'']
  69. if hashupass == realpass:
  70. #access granted!
  71. result[0] = True
  72. if 'command' in di:
  73. if di['command'] == 'listdir':
  74. result[1] = os.listdir(os.getcwd())
  75. if di['command'] == 'getcwd':
  76. result[1] = os.getcwd()
  77. if di['command'] == 'changepass':
  78. if 'newpass' in di:
  79. global funkey
  80. funkey = di['newpass']
  81. result[1] = di['newpass']
  82. if di['command'] == 'changemasterpass':
  83. if 'newmasterpass' in di:
  84. global realpass
  85. realpass = hashlib.sha512((admin_salt+di['newmasterpass']).encode('ascii')).hexdigest()
  86. result[1] = di['newmasterpass']
  87. if di['command'] == 'tci':
  88. result[1] = coserver.test('TMSG.')
  89. if di['command'] == 'decodecred':
  90. if 'decodekey' in di:
  91. global epassw
  92. global euname
  93. epassw = coserver.decode(di['decodekey'],hidden_passw)
  94. euname = coserver.decode(di['decodekey'],hidden_uname)
  95. result[1] = [euname,epassw]
  96. if di['command'] == 'eauth':
  97. global email_logged_in
  98. global epassw
  99. global euname
  100. global gmail
  101. if (not email_logged_in) and (epassw):
  102. #login.
  103. gmail.login(euname,epassw)
  104. gmail.sendmail(euname,euname,'ACTIVATED')
  105. email_logged_in = True
  106. return result
  107.  
  108. def handlereq(di):
  109. global userdata
  110. global messagelist
  111. global messagecount
  112. global userkeys
  113. req_type = di['request']
  114. userkey = di.get('userkey')
  115. username = userkeys.get(userkey)
  116. print(userkey,username)
  117. if username:#username is valid
  118. print('Is uname')
  119. if req_type == 'msg':
  120. if di.get('message'):
  121. messagecount += 1
  122. messagelist.append(username+': '+di.get('message'))
  123. return {'success':True}
  124. elif req_type == 'getmsg':
  125. return {'success':True,'messages':messagelist}
  126. elif not username:
  127. print('Not uname')
  128. if req_type == 'register':
  129. print('Register')
  130. t_uname = di.get('username')
  131. t_passw = di.get('password')
  132. if t_uname and t_passw:
  133. salt = coserver.getsalt(20)
  134. print(t_uname,t_passw,salt)
  135. t_passw = hashlib.sha256((salt+t_passw).encode('ascii')).hexdigest()
  136. if t_uname in userdata:
  137. return {'success':False}
  138. if not t_uname in userdata:
  139. t_akey = coserver.getsalt(40)
  140. userkeys.update({t_akey:t_uname})
  141. userdata.update({t_uname:[salt,t_passw]})
  142. t_uname = ''
  143. t_passw = ''
  144. to_delete = ''
  145. for akey in userkeys:
  146. if userkeys[akey] == t_uname:
  147. to_delete = akey
  148. if to_delete:
  149. del userkeys[to_delete]
  150. return {'success':True,'authkey':t_akey}
  151. elif req_type == 'login':
  152. t_uname = di.get('username')
  153. t_passw = di.get('password')
  154. if t_uname and t_passw:
  155. if not userdata.get(t_uname):
  156. return {'success':False}
  157. if hashlib.sha256((userdata[t_uname][0]+t_passw).encode('ascii')).hexdigest() == userdata[t_uname][1]:
  158. t_akey = coserver.getsalt(40)
  159. to_delete = ''
  160. for akey in userkeys:
  161. if userkeys[akey] == t_uname:
  162. to_delete = akey
  163. if to_delete:
  164. del userkeys[to_delete]
  165. userkeys.update({t_akey:t_uname})
  166. return {'success':True,'authkey':t_akey}
  167. return {}
  168. return {}
  169.  
  170. #certData = getModule(__name__).filePath.sibling('server.pem').getContent()
  171. #certificate = ssl.PrivateCertificate.loadPEM(certData)
  172. factory = Site(FormPage())
  173. reactor.listenTCP(port, factory)
  174. #reactor.listenSSL(443, factory, certificate.options())
  175. reactor.run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement