Files
tryton/tryton/device_cookie.py
T
2021-02-21 16:23:11 +01:00

77 lines
1.8 KiB
Python

# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
import os
import json
import logging
from threading import Lock
from tryton.config import get_config_dir, CONFIG
logger = logging.getLogger(__name__)
COOKIES_PATH = os.path.join(get_config_dir(), 'device_cookies')
_lock = Lock()
def renew():
from tryton.common import common
def set_cookie(new_cookie):
try:
new_cookie = new_cookie()
except Exception:
logger.error("Cannot renew device cookie", exc_info=True)
else:
_set(new_cookie)
current_cookie = get()
common.RPCExecute(
'model', 'res.user.device', 'renew', current_cookie,
process_exception=False, callback=set_cookie)
def get():
cookies = _load()
return cookies.get(_key())
def _key():
from tryton import common
host = CONFIG['login.host']
hostname = common.get_hostname(host)
port = common.get_port(host)
database = CONFIG['login.db']
username = CONFIG['login.login']
return '%(username)s@%(hostname)s:%(port)s/%(database)s' % {
'username': username,
'hostname': hostname,
'port': port,
'database': database,
}
def _set(cookie):
cookies = _load()
cookies[_key()] = cookie
try:
with _lock:
with open(COOKIES_PATH, 'w') as cookies_file:
json.dump(cookies, cookies_file)
except Exception:
logger.error('Unable to save cookies file')
def _load():
if not os.path.isfile(COOKIES_PATH):
return {}
try:
with open(COOKIES_PATH) as cookies:
cookies = json.load(cookies)
except Exception:
logger.error("Unable to load device cookies file", exc_info=True)
cookies = {}
return cookies