forked from electusmatari/electusmatari.com
/
__init__.py
75 lines (66 loc) · 2.27 KB
/
__init__.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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import logging
import wsgiref
import wsgiref.util
import kgi
import mybb_auth
from emapps.responses import notfound
def emapps(environ, start_response):
log = logging.getLogger()
log.setLevel(logging.DEBUG)
dbh = DBLogHandler()
dbh.setLevel(logging.DEBUG)
formatter = logging.Formatter("%(asctime)s %(name)-10s %(levelname)-10s "
"%(message)s",
"%Y-%m-%d %H:%M:%S")
dbh.setFormatter(formatter)
log.addHandler(dbh)
environ['emapps.user'] = User(*mybb_auth.mybb_auth(environ))
app = wsgiref.util.shift_path_info(environ)
if app == 'standings':
import standings
environ["org"] = 'em'
data = standings.standingsapp(environ, start_response)
elif app == 'grdstandings':
import standings
environ["org"] = 'grd'
data = standings.standingsapp(environ, start_response)
elif app == 'gradient':
import gradient
data = gradient.grdapp(environ, start_response)
elif app == 'forumtools':
import forums
data = forums.forumsapp(environ, start_response)
else:
start_response('404 Not Found', [('Content-Type', 'text/html')])
data = notfound().encode("utf-8")
return data
class DBLogHandler(logging.Handler):
def emit(self, record):
db = kgi.connect('dbforcer')
c = db.cursor()
c.execute("INSERT INTO log (log) VALUES (%s)",
( self.format(record), ))
class User(object):
def __init__(self, username, auth_flags):
self.username = username
self.auth_flags = auth_flags
self.permissions = None
def is_authenticated(self):
return self.username != 'Anonymous'
def has_permission(self, name):
if self.auth_flags and name in self.auth_flags:
return self.auth_flags[name]
if self.permissions is None:
db = kgi.connect('dbforcer')
c = db.cursor()
c.execute("""
SELECT permission FROM userpermissions
WHERE username = %s
""", (self.username,))
self.permissions = [x for (x,) in c.fetchall()]
return name in self.permissions
# CREATE TABLE userpermissions (
# id SERIAL PRIMARY KEY,
# username VARCHAR(255),
# permission VARCHAR(255)
# );