Commit 3b580cde authored by Arnaud Fontaine's avatar Arnaud Fontaine

zope4py3: Update CookieCrumbler monkey-patch to properly handle bytes().

parent af0cefdc
from future import standard_library
standard_library.install_aliases()
from urllib.parse import unquote from urllib.parse import unquote
return unquote(value).decode('base64').split(':', 1)[0] from base64 import standard_b64decode
return standard_b64decode(unquote(value)).split(b':', 1)[0].decode()
from future import standard_library
standard_library.install_aliases()
from past.utils import old_div
from urllib.parse import urlparse from urllib.parse import urlparse
portal = context.getPortalObject() portal = context.getPortalObject()
...@@ -12,7 +9,7 @@ else: ...@@ -12,7 +9,7 @@ else:
expire_interval /= 86400. # seconds -> days expire_interval /= 86400. # seconds -> days
now = DateTime() now = DateTime()
kw['expires'] = (now + expire_interval).toZone('GMT').rfc822() kw['expires'] = (now + expire_interval).toZone('GMT').rfc822()
ac_renew = (now + old_div(expire_interval, 2)).millis() ac_renew = (now + expire_interval / 2).millis()
portal.portal_sessions[ portal.portal_sessions[
portal.Base_getAutoLogoutSessionKey( portal.Base_getAutoLogoutSessionKey(
username=portal.Base_getUsernameFromAuthenticationCookie( username=portal.Base_getUsernameFromAuthenticationCookie(
......
...@@ -59,7 +59,9 @@ def encodeKey(key): ...@@ -59,7 +59,9 @@ def encodeKey(key):
""" """
# According to the memcached's protocol.txt, the key cannot contain # According to the memcached's protocol.txt, the key cannot contain
# control characters and white spaces. # control characters and white spaces.
return encodestring(key, True).replace('\n', '').replace('\r', '') if isinstance(key, str):
key = key.encode()
return encodestring(key, True).replace(b'\n', b'').replace(b'\r', b'')
if memcache is not None: if memcache is not None:
# Real memcache tool # Real memcache tool
......
...@@ -25,6 +25,8 @@ Patch CookieCrumbler to prevent came_from to appear in the URL ...@@ -25,6 +25,8 @@ Patch CookieCrumbler to prevent came_from to appear in the URL
when ERP5 runs in "require_referer" mode. when ERP5 runs in "require_referer" mode.
""" """
import six
from builtins import object from builtins import object
from future import standard_library from future import standard_library
standard_library.install_aliases() standard_library.install_aliases()
...@@ -140,7 +142,11 @@ def modifyRequest(self, req, resp): ...@@ -140,7 +142,11 @@ def modifyRequest(self, req, resp):
attempt = ATTEMPT_LOGIN attempt = ATTEMPT_LOGIN
name = req[self.name_cookie] name = req[self.name_cookie]
pw = req[self.pw_cookie] pw = req[self.pw_cookie]
ac = standard_b64encode('%s:%s' % (name, pw)) if six.PY2:
ac = standard_b64encode('%s:%s' % (name, pw)).rstrip()
else:
ac = standard_b64encode(
('%s:%s' % (name, pw)).encode()).rstrip().decode()
self._setAuthHeader(ac, req, resp) self._setAuthHeader(ac, req, resp)
if req.get(self.persist_cookie, 0): if req.get(self.persist_cookie, 0):
# Persist the user name (but not the pw or session) # Persist the user name (but not the pw or session)
...@@ -161,7 +167,10 @@ def modifyRequest(self, req, resp): ...@@ -161,7 +167,10 @@ def modifyRequest(self, req, resp):
ac = unquote(req[self.auth_cookie]) ac = unquote(req[self.auth_cookie])
if ac and ac != 'deleted': if ac and ac != 'deleted':
try: try:
standard_b64decode(ac) if six.PY2:
standard_b64decode(ac)
else:
standard_b64decode(ac.encode())
except: except:
# Not a valid auth header. # Not a valid auth header.
pass pass
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment