|
durumdara
durumdara at gmail.com
Mon Nov 20 09:31:25 EST 2006
Hi !
Interesting. Your example about Request Data Sharing sometimes working,
and sometimes not.
I don't understand why !
In my little test site it is working good.
But when I put these sharing technics in the main site, then Apache said
that Object member does not exists on mp_request.
Traceback (most recent call last):
File "C:\Python24\lib\site-packages\mod_python\apache.py", line 299, in HandlerDispatch
result = object(req)
File "c:/web/zeusweb/htdocs\__handler.py", line 6, in handler
RequestObject = req.Object
AttributeError: 'mp_request' object has no attribute 'Object'
It is very interesting, because I set this variable on the access handler.
def accesshandler(Request):
hmod = apache.import_module("CustomHandler")
siteroot = os.path.dirname(__file__)
return hmod.CommonAccessHandler(Request, "ZeusWebHandler", siteroot)
...
def CommonAccessHandler(Request, HandlerModuleName, SiteRoot):
zhmod = apache.import_module(HandlerModuleName)
try:
ROClass = zhmod.GetRequestObjectClass()
RequestObject = ROClass(Request, SiteRoot)
Request.Object = RequestObject # <===== here I set it !
RequestObject.CheckLogin()
valid = RequestObject.HaveUserRightTo(Request.filename)
if valid:
return apache.OK
else:
return apache.HTTP_FORBIDDEN
except:
dwtools = apache.import_module("dwtools")
excmsg = dwtools.GetLastExcText()
Request.log_error(excmsg, apache.APLOG_ERR)
return apache.HTTP_INTERNAL_SERVER_ERROR
Interesting, because it's working recently ! In same site !
Possible it's caused by virtual hosting and more site handlers ??? I
don't know.
But I need solution.
Please help me !
I thinking about that I not used direct filenames on protectable content
(anydata.pdf).
If I use "aliases", I can check them in the handler, and I can rewrite
them as stream, if use have enough rights to it.
In this time I can use accesshandler to deny accesses without rights. If
rights are enough, I simply send apache.OK, and apache get back the
content, handle the file types (PDF, XLS, etc.).
But if accesshandler cannot share data with handler safely, I need to
drop accesshandler, and I need to handle all request with my handler.
This is not too hard with simple content, but problematic with big,
protected, special files, example _*private*_ PDF-s, Pictures, other
contents.
(I remember that in zope I must rename the dynamic image retreiver
script to ".jpg" to Windows client handle the data correctly what the
script provided.)
How to you do this ? How can I protect some areas ? How to I support the
file downloading with protection ?
Thanks for your help:
dd
Jim Gallacher wrote:
> durumdara wrote:
>> Hi !
>>
>> I have an access handler, and a normal python handler in my site.
>> I use directories, and some of them are need protection. I use my login
>> method to enable user access.
>>
>> The access handler is check the needed rights to any object. It get user
>> data from Session.
>> When access granted, it finished it's working.
>> When access denied, it send http403 error, and I catch this with custom
>> error documents (ssi).
>>
>> But I want to know something - the background of access handler.
>>
>> 1.)
>> The access handler is existing in same Thread as Handler ?
>
> Yes.
>
>> So I want to know. Is modpy do this:
>> get url, server info, etc.
>> build request + other objects
>> get thread
>> result = thread.startaccesshandler(req)
>> if not result:
>> gotoerrorhandler
>> else:
>> result = thread.handler(req)
>> ....
>> or it use another technology ?
>
> Unless I'm misunderstanding your question, you don't need to mess with
> threads. You are always dealing with the same request object,
> regardless of which phase, and there is one process or thread per
> request.
>
> Take a look at the mod_python documentation for PythonAuthenHandler,
> as well as my reply to Richard Lewis today on a similar question.
>
>> 2.)
>> Can I exchange some data across them ?
>
> Yes.
>
> def authenhandler(req):
> req.foo = 'something for later'
> ...
>
>
> def handler(req):
> req.write(req.foo)
> ...
>
>
>> In this time I use file based right table(s).
>> Every file in this table has right property.
>> I need to load this table in the accesshandler to check grants.
>> And later, in the menu building I also need to load this table to check
>> grants (the menus are not accessable by user are hided).
>> Can I share these infos ? Can I write to the request object, and this
>> object is hold these infos to get them in normal handler ?
>
> Yes.
>
>> 3.)
>> Can I force the access handler to redirect request ?
>
> Yes.
>
>> Example: the user click on menu that preserved for special users. I
>> don't want to redirect to error pages. Can I redirect to my special
>> page,
>
> Yes.
>
> Jim
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mm_cfg_has_not_been_edited_to_set_host_domains/pipermail/mod_python/attachments/20061120/dc82ff61/attachment.html
|