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))))) |
- |