Commit graph

3 commits

Author SHA1 Message Date
9b76f4477c [ADD] reverse proxy: local CA and server certificate for HTTPS tests
Testing Odoo behind HTTPS needs a certificate the browser accepts,
WebSocket over wss included. local_cert.py issues, through the openssl
command, a local authority to import once and a server certificate it
signs for localhost, the loopbacks, the host name and its addresses.
The authority is kept across issues, so a new name needs no new import;
the directory is 0700 and the keys 0600, the authority being able to
sign for any name. Server certificates last 397 days, under the 398
that browsers accept.
Checked: 6 tests, openssl verify passes, SAN and key modes asserted.

--- FR ---

[ADD] reverse proxy : autorité locale et certificat pour tests HTTPS

Tester Odoo derrière HTTPS exige un certificat que le navigateur accepte,
WebSocket en wss comprise. local_cert.py émet, par la commande openssl,
une autorité locale à importer une fois et un certificat serveur qu'elle
signe pour localhost, les boucles locales, le nom d'hôte et ses adresses.
L'autorité est gardée d'une émission à l'autre : un nouveau nom n'exige
aucun nouvel import. Répertoire en 0700 et clés en 0600, l'autorité
pouvant signer pour tout nom. Certificats serveur de 397 jours, sous les
398 qu'acceptent les navigateurs.
Vérifié : 6 tests, openssl verify passe, SAN et droits des clés vérifiés.

Assisted-by: Claude Opus 5.5
2026-09-26 02:17:19 -04:00
83e747078e [ADD] todo network: start the Odoo reverse proxy, local or network
Network gains a fourth entry that starts script/reverse_proxy/main.py
with the web and bus ports read from config.conf, falling back to the
older xmlrpc_port and longpolling_port names. It asks for this machine
only or the whole network, local by default, and warns when proxy_mode
is off or workers is 0: the first makes Odoo ignore X-Forwarded-*, the
second leaves no bus port, so /websocket fails behind the proxy too.
Checked: 48 tests pass (proxy, config reading, menu wiring, i18n); the
French screen renders with the real config.conf.

--- FR ---

[ADD] todo network : lancer le mandataire inverse Odoo, local ou réseau

Network gagne une quatrième entrée qui lance script/reverse_proxy/main.py
avec les ports web et bus lus dans config.conf, repli sur les anciens noms
xmlrpc_port et longpolling_port. Elle demande cette machine seule ou tout
le réseau, local par défaut, et prévient quand proxy_mode est éteint ou
workers vaut 0 : le premier fait ignorer X-Forwarded-* à Odoo, le second
ne laisse aucun port de bus, et /websocket échoue aussi derrière le proxy.
Vérifié : 48 tests passent (mandataire, lecture du config, câblage du
menu, i18n) ; l'écran français s'affiche avec le vrai config.conf.

Assisted-by: Claude Opus 5.5
2026-09-26 02:17:19 -04:00
53ef296690 [ADD] reverse proxy: dev front for Odoo 18, websocket relayed both ways
A single local address routes pages to the Odoo web port and /websocket
to the bus port, with X-Forwarded-* set for proxy_mode; a client value
for these headers is replaced. Only the request head is read: bytes then
pass through unchanged in both directions, so an upgraded WebSocket stays
open and a gzip or chunked response reaches the browser intact. Each
connection carries one request; production keeps nginx (script/nginx).
Checked: 15 tests on real sockets (routing, headers, 5 MB body, gzip,
WebSocket echo, 502, 400, 431); byte-identical to direct against Odoo 18.

--- FR ---

[ADD] reverse proxy : façade de dev pour Odoo 18, websocket dans 2 sens

Une seule adresse locale envoie les pages au port web d'Odoo et
/websocket au port du bus, avec les X-Forwarded-* de proxy_mode ; la
valeur qu'un client donne à ces en-têtes est remplacée. Seule la tête est
lue : les octets passent ensuite tels quels dans les deux sens, une
WebSocket montée reste ouverte et une réponse gzip ou en morceaux arrive
intacte. Une requête par connexion ; la production garde nginx.
Vérifié : 15 tests sur vrais sockets (routage, en-têtes, corps de 5 Mo,
gzip, écho WebSocket, 502, 400, 431) ; identique octet pour octet au
direct face à Odoo 18.

Assisted-by: Claude Opus 5.5
2026-09-26 02:17:19 -04:00