diff options
-rw-r--r-- | project1/proj1_s4498062/webhttp/composer.py | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/project1/proj1_s4498062/webhttp/composer.py b/project1/proj1_s4498062/webhttp/composer.py index 9e29e6c..b8b9f6a 100644 --- a/project1/proj1_s4498062/webhttp/composer.py +++ b/project1/proj1_s4498062/webhttp/composer.py @@ -37,22 +37,20 @@ class ResponseComposer: response = Response()
if re.search(r'\/\.\.?(\/|$)', request.uri):
- response.code = 403
- response.set_header('Connection', 'keep-alive')
- response.body = 'Don\'t even think about it.'
- response.set_content_length()
- return response
-
- return self.serve(request.uri, request=request)
+ return self.serve_error(403)
+ else:
+ return self.serve(request.uri, request=request)
def serve(self, uri, code=200, etag=None, request=None):
resp = Response()
+
try:
resource = Resource(uri)
req = request
if req != None and (
resource.etag_match(req.get_header('If-None-Match')) or \
- not resource.etag_match(req.get_header('If-Match') or '*')):
+ req.get_header('If-Match') != None and \
+ not resource.etag_match(req.get_header('If-Match'))):
resp.code = 304
else:
resp.code = code
@@ -68,7 +66,6 @@ class ResponseComposer: if resp.body == None:
return self.serve_error(406)
resp.set_header('ETag', resource.generate_etag())
- resp.set_header('Connection', 'keep-alive')
resp.set_header('Content-Type', resource.get_content_type())
resp.set_content_length()
except FileExistError:
@@ -76,11 +73,15 @@ class ResponseComposer: return self.serve_error(404)
else:
resp.code = code
- resp.set_header('Connection', 'keep-alive')
resp.body = 'Error %d' % code
resp.set_content_length()
except FileAccessError:
return self.serve_error(403)
+
+ conn = 'keep-alive'
+ if req != None and req.get_header('Connection') == 'close':
+ conn = 'close'
+ resp.set_header('Connection', conn)
return resp
|