import os from view import render import web, config from flup.middleware.session import DiskSessionStore, SessionMiddleware, MemorySessionStore from flup.middleware.error import ErrorMiddleware ## URL MAPPING urls = ( '/','index', '/login','login', '/logout','logout' ) ## AUTHORIZATION STUFF def dologin(user): session = web.ctx.environ['com.saddi.service.session'].session session['id'] = user.id session['username'] = user.username session['groups'] = user.groups session['loggedin'] = 1 def dologout(): session = web.ctx.environ['com.saddi.service.session'].session session.invalidate() def initsession(session): session['id'] = 0 session['username'] = '' session['groups'] = '' session['loggedin'] = 0 def checkauth(session): if session['loggedin'] == 1: return True return False def checkaccess(auth=False, access=''): def decorator(func): def proxyfunc(self, *args, **kw): service = web.ctx.environ['com.saddi.service.session'] session = service.session if service.isSessionNew: initsession(session) if auth == True: if not checkauth(session): return web.redirect('/login') if access != '': groups = session['groups'].split(',') if access not in groups: return web.redirect('/login') return func(self, *args, **kw) return proxyfunc return decorator # ## PAGES # class index: @checkaccess(auth=True, access='admin') def GET(self): session = web.ctx.environ['com.saddi.service.session'].session count = session.get('count', 0) + 1 session['count'] = count print render.index2(count) class login: @checkaccess() def GET(self): print render.login2() @checkaccess() def POST(self): user = web.storify({ 'id':1, 'username':'admin', 'password':'admin', 'groups':'admin' }) inp = web.input() if inp.username == user.username and inp.password == user.password: dologin(user) web.redirect('/') else: print render.login2() class logout: @checkaccess() def GET(self): dologout() web.redirect('/') def session_mw(app): sessionStore = MemorySessionStore() app = ErrorMiddleware(app, 'kai.hendry@gmail.com') #DiskSessionStore(storeDir="%s/sessions/" % os.getcwd(), timeout=5) return SessionMiddleware(sessionStore, app) #def error_mw(app): # return ErrorMiddleware(app, 'kai.hendry@gmail.com') if __name__ == "__main__": web.run(urls, globals(), *[session_mw])