forked from Wolfenswan/FAMDB
-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathwsgi.py
executable file
·45 lines (40 loc) · 1.84 KB
/
wsgi.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import os
from http import cookies
from http.cookies import SimpleCookie
import utils
from handler import Handler
from handlers import *
subclasses = Handler.__subclasses__()
handlerInstances = {subclass().getHandled(): subclass().handle for (subclass) in subclasses}
def wsgi(environ, start_response):
path = environ['PATH_INFO']
simplePath = path.replace("/", "")
if "HTTP_COOKIE" in environ:
cookie = SimpleCookie(environ['HTTP_COOKIE'])
environ['user'] = utils.getCurrentUser(cookie)
else:
environ['HTTP_COOKIE'] = None
environ['user'] = None
if simplePath in handlerInstances:
return handlerInstances[simplePath](environ, start_response)
else:
responseHeaders = utils.handleBadSessionIds(environ)
permissionCookie = SimpleCookie(environ['HTTP_COOKIE'])
if 'permissionLevel' in permissionCookie:
cookiePermissionLevel = permissionCookie['permissionLevel'].value
if environ['user'] is not None and str(environ['user'].permissionLevel) != cookiePermissionLevel:
cookie = cookies.SimpleCookie()
cookie['permissionLevel'] = environ['user'].permissionLevel
responseHeaders.append(('set-cookie', cookie.output(header='')))
if path == '/':
path = '/index.html'
filePath = utils.currentPath + '/static' + path
with open(filePath, mode="rb", ) as stream:
statbuf = os.stat(filePath)
if 'HTTP_IF_NONE_MATCH' in environ:
if environ['HTTP_IF_NONE_MATCH'] == str(statbuf.st_mtime):
start_response('304 NOT MODIFIED', responseHeaders)
return [''.encode()]
responseHeaders.append(('ETag', str(statbuf.st_mtime)))
start_response('200 OK', responseHeaders)
return [stream.read()]