[Zope-PAS] Re: challenge branch ready for review
Lennart Regebro
regebro at nuxeo.com
Thu Oct 14 08:33:04 EDT 2004
Zachery Bir wrote:
> On 2004-10-14 06:00:09 -0400, Lennart Regebro <regebro at nuxeo.com> said:
>
>> Zachery Bir wrote:
>>
>>> I've got a working implementation of PAS on
>>> pre-1_0_3-zbir-challenge-branch that exercises:
>>>
>>> - the CookieAuthHelper plugin (very rudimentary, not as smart as
>>> CookieCrumbler)
>>>
>>> - the HTTPBasicAuthHelper
>>>
>>> - the new challenge machinery discussed here that limits players in
>>> a given challenge to plugins that support the same protocol
>>>
>>> We've also got tests that exercise nested PAS instances, showing that
>>> PASes that can't or don't participate in a challenge will delegate it
>>> up the request chain and allow other PASes (or even the ZPublisher) to
>>> challenge.
>>>
>>> Please take a look and let me know what you think. I'd like to merge
>>> this to the head and then start on the ID mangling (coming, Jens, I
>>> promise ;^)).
>>
>>
>> This only overrides _unauthorized(), which means that _exception()
>> will then later in the chain perform a HTTP Basic auth no matter what.
>> You need to override _exception *and* _unauthorized, like is done in
>> HEAD for the moment.
>
>
> No, you don't. RESPONSE.exception() calls RESPONSE._unauthorized, which
> we already trap and we do the challenge there. Go look at the code in
> HTTPResponse.
I know, I HAVE looked at it. Explain to me why I'm wrong instead of just
assuming that I don't know what I'm talking about please. :-) I have
done several different challenge implementations now, I am slowly
getting the hang of it. :-)
OK, if the ugly "self._locked_status" hack is used, it's possible to
prevent the status to be changed later. But the body will still be
overriden. That means that one of the three identified types of
challenges is not possible to implement, for no particularily good reason.
Only the http-protocol challengers and redirects will work.
The challenge is also called twice when you do a
response.unauthorized(), which doesn't seem very useful, is a pain when
debugging and could confuse lot's of things. That can be fixed by
overriding RESPONSE.unauthorized() as well, so that it no longer calls
_unauthorized.
I prefer my solution, however.
More information about the Zope-PAS
mailing list