Ticket #4018: 4018.py

File 4018.py, 1.5 KB (added by unshift, 5 years ago)
Line 
1from zope.interface import implements
2from twisted.internet import reactor
3from twisted.web.resource import IResource, Resource
4from twisted.web import server, guard
5from twisted.cred.portal import IRealm
6from twisted.python import log
7
8import sys
9
10from zope.interface import implements
11
12from twisted.python import log
13from twisted.internet import reactor
14from twisted.web import server, resource, guard
15from twisted.cred.portal import IRealm, Portal
16from twisted.cred.checkers import InMemoryUsernamePasswordDatabaseDontUse
17
18
19
20class Die(Resource):
21   isLeaf = True
22   def render_GET(self, request):
23      reactor.stop()
24      return ""   # avoid unhandled error
25
26class SimpleRealm(object):
27   implements(IRealm)
28
29   def requestAvatar(self, avatarId, mind, *interfaces):
30      if resource.IResource in interfaces:
31   
32         root = Resource()
33         root.isLeaf = False
34
35         foo = Resource()
36         foo.isLeaf = False
37         
38         die = Die()
39         foo.putChild("die", die)
40 
41         root.putChild("foo", foo)
42
43       
44         return resource.IResource, root, lambda: None
45      raise NotImplementedError()
46
47
48if __name__ == "__main__":
49   log.startLogging(sys.stdout)
50
51
52   # set up /foo/die
53   checker = [InMemoryUsernamePasswordDatabaseDontUse(foo='bar')]
54   wrapper = guard.HTTPAuthSessionWrapper(Portal(SimpleRealm(), checker),
55                                         [guard.BasicCredentialFactory("/foo/die")])
56
57   reactor.listenTCP(9999, server.Site(wrapper))
58   reactor.run()
59