77 lines
1.8 KiB
Python
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
|