Guest User

Untitled

a guest
Jan 21st, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.56 KB | None | 0 0
  1. #!/usr/bin/env python
  2.  
  3. from zope.interface import implements
  4. from twisted.cred import portal, checkers, credentials, error as credError
  5. from twisted.internet import defer, reactor
  6. from twisted.web import static, resource
  7. from twisted.web.resource import IResource
  8. from twisted.web.http import HTTPChannel
  9. from twisted.web import server
  10. from twisted.web.guard import HTTPAuthSessionWrapper
  11. from twisted.web.guard import DigestCredentialFactory
  12. from twisted.web.guard import BasicCredentialFactory
  13.  
  14. class PasswordDictChecker:
  15. implements(checkers.ICredentialsChecker)
  16. credentialInterfaces = (credentials.IUsernamePassword,credentials.IUsernameHashedPassword)
  17.  
  18. def __init__(self, passwords):
  19. "passwords: a dict-like object mapping usernames to passwords"
  20. self.passwords = passwords
  21.  
  22. def requestAvatarId(self, credentials):
  23. username = credentials.username
  24. if self.passwords.has_key(username):
  25. # if credentials.password == self.passwords[username]:
  26. if credentials.checkPassword(self.passwords[username]):
  27. return defer.succeed(username)
  28. else:
  29. return defer.fail(
  30. credError.UnauthorizedLogin("Bad password"))
  31. else:
  32. return defer.fail(
  33. credError.UnauthorizedLogin("No such user"))
  34.  
  35. class HttpPasswordRealm(object):
  36. implements(portal.IRealm)
  37.  
  38. def __init__(self, myresource):
  39. self.myresource = myresource
  40.  
  41. def requestAvatar(self, user, mind, *interfaces):
  42. if IResource in interfaces:
  43. # myresource is passed on regardless of user
  44. return (IResource, self.myresource, lambda: None)
  45. raise NotImplementedError()
  46.  
  47. class MyResource(resource.Resource):
  48.  
  49. def __init__(self):
  50. resource.Resource.__init__(self)
  51.  
  52. def getChild(self, path, request):
  53. text = "You're in. The path is /%s." % path
  54. return static.Data(text, "text/plain")
  55.  
  56. passwords = {
  57. 'admin': 'aaa',
  58. 'user1': 'bbb',
  59. 'user2': 'ccc'
  60. }
  61.  
  62. if __name__ == "__main__":
  63. myresource = MyResource()
  64.  
  65. checker = PasswordDictChecker(passwords)
  66. realm = HttpPasswordRealm(myresource)
  67. p = portal.Portal(realm, [checker])
  68.  
  69. # This won't work with our checker!
  70. credentialFactory = DigestCredentialFactory("md5", "McLaren Labs")
  71. protected_resource = HTTPAuthSessionWrapper(p, [credentialFactory])
  72.  
  73. root = resource.Resource()
  74. root.putChild("example", protected_resource)
  75.  
  76. site = server.Site(root)
  77. site.protocol = HTTPChannel
  78.  
  79. reactor.listenTCP(8801, site)
  80. reactor.run()
Add Comment
Please, Sign In to add comment