Skip to content
Snippets Groups Projects
Commit 91e162a3 authored by Chris Hines's avatar Chris Hines
Browse files

set an additional cookie which might fix a problem with safari

parent 7c9a24bf
No related branches found
No related tags found
3 merge requests!77Revert "disable agressive kill and restart",!35Dev,!13Dev
Pipeline #7614 passed
...@@ -41,7 +41,7 @@ class TWSProxy(threading.Thread): ...@@ -41,7 +41,7 @@ class TWSProxy(threading.Thread):
header[bytessofar:bytessofar+len(partial)] = partial header[bytessofar:bytessofar+len(partial)] = partial
bytessofar = bytessofar + len(partial) bytessofar = bytessofar + len(partial)
logger.debug('inittws, checking headers') logger.debug('inittws, checking headers')
port = TWSProxy.verifyauth(header[0:bytessofar]) port = self.verifyauth(header[0:bytessofar])
if port is not None: if port is not None:
logger.debug('inittws, found auth token and got port {}'.format(port)) logger.debug('inittws, found auth token and got port {}'.format(port))
keepreading = False keepreading = False
...@@ -49,7 +49,7 @@ class TWSProxy(threading.Thread): ...@@ -49,7 +49,7 @@ class TWSProxy(threading.Thread):
logger.debug('inittws, no authtok found in the first {} bytes'.format(bytessofar)) logger.debug('inittws, no authtok found in the first {} bytes'.format(bytessofar))
else: else:
logger.debug('inittws, select returned with no more info, verifying headers for the last time') logger.debug('inittws, select returned with no more info, verifying headers for the last time')
port = TWSProxy.verifyauth(header[0:bytessofar]) port = self.verifyauth(header[0:bytessofar])
keepreading = False keepreading = False
if initcount > failthresh: if initcount > failthresh:
logger.debug('inittws, checked headers enough times, got {} bytes with no success'.format(bytessofar)) logger.debug('inittws, checked headers enough times, got {} bytes with no success'.format(bytessofar))
...@@ -77,6 +77,12 @@ class TWSProxy(threading.Thread): ...@@ -77,6 +77,12 @@ class TWSProxy(threading.Thread):
return (None,None) return (None,None)
def insert_header(self,buff,insertafter,extraheader):
try:
index = buff.decode().index(insertafter.decode())
except:
return buff
return buff[0:index] + extraheader + buff[index:]
def run(self): def run(self):
import logging import logging
...@@ -85,6 +91,11 @@ class TWSProxy(threading.Thread): ...@@ -85,6 +91,11 @@ class TWSProxy(threading.Thread):
initshutdown = threading.Event() initshutdown = threading.Event()
initshutdown.clear() initshutdown.clear()
(header, bytessofar) = self.inittws(initshutdown) (header, bytessofar) = self.inittws(initshutdown)
if self.authtok is not None:
replyheader = b'Set-Cookie: twsproxyauth2='+self.authtok+b' ; HttpOnly\r\n'
else:
replyheader = None
insertafter = b'HTTP/1.1 200 OK\r\n'
logger.debug('connecting {} to {}'.format(self.csock,self.ssock)) logger.debug('connecting {} to {}'.format(self.csock,self.ssock))
if initshutdown.isSet(): if initshutdown.isSet():
logger.debug('NOT connecting {} inittws did not connect us'.format(self.csock)) logger.debug('NOT connecting {} inittws did not connect us'.format(self.csock))
...@@ -97,7 +108,7 @@ class TWSProxy(threading.Thread): ...@@ -97,7 +108,7 @@ class TWSProxy(threading.Thread):
TWSProxy.reliablesend(self.ssock,header[0:bytessofar],bytessofar) TWSProxy.reliablesend(self.ssock,header[0:bytessofar],bytessofar)
logger.debug('creating threads') logger.debug('creating threads')
# TWSProxy.twosocks(self.csock,self.ssock,initshutdown) # TWSProxy.twosocks(self.csock,self.ssock,initshutdown)
t1 = threading.Thread(target=TWSProxy.sockcopy, args=(self.ssock, self.csock, initshutdown),name='s2c') t1 = threading.Thread(target=TWSProxy.sockcopy, args=(self.ssock, self.csock, initshutdown,insertafter,replyheader),name='s2c')
t2 = threading.Thread(target=TWSProxy.sockcopy, args=(self.csock, self.ssock, initshutdown),name='c2s') t2 = threading.Thread(target=TWSProxy.sockcopy, args=(self.csock, self.ssock, initshutdown),name='c2s')
t1.start() t1.start()
t2.start() t2.start()
...@@ -111,12 +122,11 @@ class TWSProxy(threading.Thread): ...@@ -111,12 +122,11 @@ class TWSProxy(threading.Thread):
if self.csock is not None: if self.csock is not None:
self.csock.close() self.csock.close()
@staticmethod def verifyauth(self,header):
def verifyauth(header):
import re import re
import requests import requests
logger = logging.getLogger() logger = logging.getLogger()
token = b'twsproxyauth=(?P<authtok>\w+)[\W|$]' token = b'twsproxyauth[0-9]*=(?P<authtok>\w+)[\W|$]'
m = re.search(token,header) m = re.search(token,header)
if m: if m:
authtok = m.groupdict()['authtok'] authtok = m.groupdict()['authtok']
...@@ -134,6 +144,7 @@ class TWSProxy(threading.Thread): ...@@ -134,6 +144,7 @@ class TWSProxy(threading.Thread):
except: except:
logger.error('authtok found port found {}'.format(port)) logger.error('authtok found port found {}'.format(port))
raise Exception('unable to get a port number for the authtok {}'.format(r.text)) raise Exception('unable to get a port number for the authtok {}'.format(r.text))
self.authtok = authtok
return port return port
return None return None
# if m: # if m:
...@@ -203,7 +214,7 @@ class TWSProxy(threading.Thread): ...@@ -203,7 +214,7 @@ class TWSProxy(threading.Thread):
@staticmethod @staticmethod
def sockcopy(src,dest,initshutdown): def sockcopy(src,dest,initshutdown,insertafter=None,insert=None):
shuttype = socket.SHUT_RD shuttype = socket.SHUT_RD
import threading import threading
logger = logging.getLogger() logger = logging.getLogger()
...@@ -220,6 +231,14 @@ class TWSProxy(threading.Thread): ...@@ -220,6 +231,14 @@ class TWSProxy(threading.Thread):
msglength = -1 msglength = -1
try: try:
buff = src.recv(TWSProxy.MAXBUFF) buff = src.recv(TWSProxy.MAXBUFF)
if insert is not None:
try:
index = buff.decode().index(insertafter.decode())
newbuff = buff[0:index+len(insertafter)] + insert + buff[index+len(insertafter):]
buff = newbuff
insert = None
except:
pass
if buff is None: if buff is None:
continue continue
except ConnectionResetError as e: except ConnectionResetError as e:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment