from twisted.web.woven import page, simpleguard, guard from twisted.web import microdom, util class BasePage(page.Page): """This is the page that you see if you're anonymous. """ template = '''
''' def wmfactory_error(self, request): return '' def wmfactory_common(self, request): return "This is the common (anonymous) data." def wmfactory_special(self, request): return "No special data for you, Mr. Anonymous-pants." def wvupdate_loginthing(self, request, widget, model): microdom.lmx(widget.node).form(action=guard.INIT_PERSPECTIVE, model="form") def wmfactory_form(self, request): return guard.newLoginSignature.method(None) class ErrorPage(BasePage): def __init__(self, formModel): BasePage.__init__(self) self.formModel = formModel def wmfactory_error(self, request): return 'Incorrect username/password' def wvupdate_loginthing(self, request, widget, model): microdom.lmx(widget.node).form(action="../"+guard.INIT_PERSPECTIVE, model="form") def wmfactory_form(self, request): return guard.newLoginSignature.method(self.formModel) class LoggedIn(BasePage): def wvupdate_loginthing(self, request, widget, data): microdom.lmx(widget.node).a(href= guard.DESTROY_PERSPECTIVE).text("Log out.") def wmfactory_special(self, request): name = request.getComponent(simpleguard.Authenticated).name return "Welcome, %s" % name def dumbRedirect(ignored): return util.Redirect(".") def createResource(): """Tying it all together. """ from twisted.cred import checkers return simpleguard.guardResource(LoggedIn(), [checkers.InMemoryUsernamePasswordDatabaseDontUse(bob="bob")], nonauthenticated=BasePage(), callback=dumbRedirect, errback=ErrorPage) if __name__ == '__main__': from twisted.internet import reactor from twisted.web import server reactor.listenTCP(9999, server.Site(createResource())) reactor.run()