Add trigger and backfill for upstream OAuth user session tracking

Introduce a new trigger and a backfill migration to populate the
`user_session_id` column in `upstream_oauth_authorization_sessions`
based on `user_session_authentications`. This ensures historical data is
consistent and aids in backward compatibility.
This commit is contained in:
Quentin Gliech
2026-01-21 13:32:12 +01:00
parent 76b971ad45
commit b912fbc0c9
2 changed files with 40 additions and 0 deletions

View File

@@ -0,0 +1,27 @@
-- Copyright 2026 Element Creations Ltd.
--
-- SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
-- Please see LICENSE files in the repository root for full details.
-- Adds a trigger which will backfill the user_session_id column when inserting
-- a new user_session_authentications row. This is to help supporting rolling
-- back to previous releases and should be dropped in a future version.
CREATE OR REPLACE FUNCTION upstream_oauth_authorization_sessions_insert_trigger()
RETURNS TRIGGER AS $$
BEGIN
IF NEW.upstream_oauth_authorization_session_id IS NOT NULL THEN
UPDATE upstream_oauth_authorization_sessions
SET user_session_id = NEW.user_session_id
WHERE upstream_oauth_authorization_sessions.upstream_oauth_authorization_session_id
= NEW.upstream_oauth_authorization_session_id
AND upstream_oauth_authorization_sessions.user_session_id IS NULL;
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
-- Create the trigger
CREATE TRIGGER upstream_oauth_authorization_sessions_insert_trigger
AFTER INSERT ON user_session_authentications
FOR EACH ROW
EXECUTE FUNCTION upstream_oauth_authorization_sessions_insert_trigger();

View File

@@ -0,0 +1,13 @@
-- Copyright 2026 Element Creations Ltd.
--
-- SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
-- Please see LICENSE files in the repository root for full details.
-- Backfill the upstream_oauth_authorization_sessions.user_session_id column
-- based on session authentications
UPDATE upstream_oauth_authorization_sessions
SET user_session_id = user_session_authentications.user_session_id
FROM user_session_authentications
WHERE upstream_oauth_authorization_sessions.user_session_id IS NULL
AND upstream_oauth_authorization_sessions.upstream_oauth_authorization_session_id
= user_session_authentications.upstream_oauth_authorization_session_id;