py.lib.aw_web_tools

Yohn Y. 2025-10-15 Parent:06f00ec09030

14:0920ae304dfd Go to Latest

py.lib.aw_web_tools/src/aw_web_tools/cookie.py

.. 1.202510.1 + Режим фековой авторизации для адаптера authelia. Режим требуется для отладки, поскольку вряд ли на машине разработчика будет развёрнуто это ПО на ранних стадиях разработки (преальфа). Возможно режим будет полезен при поиска проблем в приложении при авторизации.

History
1 # coding: utf-8
3 import bottle
4 from typing import Union, Any, Dict, Optional
5 from datetime import datetime
8 class Cookie(object):
9 """\
10 Класс хранящий ``cookie`` и способный их устанавливать в объекты http-ответов ``bottle``
11 """
13 def __init__(self, name: str, value: str,
14 max_age: Optional[int] = None,
15 expires: Optional[Union[int, datetime]] = None,
16 path: Optional[str] = None,
17 secure: bool = True,
18 httponly: bool = True,
19 samesite: bool = False,
20 domain: Optional[str] = None):
21 """\
22 :param name: Имя ``cookie``
23 :param value: Значение ``cookie``
24 :param max_age: Время жизни ``cookie`` в секундах.
25 :param expires: Значение времени, когда cookie будет удалена, задаётся в виде ``unix timestamp (int)`` или
26 ``datetime``
27 :param path: Префикс пути поиска ресурса на данном сайте, для которого следует отправлять данное ``cookie``
28 :param secure: Отправлять ``cookie`` только по шифрованным каналам связи
29 :param httponly: Сделать ``cookie`` не доступной для ``JavaScript``
30 :param samesite: Не отправлять данную cookie, если запрос пришёл не с того же сайта (анализируется заголовок
31 referer)
32 :param domain: Имя домена в рамках которого выставляется cookie. В современных браузерах может и глючить
33 """
35 self.name = name
36 self.value = value
37 self.max_age = max_age
38 self.expires = expires
39 self.path = path
40 self.secure = secure
41 self.httponly = httponly
42 self.samesite = samesite
43 self.domain = domain
45 def to_dict(self) -> Dict[str, Any]:
46 """\
47 Подготавливает параметры, которые можно передать в процедуру ``set_cookie``
48 объекта ``Response``
49 """
50 res = {
51 'name': self.name,
52 'value': self.value,
53 'secure': self.secure,
54 'httponly': self.httponly,
55 }
57 if self.samesite:
58 res['samesite'] = 'strict'
60 for k in ('max_age', 'expires', 'path', 'domain'):
61 if getattr(self, k) is not None:
62 res[k] = getattr(self, k)
64 return res
66 def get_remove_param(self) -> Dict[str, Any]:
67 """\
68 Подготавливает параметры, которые можно передать в процедуру ``delete_cookie``
69 объекта ``Response``
70 """
71 res = self.to_dict()
72 res['key'] = res['name']
73 del res['value']
74 del res['name']
75 return res
77 def response_add(self, resp: bottle.BaseResponse):
78 resp.set_cookie(**self.to_dict())
80 def response_delete(self, resp: bottle.BaseResponse):
81 resp.delete_cookie(**self.get_remove_param())