From 1b7cf70cd2e22f281a42f5b1d6870b1dc03c9855 Mon Sep 17 00:00:00 2001 From: Valentin Lab Date: Tue, 25 Apr 2023 18:09:22 +0200 Subject: [PATCH] new: [vps] add ``odoo fix-sso`` command. --- README.org | 21 +++++++++++++++++++++ bin/vps | 30 +++++++++++++++++++++++++++++- 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/README.org b/README.org index 9698d26..4a6871f 100644 --- a/README.org +++ b/README.org @@ -482,6 +482,27 @@ compose run --rm --use-aliases odoo --dev=wdb --config=/opt/odoo/auto/odoo.conf Le container odoo crée par la dernière ligne se retirera proprement des tables DNS interne, et donc peut tout a fait être relancée autant de fois que l'on souhaitera. +**** Single Sign On en carafe + +L'installation du module =website= et =galicia= pour l'authentication +Single Sign On peut aboutir à une situation où le sign on est +automatique et arrive sur un mauvais utilisateur. + +Il s'agit de l'utilisateur attaché à l'objet =website= surlequel le sign on +du service tiers a été configuré pour pointer. + +En effet, l'objet ~website~ possède un ~user_id~ qui va être utilisé en guise +d'utilisateur par défaut. Si celui-ci ne correspond pas à l'utilisateur odoo ~public_user~, +alors =galicia= considère que cet utilisateurs est déjà loggé et offre son accès. + +La solution est de forcer le ~user_id~ des objets ~website~ à l'id de l'utilisateur ~public_user~. + +C'est ce que fait la commande: + +#+begin_src sh +vps odoo fix-sso +#+end_src + *** letsencrypt Le service letsencrypt fourni des certificat SSL à la demande et les diff --git a/bin/vps b/bin/vps index 39ec2ad..9f10f74 100755 --- a/bin/vps +++ b/bin/vps @@ -697,8 +697,9 @@ export -f compose:container:service compose:psql() { local project_name="$1" dbname="$2" container_id + shift 2 container_id=$(compose:charm:container_one "$project_name" "postgres") || return 1 - docker exec -i "${container_id}" psql -U postgres "$dbname" + docker exec -i "${container_id}" psql -U postgres "$dbname" "$@" } export -f compose:psql @@ -767,6 +768,13 @@ postgres:restore() { export -f postgres:restore +odoo:get_public_user_id() { + local project_name="$1" dbname="$2" + echo "select res_id from ir_model_data where model = 'res.users' and name = 'public_user';" | + compose:psql "$project_name" "$dbname" -qAt +} + + cyclos:set_root_url() { local project_name="$1" dbname="$2" url="$3" @@ -1387,6 +1395,26 @@ cmdline.spec:odoo:cmd:set-cyclos-url:run() { } EOF +} + + +cmdline.spec.gnu fix-sso +cmdline.spec:odoo:cmd:fix-sso:run() { + + : :optval: --database,-d "Target database ('odoo' if not specified)" + + local public_user_id project_name dbname + + dbname=${opt_database:-odoo} + project_name=$(compose:project_name) || exit 1 + public_user_id=$(odoo:get_public_user_id "${project_name}" "${dbname}") || exit 1 + Wrap -d "fix website's object to 'public_user' (id=$public_user_id)" <