diff --git a/decorators.py b/decorators.py index d2294b4..13576a5 100644 --- a/decorators.py +++ b/decorators.py @@ -1,10 +1,21 @@ #!/usr/bin/python # -*- coding: utf-8; tab-width: 4; indent-tabs-mode: nil; -*- +## all from singleton import Singleton + +## WSGITemplate from template import render from functools import partial +## WSGIAuth +import Cookie +import hashlib +import hmac +md5 = lambda x : hashlib.md5( x ).hexdigest() +sha1 = lambda key,value: hmac.new( key, value, hashlib.sha1 ).hexdigest() + +#------------------------------------------------------------------------------ class WSGITemplate( object ): __metaclass__ = Singleton @@ -125,3 +136,36 @@ class WSGIMySQL( object ): for dsndict in self.__dsn.items(): for conn in dsndict['pool']: conn.close() + + +class WSGISimpleAuth( object ): + __metaclass__ = Singleton + + def __init__( self, secret_key, login_url=None, forbidden_url=None ): + self.__secret_key = secret_key + + def auth( self, permission='', group='', p_g_mode='AND', p_mode='OR', g_mode='OR' ): + def real_decorator( wsgi_application ): + def wrapper( environ, start_response ): + try: + uuid = Cookie.SimpleCookie(environ["HTTP_COOKIE"])["uuid"].value + except: + uuid = None + + environ['auth.uuid'] = uuid + + def my_start_response( status, response_headers ): + cookie = Cookie.SimpleCookie() + cookie["uuid"] = uuid + response_headers.append( ('Set-Cookie',cookie.OutputString()) ) + start_response( status, response_headers ); + + for item in wsgi_application( environ, my_start_response ): + yield item + + return wrapper + + return real_decorator + + +# EOF \ No newline at end of file