[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:
Loan (LSE)
2023-12-06 17:27:42 +00:00
parent e3ddf17bef
commit 962d4324fb
2 changed files with 13 additions and 0 deletions
+12
View File
@@ -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())
+1
View File
@@ -4,3 +4,4 @@ ghostscript==0.7
cryptocode==0.1
pysmb==1.2.9.1
websocket-client==1.6.3
schedule==1.2.1