[FIX] hw_drivers: add cron for HTTPS certificate update
Context: When an HTTPS certificate is delivered, it is valid for ~1 month. To avoid missing the certificate, a script is automatically ran daily to check if a new HTTPS certificate is necessary. On the IoT box, it is added in the native Unix system with this file: https://github.com/odoo/odoo/blob/16.0/addons/point_of_sale/tools/posbox/overwrite_after_init/etc/cron.daily/odoo However, prior to this commit, there is nothing equivalent for windows Note: the HTTPS certificate check is also done automatically when accessing the homepage. Before this commit: After an HTTPS certificate delivery, if we let the IoT server running non-stop (and without accessing the homepage). The HTTPS will expire without any automatic renew. After this commit: The cron process is handled by the handler Manager Other note: - Using native Windows "Scheduled Task" have been proposed at: https://github.com/odoo/odoo/pull/144584 But, was judged too risky from a security point of view - `sched` library have been discarded as the code is too verbose - This is unstable for the iot-box. This is the reason for the initial Windows check on the import. The iot-box does not need this fix anyway as explained in the context opw-3617687 closes odoo/odoo#145114 X-original-commit: b9bd36056fbd3c27148da82cc49039669b8f8563 Signed-off-by: Loan Sens (lse) <lse@odoo.com>
This commit is contained in:
@@ -14,6 +14,14 @@ from odoo.addons.hw_drivers.websocket_client import WebsocketClient
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
try:
|
||||
import schedule
|
||||
except ImportError:
|
||||
schedule = None
|
||||
# For now, it is intended to not be installed on the iot-box as it uses native Unix cron system
|
||||
if platform.system() == 'Windows':
|
||||
_logger.warning('Could not import library schedule')
|
||||
|
||||
try:
|
||||
from dbus.mainloop.glib import DBusGMainLoop
|
||||
except ImportError:
|
||||
@@ -104,6 +112,9 @@ class Manager(Thread):
|
||||
except Exception as e:
|
||||
_logger.error("Error in %s: %s", str(interface), e)
|
||||
|
||||
# Set scheduled actions
|
||||
schedule and schedule.every().day.at("00:00").do(helpers.get_certificate_status)
|
||||
|
||||
#Setup the websocket connection
|
||||
if helpers.get_odoo_server_url():
|
||||
iot_client.start()
|
||||
@@ -116,6 +127,7 @@ class Manager(Thread):
|
||||
self.previous_iot_devices = iot_devices.copy()
|
||||
self.send_alldevices(iot_client)
|
||||
time.sleep(3)
|
||||
schedule and schedule.run_pending()
|
||||
except Exception:
|
||||
# No matter what goes wrong, the Manager loop needs to keep running
|
||||
_logger.error(format_exc())
|
||||
|
||||
@@ -4,3 +4,4 @@ ghostscript==0.7
|
||||
cryptocode==0.1
|
||||
pysmb==1.2.9.1
|
||||
websocket-client==1.6.3
|
||||
schedule==1.2.1
|
||||
|
||||
Reference in New Issue
Block a user