diff --git a/confluent_server/confluent/httpapi.py b/confluent_server/confluent/httpapi.py
index d418302d..5a145a0c 100644
--- a/confluent_server/confluent/httpapi.py
+++ b/confluent_server/confluent/httpapi.py
@@ -55,12 +55,6 @@ except ModuleNotFoundError:
import urllib.parse as urlparse
import eventlet.websocket
import eventlet.wsgi
-
-#these modifications might need to be changed later now just proof of concept
-import os
-import cgi
-#from cgi import parse_qs, escape
-
#scgi = eventlet.import_patched('flup.server.scgi')
tlvdata = confluent.tlvdata
@@ -177,7 +171,6 @@ def _get_query_dict(env, reqbody, reqtype):
qdict = {}
try:
qstring = env['QUERY_STRING']
-
except KeyError:
qstring = None
if qstring:
@@ -295,12 +288,16 @@ def _authorize_request(env, operation, reqbody):
authdata = auth.authorize(name, element=element, operation=operation)
else:
element = None
- if (not authdata) and 'HTTP_COOKIE' in env:
- cidx = (env['HTTP_COOKIE']).find('confluentsessionid=')
- if cidx >= 0:
- sessionid = env['HTTP_COOKIE'][cidx+19:cidx+51]
- sessid = sessionid
+ if not authdata:
+ if 'HTTP_CONFLUENTSESSION' in env:
+ sessionid = env['HTTP_CONFLUENTSESSION']
sessid = sessionid
+ elif 'HTTP_COOKIE' in env:
+ cidx = (env['HTTP_COOKIE']).find('confluentsessionid=')
+ if cidx >= 0:
+ sessionid = env['HTTP_COOKIE'][cidx+19:cidx+51]
+ sessid = sessionid
+ if sessionid:
if sessionid in httpsessions:
if _csrf_valid(env, httpsessions[sessionid]):
if env['PATH_INFO'] == '/sessions/current/logout':
@@ -490,6 +487,8 @@ def wsock_handler(ws):
elif clientmsg[0] == '!':
msg = json.loads(clientmsg[1:])
action = msg.get('operation', None)
+ if not action:
+ action = msg.get('action', None)
targ = msg.get('target', None)
if targ:
authdata = auth.authorize(name, targ, operation=action)
@@ -527,6 +526,13 @@ def wsock_handler(ws):
datacallback=datacallback,
width=width, height=height)
myconsoles[clientsessid] = consession
+ elif action == 'resize':
+ clientsessid = '{0}'.format(msg['sessid'])
+ myconsoles[clientsessid].resize(
+ width=msg['width'], height=msg['height'])
+ if action == 'break':
+ clientsessid = '{0}'.format(msg['sessid'])
+ myconsoles[clientsessid].send_break()
elif action == 'stop':
sessid = '{0}'.format(msg.get('sessid', None))
if sessid in myconsoles:
@@ -660,13 +666,9 @@ def resourcehandler_backend(env, start_response):
start_response('302 Found', headers)
yield ''
return
-
- if 'CONTENT_LENGTH' in env and int(env['CONTENT_LENGTH']) > 0:
- reqbody = ''
- # reqbody = env['wsgi.input'].read(int(env['CONTENT_LENGTH']))
+ if 'CONTENT_LENGTH' in env and int(env['CONTENT_LENGTH']) > 0:
+ reqbody = env['wsgi.input'].read(int(env['CONTENT_LENGTH']))
reqtype = env['CONTENT_TYPE']
- if 'application/json' in reqtype:
- reqbody = env['wsgi.input'].read(int(env['CONTENT_LENGTH']))
operation = opmap[env['REQUEST_METHOD']]
querydict = _get_query_dict(env, reqbody, reqtype)
if operation != 'retrieve' and 'restexplorerop' in querydict:
@@ -885,59 +887,6 @@ def resourcehandler_backend(env, start_response):
start_response('200 OK', headers)
yield rsp
return
- elif (operation == 'create' and ('/firmware/updates/active' in env['PATH_INFO'])):
- # Solution the wsgi.iput stream can only be read once and it is being read at the top
- if 'multipart/form-data' in reqtype:
- field_storage = cgi.FieldStorage(fp=env['wsgi.input'], environ=env, keep_blank_values=True)
- for item in field_storage.list:
- if item.filename:
- storage_file_path = '/var/lib/confluent/client_assets/' + item.filename
- file_content = item.file.read()
- with open(storage_file_path, 'wb') as file:
- file.write(file_content)
- yield json.dumps({'data': storage_file_path})
- start_response('200 OK', headers)
- return
-
- url = env['PATH_INFO']
- if 'application/json' in reqtype:
- if not isinstance(reqbody, str):
- reqbody = reqbody.decode('utf8')
- pbody = json.loads(reqbody)
- args = pbody['args']
- args_dict = {'filename': args}
- try:
- args_dict.update({'bank': pbody['bank']})
- except KeyError:
- pass
- noderrs = {}
- nodeurls = {}
- # start_response('202 Accepted', headers)
- hdlr = pluginapi.handle_path(url, operation, cfgmgr, args_dict)
- for res in hdlr:
- if isinstance(res, confluent.messages.CreatedResource):
- watchurl = res.kvpairs['created']
- currnode = watchurl.split('/')[1]
- nodeurls[currnode] = '/' + watchurl
- yield json.dumps({'data': nodeurls})
- start_response('200 OK', headers)
- return
-
- elif (operation == 'delete' and ('/firmware/updates/active' in env['PATH_INFO'])):
- url = env['PATH_INFO']
- if 'application/json' in reqtype:
- if not isinstance(reqbody, str):
- reqbody = reqbody.decode('utf8')
- pbody = json.loads(reqbody)
- args = pbody['args']
- try:
- os.remove(args)
- start_response('200 OK', headers)
- return
- except Exception as e:
- return e
-
-
else:
# normal request
url = env['PATH_INFO']
@@ -1023,7 +972,6 @@ def _assemble_html(responses, resource, querydict, url, extension):
else:
pendingrsp.append(rsp)
for rsp in pendingrsp:
- print(rsp.html() + "
")
yield rsp.html() + "
"
if iscollection:
# localpath = url[:-2] (why was this here??)
@@ -1122,7 +1070,6 @@ def serve(bind_host, bind_port):
try:
sock = eventlet.listen(
(bind_host, bind_port, 0, 0), family=socket.AF_INET6)
-
except socket.error as e:
if e.errno != 98:
raise
@@ -1157,4 +1104,4 @@ class HttpApi(object):
self.server = eventlet.spawn(serve, self.bind_host, self.bind_port)
-_cleaner = eventlet.spawn(_sessioncleaner)
\ No newline at end of file
+_cleaner = eventlet.spawn(_sessioncleaner)