From 7f405a1e6ba2bbbb042644b01f244f0499a6c7be Mon Sep 17 00:00:00 2001 From: Vladimir D Date: Thu, 19 Oct 2023 15:57:22 +0400 Subject: [PATCH] Fixes to migration --- start.sh | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/start.sh b/start.sh index 510e6a1..3d5b669 100755 --- a/start.sh +++ b/start.sh @@ -4,13 +4,21 @@ set -eu mkdir -p /app/data/data /app/data/configs /run/synapse -# can be removed in the next release +# can be removed in the next release (https://github.com/matrix-org/synapse/issues/7633) migrate_ldap_users_to_oidc() { set -eu + echo "==> Migrating existing LDAP users to OIDC" + + # Wait for synapse to finish db setup, before we do any db operations + while ! curl --fail http://localhost:8008; do + echo "==> Waiting for Synapse to come up" + sleep 5 + done + echo "==> Synapse is up, migrate LDAP users" users_to_migrate=$(PGPASSWORD=${CLOUDRON_POSTGRESQL_PASSWORD} psql -h ${CLOUDRON_POSTGRESQL_HOST} -p ${CLOUDRON_POSTGRESQL_PORT} -U ${CLOUDRON_POSTGRESQL_USERNAME} -d ${CLOUDRON_POSTGRESQL_DATABASE} -AXqtc "SELECT count(*) FROM Users u LEFT JOIN user_external_ids ext_ids ON u.name=ext_ids.user_id WHERE ext_ids.user_id IS NULL") - echo " Users to migrate: ${users_to_migrate}" + echo "==> Users to migrate: ${users_to_migrate}" if [[ ${users_to_migrate} -gt 0 ]]; then PGPASSWORD=${CLOUDRON_POSTGRESQL_PASSWORD} psql -h ${CLOUDRON_POSTGRESQL_HOST} -p ${CLOUDRON_POSTGRESQL_PORT} -U ${CLOUDRON_POSTGRESQL_USERNAME} -d ${CLOUDRON_POSTGRESQL_DATABASE} -c "INSERT INTO user_external_ids SELECT 'oidc-cloudron' AS auth_provider, substring(u.name from '@(.*):') AS external_id, u.name as user_id FROM Users u LEFT JOIN user_external_ids ext_ids ON u.name=ext_ids.user_id WHERE ext_ids.user_id IS NULL" fi @@ -92,10 +100,9 @@ if [[ -n "${CLOUDRON_OIDC_ISSUER:-}" ]]; then yq eval -i ".oidc_providers[0].token_endpoint=\"${CLOUDRON_OIDC_TOKEN_ENDPOINT}\"" /app/data/configs/homeserver.yaml yq eval -i ".oidc_providers[0].userinfo_endpoint=\"${CLOUDRON_OIDC_PROFILE_ENDPOINT}\"" /app/data/configs/homeserver.yaml yq eval -i ".oidc_providers[0].user_mapping_provider.config.localpart_template=\"{{ user.sub }}\"" /app/data/configs/homeserver.yaml - yq eval -i ".oidc_providers[0].user_mapping_provider.config.display_name_template=\"{{ user.sub }}\"" /app/data/configs/homeserver.yaml + yq eval -i ".oidc_providers[0].user_mapping_provider.config.display_name_template=\"{{ user.name }}\"" /app/data/configs/homeserver.yaml - echo "==> Migrating existing LDAP users to OIDC" - migrate_ldap_users_to_oidc + ( migrate_ldap_users_to_oidc ) & else yq eval -i ".password_config.localdb_enabled=true" /app/data/configs/homeserver.yaml # just setting enabled to false is not enough. see https://github.com/matrix-org/matrix-synapse-ldap3/issues/123