| Index: third_party/twisted_8_1/twisted/cred/portal.py
|
| diff --git a/third_party/twisted_8_1/twisted/cred/portal.py b/third_party/twisted_8_1/twisted/cred/portal.py
|
| deleted file mode 100644
|
| index 67c0f9091566c78f6d1f3af1b2546f78e8a895a8..0000000000000000000000000000000000000000
|
| --- a/third_party/twisted_8_1/twisted/cred/portal.py
|
| +++ /dev/null
|
| @@ -1,120 +0,0 @@
|
| -# -*- test-case-name: twisted.test.test_newcred -*-
|
| -
|
| -# Copyright (c) 2001-2007 Twisted Matrix Laboratories.
|
| -# See LICENSE for details.
|
| -
|
| -"""
|
| -The point of integration of application and authentication.
|
| -"""
|
| -
|
| -
|
| -from twisted.internet import defer
|
| -from twisted.internet.defer import maybeDeferred
|
| -from twisted.python import failure, reflect
|
| -from twisted.cred import error
|
| -from zope.interface import providedBy, Interface
|
| -
|
| -
|
| -class IRealm(Interface):
|
| - """
|
| - The realm connects application-specific objects to the
|
| - authentication system.
|
| - """
|
| - def requestAvatar(avatarId, mind, *interfaces):
|
| - """
|
| - Return avatar which provides one of the given interfaces.
|
| -
|
| - @param avatarId: a string that identifies an avatar, as returned by
|
| - L{ICredentialsChecker.requestAvatarId<twisted.cred.checkers.ICredentialsChecker.requestAvatarId>}
|
| - (via a Deferred). Alternatively, it may be
|
| - C{twisted.cred.checkers.ANONYMOUS}.
|
| - @param mind: usually None. See the description of mind in
|
| - L{Portal.login}.
|
| - @param interfaces: the interface(s) the returned avatar should
|
| - implement, e.g. C{IMailAccount}. See the description of
|
| - L{Portal.login}.
|
| -
|
| - @returns: a deferred which will fire a tuple of (interface,
|
| - avatarAspect, logout), or the tuple itself. The interface will be
|
| - one of the interfaces passed in the 'interfaces' argument. The
|
| - 'avatarAspect' will implement that interface. The 'logout' object
|
| - is a callable which will detach the mind from the avatar.
|
| - """
|
| -
|
| -
|
| -class Portal:
|
| - """
|
| - A mediator between clients and a realm.
|
| -
|
| - A portal is associated with one Realm and zero or more credentials checkers.
|
| - When a login is attempted, the portal finds the appropriate credentials
|
| - checker for the credentials given, invokes it, and if the credentials are
|
| - valid, retrieves the appropriate avatar from the Realm.
|
| -
|
| - This class is not intended to be subclassed. Customization should be done
|
| - in the realm object and in the credentials checker objects.
|
| - """
|
| - def __init__(self, realm, checkers=()):
|
| - """
|
| - Create a Portal to a L{IRealm}.
|
| - """
|
| - self.realm = realm
|
| - self.checkers = {}
|
| - for checker in checkers:
|
| - self.registerChecker(checker)
|
| -
|
| - def listCredentialsInterfaces(self):
|
| - """
|
| - Return list of credentials interfaces that can be used to login.
|
| - """
|
| - return self.checkers.keys()
|
| -
|
| - def registerChecker(self, checker, *credentialInterfaces):
|
| - if not credentialInterfaces:
|
| - credentialInterfaces = checker.credentialInterfaces
|
| - for credentialInterface in credentialInterfaces:
|
| - self.checkers[credentialInterface] = checker
|
| -
|
| - def login(self, credentials, mind, *interfaces):
|
| - """
|
| - @param credentials: an implementor of
|
| - L{twisted.cred.credentials.ICredentials}
|
| -
|
| - @param mind: an object which implements a client-side interface for
|
| - your particular realm. In many cases, this may be None, so if the
|
| - word 'mind' confuses you, just ignore it.
|
| -
|
| - @param interfaces: list of interfaces for the perspective that the mind
|
| - wishes to attach to. Usually, this will be only one interface, for
|
| - example IMailAccount. For highly dynamic protocols, however, this
|
| - may be a list like (IMailAccount, IUserChooser, IServiceInfo). To
|
| - expand: if we are speaking to the system over IMAP, any information
|
| - that will be relayed to the user MUST be returned as an
|
| - IMailAccount implementor; IMAP clients would not be able to
|
| - understand anything else. Any information about unusual status
|
| - would have to be relayed as a single mail message in an
|
| - otherwise-empty mailbox. However, in a web-based mail system, or a
|
| - PB-based client, the ``mind'' object inside the web server
|
| - (implemented with a dynamic page-viewing mechanism such as woven)
|
| - or on the user's client program may be intelligent enough to
|
| - respond to several ``server''-side interfaces.
|
| -
|
| - @return: A deferred which will fire a tuple of (interface,
|
| - avatarAspect, logout). The interface will be one of the interfaces
|
| - passed in the 'interfaces' argument. The 'avatarAspect' will
|
| - implement that interface. The 'logout' object is a callable which
|
| - will detach the mind from the avatar. It must be called when the
|
| - user has conceptually disconnected from the service. Although in
|
| - some cases this will not be in connectionLost (such as in a
|
| - web-based session), it will always be at the end of a user's
|
| - interactive session.
|
| - """
|
| - for i in self.checkers:
|
| - if i.providedBy(credentials):
|
| - return maybeDeferred(self.checkers[i].requestAvatarId, credentials
|
| - ).addCallback(self.realm.requestAvatar, mind, *interfaces
|
| - )
|
| - ifac = providedBy(credentials)
|
| - return defer.fail(failure.Failure(error.UnhandledCredentials(
|
| - "No checker for %s" % ', '.join(map(reflect.qual, ifac)))))
|
| -
|
|
|