[Twisted-Python] I am having severe problems with guard.

Francisco Miguel Colaço fcolaco at demnet.ubi.pt
Wed Aug 13 19:45:30 MDT 2003


  I am having severe problems with guard.  I am making a site in which
users must be authenticated, and a session must be following and
reacting to the user's activities.

  I have made the following module.

from twisted.cred.portal import Portal, IRealm
from twisted.web.util import Redirect

import page, model
reload (page)
reload (model)



class Realm:
    __implements__ = IRealm    
    
    
    def requestAvatar (self, id, mind, *interfaces):
        if IResource not in interfaces:
            raise NotImplementedError ('I cannot do non-web logins
yet.')
        
        ## We are in a web login.        
        m = interfaces[0].model  ## This line should raise an
exception... thus, this is never executed.
        if id:
            m.orig['username'] = id
        else:
            m.orig['username'] = None
        
        resource = page.Page (m)
        resource.putChild ('', SessionWrapper (UsernamePasswordWrapper
(dem_portal, callback = redirectToIndex)))
        return IResource, resource, None


## Create an instance of the realm.
dem_realm = Realm ()



from twisted.cred.checkers import
InMemoryUsernamePasswordDatabaseDontUse, AllowAnonymousAccess
from twisted.web.woven.guard import UsernamePasswordWrapper,
SessionWrapper



def redirectToIndex (dummy):
    """I will redirect to the site main page.
    """
    
    return Redirect ('/index.rpy')



def createResource ():
    ## Create a memory checker.
    checker = InMemoryUsernamePasswordDatabaseDontUse ()
    checker.addUser ('fhc', '12345')
    checker.addUser ('humberto', 'zzzzz')
    checker.addUser ('aes', 'qa')
    
    ## Allow access from unknowns.
    anon = AllowAnonymousAccess()
    
    ## Create the portal.
    dem_portal = Portal (Realm)
    dem_portal.registerChecker (checker)
    dem_portal.registerChecker (anon)
    
    m = model.get_new_model ()
    upass = UsernamePasswordWrapper (dem_portal, callback =
redirectToIndex)
    
    resource = page.Page (m, templateFile = 'index.template.xhtml')
    resource.putChild ('', SessionWrapper (upass))
    
    return resource


page.Page is a customized page that works well, lest that the
'init-perspective' link keeps returning 'No such Resource'.  The page
as several wchild_, wvfactory_ and wvupdate_ attached to it.  I also
would like to contribute back the widgets I have done, as soon as I get
them ready and session aware, if someone has the need for them
(calendar, menu tabs, localized date, title boxes, etc.)

  I have sorted the documentation, logged just about any kind of object
dictionary information and even browsed through the sources, but I still
feel completely lost.

  If help can be provided by someone, I would appreciate if these
questions could be answered:

  1. Why doesn't perspective-init work?

  2. How can I put up a customized login page?

  3. How can I access the page (resource) within requestAvatar?

  4. How can I access the session object from a widget?

  5. How can I examine and issue cookies?

  I hope this does not give you a lot of trouble.  Programming twisted
has been both a wonderful and humbling experience, but I do prefer Woven
to anything I have tried before.  I find it an excellent piece of work
and wish to stick with it for my web programming, while I learn the rest
of Twisted for all the other communication needs.

  Thanks in advance.

     Francisco Colaço





More information about the Twisted-Python mailing list