Your problem may be that Cheetah.Template extends WebKit.Servlet. So when you have your page extend from Secure, it is extending WebKit.Servlet twice.

I while back I got around this by altering the source of Chetah.Servlet to not import WebKit.Servlet. You can see some code in there that checks for Webware:

-------- Cheetah/Servlet.py -----------
isWebwareInstalled = False
try:
from WebKit.Servlet import Servlet as BaseServlet
isWebwareInstalled = True
except:
class BaseServlet:
--------

Another thing you can do is put your site specific code into a MixIn class. Then can mix in your methods to Cheetah and to Secure, and you won't have the double inheritance problem.

-ww

On Mar 9, 2005, at 4:40 PM, jacob martinson wrote:

Hi,

I'm trying to figure out how to get form-based authentication working
with cheetah templates. What I've got so far:

A static login form that posts to LoginServlet.py, which validates the
username/password and sets a number of WebKit session variables.

I have a test servlet called ("Test") that extends "Secure", and
writes some basic output with .writeContent()

"Secure" is a subclass of WebKit.Page.Page that overrides .awake() and
checks to make sure the session is valid and that the sessionid is
coming from the correct IP address.

This all works as I hoped... if you call http://localhost/WK/Test with
your session properly setup, you get the output of
Test.writeContent(). If you call it without a proper session, you get
redirected to the login page.

But I can't figure out how to get this working for my compiled cheetah
templates. I've got a cheetah template compiled into a servlet,
home.py. The template:

#extends Secure
#implements respond
< some simple output >

When I try to access /WK/home with a valid session I get the following
exception:
Traceback (most recent call last):
File "/root/src/Webware-0.8.1/WebKit/Application.py", line 415, in
dispatchRequest
self.handleGoodURL(transaction)
File "/root/src/Webware-0.8.1/WebKit/Application.py", line 567, in
handleGoodURL
self.respond(transaction)
File "/root/src/Webware-0.8.1/WebKit/Application.py", line 776, in respond
transaction.respond()
File "/root/src/Webware-0.8.1/WebKit/Transaction.py", line 105, in respond
self._servlet.respond(self)
File "/root/garden/garden-webkit/home.py", line 82, in respond
SL = self._searchList
AttributeError: home instance has no attribute '_searchList'

Here is my Secure class (Secure.py):

from WebKit.Page import Page

class Secure(Page):
def __init__(self):
Page.__init__(self)

def awake(self, trans):
Page.awake(self,trans)
res = trans.response()
req = trans.request()
sess = trans.session()
if sess.hasValue('raddr') and \
sess.hasValue('authenticated') and \
req._environ['REMOTE_ADDR'] == sess.value('raddr') and \
sess.value('authenticated') == True:
return
else:
res.sendRedirect('login')
return

Am I missing something?

Thanks!

-Jacob


-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
_______________________________________________
Webware-discuss mailing list
Webware-discuss@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/webware-discuss


_________________________________________
winston wolff - (646) 827-2242 - http://www.stratolab.com - learning by creating

Reply via email to