summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--project1/proj1_s4498062/webhttp/composer.py21
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