| @@ -1,10 +1,21 @@ | |||||
| #!/usr/bin/python | #!/usr/bin/python | ||||
| # -*- coding: utf-8; tab-width: 4; indent-tabs-mode: nil; -*- | # -*- coding: utf-8; tab-width: 4; indent-tabs-mode: nil; -*- | ||||
| ## all | |||||
| from singleton import Singleton | from singleton import Singleton | ||||
| ## WSGITemplate | |||||
| from template import render | from template import render | ||||
| from functools import partial | 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 ): | class WSGITemplate( object ): | ||||
| __metaclass__ = Singleton | __metaclass__ = Singleton | ||||
| @@ -125,3 +136,36 @@ class WSGIMySQL( object ): | |||||
| for dsndict in self.__dsn.items(): | for dsndict in self.__dsn.items(): | ||||
| for conn in dsndict['pool']: | for conn in dsndict['pool']: | ||||
| conn.close() | 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 | |||||