[mod_python] Re: more callable__auth__

Joshua Ginsberg listspam at flowtheory.net
Fri Feb 24 20:12:23 EST 2006


Wow -- I'm the administrivia whore today... sorry about that...

Why don't we configure the list to have the reply-to be back to the 
list? :-) I can't tell you the number of times I hit reply instead of 
remembering to hit "Reply All", a button which I generally consider to 
be the brainchild of Satan.

-jag

On Feb 24, 2006, at 7:59 PM, Graham Dumpleton wrote:

> Please keep followups on mailing list. :-(
>
> On 25/02/2006, at 11:28 AM, Robert Thomas Davis wrote:
>
>> Graham
>>
>> ...finally got everything up and running with the new
>> version :)  Now I get a NameError exception on the
>> call to validate_user (which, at least, is a step in
>> the right direction)!!
>>
>> Do you have any suggestions as to what would be a
>> better way to structure this so I don't encounter that
>> issue?  Basically what I am trying to accomplish is
>> the following...
>>
>> There will be more defs in index.py (like the devices
>> def) whose contents I want to protect.  I want to
>> ensure that the user will have to enter their
>> user/passwd anytime attempts are made to access these
>> functions (unless the current session is still valid
>> of course).  After reading that article you references
>> it seems I would need to move the validate_user
>> function to an outside module and then import it
>> inside the def __auth__()??
>
> Personally I wouldn't use the mod_python.publisher authentication,
> but that is a topic for another time.
>
> If you must use the mod_python.publisher support for basic 
> authentication,
> then use a wrapper class to do it. If you have Python 2.4, you could 
> even
> use decorators for the purpose to make it a really clean solution.
>
> Basic code is:
>
>   from mod_python import apache
>
>   class Restricted:
>     def __init__(self,method,realm="Restricted Access"):
>       self.__call__ = method
>       self.__auth_realm__ = realm
>     def __auth__(self,req,user,password):
>       apache.log_error("__auth__")
>       return user == "mickey" and password == "mouse"
>
>   def index(req):
>     return "index"
>
>   def page1(req):
>     return "page1"
>
>   def page2(req):
>     return "page2"
>
>   page2 = Restricted(page2)
>
> The "Restricted" class acts as a wrapper around the published function.
> The auth functions are actually in the wrapper class. Because the 
> wrapper
> class is at global scope, you don't have the problem with nested 
> functions
> that you are seeing.
>
> I don't have Python 2.4, so can't give you a solution which uses 
> decorators,
> but I am sure that someone else on the mailing list who has and 
> understands
> decorators could provide so code pretty quick. The ideas with 
> decorators
> is you should be able to setup the code so all you need to do is 
> something
> like:
>
>   def index(req):
>     return "index"
>
>   def page1(req):
>     return "page1"
>
>   @restricted
>   def page2(req):
>     return "page2"
>
> The decorator would do the magic of wrapping the function for you 
> automatically.
> To me this would be a really clean solution, although possibly 
> restricted to use
> of functions.
>
> Anyone want to step up and provide a decorator solution for this?
>
>> Also, do any RPMs exist for these more recent versions
>> of mod_python OR is there a documented procedure for
>> building a mod_python RPM from the recent releases?
>
> I imagine someone will put together an RPM for 3.2.7/3.2.8
> at some stage. This is usually done by someone attached to
> the maintainers of the Linux distribution and not the mod_python
> folks though.
>
> Graham
>
>> --- Graham Dumpleton <grahamd at dscpl.com.au> wrote:
>>
>>> Robert Thomas Davis wrote ..
>>>> Graham
>>>>
>>>> Sorry...your replies were be sent to the "bulk"
>>>> folder...glad I checked it before just deleting
>>> all!
>>>>
>>>> I am using mod_python 3.1.3 with apache 2.0.53 on
>>>> Fedora Core 3.
>>>
>>> Any chance you can upgrade to mod_python 3.2.7? I
>>> really can't find
>>> any problem with the basic structure of what you are
>>> doing, but there
>>> have been fixes to publisher in 3.2.7 that may mean
>>> I am not seeing
>>> the problem.
>>>
>>>> The url I use to access the "devices" page (the
>>> one I
>>>> would like to protect) is
>>> http://localhost/devices.
>>>>
>>>> I do agree about having the info on the mailing
>>> list
>>>> so others could learn from it; maybe we can post
>>> the
>>>> results.
>>>
>>> The ongoing discussion is also useful, as the actual
>>> debugging process
>>> itself can be just as useful as the final result.
>>> Thus, use reply-all.
>>>
>>> Graham
>>>
>>>> Thanks,
>>>>
>>>> --- Graham Dumpleton <grahamd at dscpl.com.au> wrote:
>>>>
>>>>> BTW, I can't seem to find that you have ever
>>> said
>>>>> exactly which version
>>>>> of mod_python you are using. Are you using the
>>>>> latest version?
>>>>>
>>>>> Graham
>>>>>
>>>>> Graham Dumpleton wrote ..
>>>>>> Still generally prefer it to be on the mailing
>>>>> list as other people can
>>>>>> learn from it and it is in the mailing list
>>>>> archive as well, so people
>>>>>> down the track may find it as well and it may
>>>>> solve a problem for
>>>>>> them also.
>>>>>>
>>>>>> One more question. What URLs are you using to
>>>>> access the resources
>>>>>> so I can relate that properly to the Apache
>>>>> configuration and the
>>>>>> published functions in the file?
>>>>>>
>>>>>> Graham
>>>>>>
>>>>>> Robert Thomas Davis wrote ..
>>>>>>> Hell graham
>>>>>>>
>>>>>>> I really appreciate your help with
>>> this...and
>>>>> since
>>>>>>> you have been the only one responding I
>>> thought
>>>>> I
>>>>>>> might as well just mail you the files in
>>>>> question
>>>>>>> (index.py and httpd.conf, attached as a
>>> .tgz)
>>>>>>>
>>>>>>> The file index.py would normally live in the
>>>>>>> directory:
>>>>>>> /usr/local/lap/http/
>>>>>>>
>>>>>>> Based on your last reply I am wondering if
>>> it is
>>>>> my
>>>>>>> httpd.conf file that is setup incorrectly (i
>>> do
>>>>> not
>>>>>>> get the 500 error at all).  When the
>>> enclosed
>>>>> code
>>>>>>> gets executed it appears as though it skips
>>>>> right over
>>>>>>> the nested __auth__ fuction.  However, if
>>> that
>>>>>>> function is moved to the module scope
>>> (index.py)
>>>>> it
>>>>>>> always gets called and subsequently calls
>>> the
>>>>>>> validate_users function.
>>>>>>>
>>>>>>> Again...your help is much appreciated.
>>>>>>>
>>>>>>> Rob
>>>>>>
>>> _______________________________________________
>>>>>> Mod_python mailing list
>>>>>> Mod_python at modpython.org
>>>>>>
>>>>>
>>>>
>>>
>> http://mailman.modpython.org/mailman/listinfo/mod_python
>>>>>
>>>
>
> _______________________________________________
> Mod_python mailing list
> Mod_python at modpython.org
> http://mailman.modpython.org/mailman/listinfo/mod_python



More information about the Mod_python mailing list