[Moin-user] Upgrade 1.5.7 > 1.7.2 external cookie problem

Thomas Waldmann tw-public at gmx.de
Tue Sep 16 12:04:28 EDT 2008


Just some hints:

> I used the contrib/authexternalcookie as template

Take this stuff with a grain of salt. It is not in current use by any of
the moin developers, so the code might need some work (and it would be
nice to get improved code contributed back :).

> >>> >>> Please have a look at MoinMoin/request/__init__.py:emit_http_headers.
> >>> >>>
> >>> >>>     if lkey in ['vary', 'cache-control', 'content-language', ]:
> >>> >>>
> >>> >>> These are the headers we allow multiple times and just merge their
> >>> >>> values into a single header. Please add 'set-cookie' to that list and
> >>> >>> try if that works (it won't give exceptions any more, but you have to
> >>> >>> check if BOTH cookies work correctly).
> > >
> > > Did you do that?
> >   
> yes

OK, if that worked (you got both cookies), I can commit that to the moin
repo.

> >> >> TypeError: unpack non-sequence

I bet this comes from the "return request.finish()" you have in there.

> class ExternalCookie(BaseAuth):
>     name = 'external_cookie'
>     def request(self,request,user_obj, **kw):
>         """ authenticate via external cookie """
>         import Cookie
>         cookiename = "NSFLAB" # XXX external cookie name you want to use
>         try:
>             cookie = Cookie.SimpleCookie(request.saved_cookie)
>         except Cookie.CookieError:
>             # ignore invalid cookies
>             cookie = None
>         import urllib
>         if cookie and cookie.has_key(cookiename):
>             cookievalue = cookie[cookiename].value
>             cookievalue = urllib.unquote(cookievalue)
>             cookievalue = cookievalue.decode('iso-8859-1')
>             cookievalue = cookievalue.split('|')
>         elif cookie and cookie.has_key('attESHr'):
>             cookievalue = cookie['attESHr'].value
>             cookievalue = urllib.unquote(cookievalue)
>             cookievalue = cookievalue.decode('iso-8859-1')
>             cookievalue = cookievalue.split('|')
>             userid = cookievalue[2]
>             cookievalue.append(userid.split('@')[0])
> #            f = open("cookie.log", "a")
> #            f.write("\n")
> #            f.write(repr(cookie))
> #            f.write(repr(cookievalue))
> #            f.write("\n")
> #            f.close()
>         else : #------ no cookies
>             url = hrloginurl + 'http://' + request.http_host + request.request_uri
>             request.http_redirect(url)
>             return request.finish()

THIS! ^^^

BTW, you can use logging.debug("...") instead of writing your own
files. 

With 1.7.x moin's logging configuration is very flexible and you can
enable debug logging for specific modules. For temp. stuff, you can also
use logging.warning("...") which likely comes through without changing
the logging configuration.

>     auth = [ExternalCookie(),MoinAuth()]
>     cookie_domain = '.nsf.att.com'

Is the . at the beginning correct?







More information about the Moin-user mailing list