| Index: third_party/twisted_8_1/twisted/web/guard.py
|
| diff --git a/third_party/twisted_8_1/twisted/web/guard.py b/third_party/twisted_8_1/twisted/web/guard.py
|
| deleted file mode 100644
|
| index 9b5cd3c07a1040a8dae4fcf95abf91cd6d39eacd..0000000000000000000000000000000000000000
|
| --- a/third_party/twisted_8_1/twisted/web/guard.py
|
| +++ /dev/null
|
| @@ -1,217 +0,0 @@
|
| -# Copyright (c) 2001-2004 Twisted Matrix Laboratories.
|
| -# See LICENSE for details.
|
| -
|
| -
|
| -"""DEPRECATED.
|
| -
|
| -You probably should be using twisted.web.woven.guard instead.
|
| -"""
|
| -
|
| -# System Imports
|
| -import string, traceback
|
| -from cStringIO import StringIO
|
| -
|
| -from twisted.python import log
|
| -
|
| -# Sibling Imports
|
| -import error
|
| -import html
|
| -import resource
|
| -import widgets
|
| -from server import NOT_DONE_YET
|
| -
|
| -import warnings
|
| -warnings.warn("Please use twisted.web.woven.guard", DeprecationWarning, 2)
|
| -
|
| -
|
| -class _Detacher:
|
| - """Detach a web session from an attached perspective.
|
| -
|
| - This will happen when the session expires.
|
| - """
|
| -
|
| - def __init__(self, session, identity, perspective):
|
| - self.session = session
|
| - self.identity = identity
|
| - self.perspective = perspective
|
| - session.notifyOnExpire(self.detach)
|
| -
|
| - def detach(self):
|
| - self.perspective.detached(self.session, self.identity)
|
| - del self.session
|
| - del self.identity
|
| - del self.perspective
|
| -
|
| -
|
| -class AuthForm(widgets.Form):
|
| - formFields = [
|
| - ['string','Identity','username',''],
|
| - ['password','Password','password',''],
|
| - ['string','Perspective','perspective','']
|
| - ]
|
| -
|
| - formAcceptExtraArgs = 1
|
| -
|
| - def __init__(self, reqauth, sessionIdentity=None, sessionPerspective=None):
|
| - """Initialize, specifying various options.
|
| -
|
| - @param reqauth: a web.resource.Resource instance, indicating which
|
| - resource a user will be logging into with this form; this must
|
| - specify a serviceName attribute which indicates the name of the
|
| - service from which perspectives will be requested.
|
| -
|
| - @param sessionIdentity: if specified, the name of the attribute on
|
| - the user's session to set for the identity they get from logging
|
| - in to this form.
|
| -
|
| - @param sessionPerspective: if specified, the name of the attribute on
|
| - the user's session to set for the perspective they get from
|
| - logging in to this form.
|
| - """
|
| - self.reqauth = reqauth
|
| - self.sessionPerspective = sessionPerspective
|
| - self.sessionIdentity = sessionIdentity
|
| -
|
| - def gotPerspective(self, perspective, request, ident):
|
| - # TODO: fix this...
|
| - resKey = string.join(['AUTH',self.reqauth.service.serviceName], '_')
|
| - sess = request.getSession()
|
| - setattr(sess, resKey, perspective)
|
| - if self.sessionPerspective:
|
| - setattr(sess, self.sessionPerspective, perspective)
|
| - if self.sessionIdentity:
|
| - setattr(sess, self.sessionIdentity, ident)
|
| - p = perspective.attached(sess, ident)
|
| - _Detacher(sess, ident, p)
|
| - return self.reqauth.reallyRender(request)
|
| -
|
| - def didntGetPerspective(self, error, request):
|
| - log.msg('Password not verified! Error: %s' % error)
|
| - io = StringIO()
|
| - io.write(self.formatError("Login incorrect."))
|
| - self.format(self.getFormFields(request), io.write, request)
|
| - return [io.getvalue()]
|
| -
|
| - def gotIdentity(self, ident, password, request, perspectiveName):
|
| - pwrq = ident.verifyPlainPassword(password)
|
| - pwrq.addCallback(self.passwordIsOk, ident, password,
|
| - request, perspectiveName)
|
| - pwrq.addErrback(self.didntGetPerspective, request)
|
| - pwrq.needsHeader = 1
|
| - return [pwrq]
|
| -
|
| - def passwordIsOk(self, msg, ident, password, request, perspectiveName):
|
| - ret = ident.requestPerspectiveForKey(self.reqauth.service.serviceName,
|
| - perspectiveName).addCallbacks(
|
| - self.gotPerspective, self.didntGetPerspective,
|
| - callbackArgs=(request,ident),
|
| - errbackArgs=(request,))
|
| - ret.needsHeader = 1
|
| - return [ret]
|
| -
|
| - def didntGetIdentity(self, unauth, request):
|
| - io = StringIO()
|
| - io.write(self.formatError("Login incorrect."))
|
| - self.format(self.getFormFields(request), io.write, request)
|
| - return io.getvalue()
|
| -
|
| - def process(self, write, request, submit, username, password, perspective):
|
| - """Process the form results.
|
| - """
|
| - # must be done before page is displayed so cookie can get set!
|
| - request.getSession()
|
| - # this site must be tagged with an application.
|
| - idrq = self.reqauth.service.authorizer.getIdentityRequest(username)
|
| - idrq.needsHeader = 1
|
| - idrq.addCallbacks(self.gotIdentity, self.didntGetIdentity,
|
| - callbackArgs=(password,request,perspective or username),
|
| - errbackArgs=(request,))
|
| - return [idrq]
|
| -
|
| -class AuthPage(widgets.Page):
|
| - template = '''
|
| - <html><head><title>Authorization Required</title></head>
|
| - <body>
|
| - <center>
|
| - %%%%authForm%%%%
|
| - </center>
|
| - </body>
|
| - </html>
|
| - '''
|
| - authForm = None
|
| - def __init__(self, reqauth, sessionIdentity=None, sessionPerspective=None):
|
| - widgets.Page.__init__(self)
|
| - self.authForm = AuthForm(reqauth, sessionPerspective, sessionIdentity)
|
| -
|
| -
|
| -class WidgetGuard(widgets.Widget):
|
| -
|
| - def __init__(self, wid, service,
|
| - sessionIdentity=None,
|
| - sessionPerspective=None):
|
| - self.wid = wid
|
| - self.service = service
|
| - self.sessionPerspective = sessionPerspective
|
| - self.sessionIdentity = sessionIdentity
|
| -
|
| - def reallyRender(self, request):
|
| - return widgets.possiblyDeferWidget(self.wid, request)
|
| -
|
| - def display(self, request):
|
| - session = request.getSession()
|
| - resKey = string.join(['AUTH',self.service.serviceName], '_')
|
| - if hasattr(session, resKey):
|
| - return self.wid.display(request)
|
| - else:
|
| - return AuthForm(self).display(request)
|
| -
|
| -
|
| -
|
| -# TODO hiding forms behind a ResourceGuard sucks, because if
|
| -# ResourceGuard needs to authenticate the user, it will 1) complain
|
| -# about the form submitted, 2) throw the data away. This happens if
|
| -# you use "foo?a=b" -style URLs and the user hasn't authenticated yet,
|
| -# or with session expiry.
|
| -
|
| -class ResourceGuard(resource.Resource):
|
| -
|
| - isLeaf = 1
|
| -
|
| - def __init__(self, res, service, sessionIdentity=None, sessionPerspective=None):
|
| - resource.Resource.__init__(self)
|
| - self.res = res
|
| - self.service = service
|
| - self.sessionPerspective = sessionPerspective
|
| - self.sessionIdentity = sessionIdentity
|
| -
|
| - def __getattr__(self, k):
|
| - if not self.__dict__.has_key("res"):
|
| - raise AttributeError, k
|
| - return getattr(self.res, k)
|
| -
|
| - def __getstate__(self):
|
| - return self.__dict__.copy()
|
| -
|
| - def listNames(self):
|
| - return self.res.listNames()
|
| -
|
| - def reallyRender(self, request):
|
| - # it's authenticated already...
|
| - res = resource.getChildForRequest(self.res, request)
|
| - val = res.render(request)
|
| - if val != NOT_DONE_YET:
|
| - request.write(val)
|
| - request.finish()
|
| - return widgets.FORGET_IT
|
| -
|
| - def render(self, request):
|
| - session = request.getSession()
|
| - resKey = string.join(['AUTH',self.service.serviceName], '_')
|
| - if hasattr(session, resKey):
|
| - self.reallyRender(request)
|
| - return NOT_DONE_YET
|
| - else:
|
| - return AuthPage(self,
|
| - self.sessionPerspective,
|
| - self.sessionIdentity).render(request)
|
| -
|
|
|