A copyright violation detector running on Wikimedia Cloud Services https://tools.wmflabs.org/copyvios/
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
 
 
 
 
 

54 Zeilen
1.7 KiB

  1. # -*- coding: utf-8 -*-
  2. import base64
  3. from Cookie import CookieError, SimpleCookie
  4. from datetime import datetime, timedelta
  5. class _CookieManager(SimpleCookie):
  6. MAGIC = "--cpv2"
  7. def __init__(self, path, cookies):
  8. self._path = path
  9. try:
  10. super(_CookieManager, self).__init__(cookies)
  11. except CookieError:
  12. super(_CookieManager, self).__init__()
  13. for cookie in self.keys():
  14. if self[cookie].value is False:
  15. del self[cookie]
  16. def value_decode(self, value):
  17. unquoted = super(_CookieManager, self).value_decode(value)[0]
  18. try:
  19. decoded = base64.b64decode(unquoted).decode("utf8")
  20. except (TypeError, UnicodeDecodeError):
  21. return False, "False"
  22. if decoded.startswith(self.MAGIC):
  23. return decoded[len(self.MAGIC):], value
  24. return False, "False"
  25. def value_encode(self, value):
  26. encoded = base64.b64encode(self.MAGIC + value.encode("utf8"))
  27. quoted = super(_CookieManager, self).value_encode(encoded)[1]
  28. return value, quoted
  29. @property
  30. def path(self):
  31. return self._path
  32. def parse_cookies(path, cookies):
  33. return _CookieManager(path, cookies)
  34. def set_cookie(headers, cookies, key, value, days=0):
  35. cookies[key] = value
  36. if days:
  37. expires = datetime.utcnow() + timedelta(days=days)
  38. cookies[key]["expires"] = expires.strftime("%a, %d %b %Y %H:%M:%S GMT")
  39. cookies[key]["path"] = cookies.path
  40. headers.append(("Set-Cookie", cookies[key].OutputString()))
  41. def delete_cookie(headers, cookies, key):
  42. set_cookie(headers, cookies, key, u"", days=-1)
  43. del cookies[key]