Skip to content
This repository was archived by the owner on Apr 26, 2024. It is now read-only.

Commit 18628fc

Browse files
committed
MSC2918: make access_tokens.used nullable
This avoids rewriting the whole table on disk on Postgres < 11 Signed-off-by: Quentin Gliech <[email protected]>
1 parent 0060bc9 commit 18628fc

File tree

4 files changed

+15
-38
lines changed

4 files changed

+15
-38
lines changed

synapse/storage/databases/main/registration.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -477,8 +477,15 @@ def _query_for_auth(self, txn, token: str) -> Optional[TokenLookupResult]:
477477

478478
txn.execute(sql, (token,))
479479
rows = self.db_pool.cursor_to_dict(txn)
480+
480481
if rows:
481-
return TokenLookupResult(**rows[0])
482+
row = rows[0]
483+
484+
# This field is nullable, ensure it comes out as a boolean
485+
if row["token_used"] is None:
486+
row["token_used"] = False
487+
488+
return TokenLookupResult(**row)
482489

483490
return None
484491

@@ -1157,7 +1164,8 @@ def _lookup_refresh_token_txn(txn) -> Optional[RefreshTokenLookupResult]:
11571164
device_id=row[2],
11581165
next_token_id=row[3],
11591166
has_next_refresh_token_been_refreshed=row[4],
1160-
has_next_access_token_been_used=row[5],
1167+
# This column is nullable, ensure it's a boolean
1168+
has_next_access_token_been_used=(row[5] or False),
11611169
)
11621170

11631171
return await self.db_pool.runInteraction(
@@ -1435,6 +1443,7 @@ async def add_access_token_to_user(
14351443
"puppets_user_id": puppets_user_id,
14361444
"last_validated": now,
14371445
"refresh_token_id": refresh_token_id,
1446+
"used": False,
14381447
},
14391448
desc="add_access_token_to_user",
14401449
)

synapse/storage/schema/main/delta/59/14refresh_tokens.sql

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,3 +28,7 @@ CREATE TABLE refresh_tokens (
2828
-- Add a reference to the refresh token generated alongside each access token
2929
ALTER TABLE "access_tokens"
3030
ADD COLUMN refresh_token_id BIGINT REFERENCES refresh_tokens (id) ON DELETE CASCADE;
31+
32+
-- Add a flag whether the token was already used or not
33+
ALTER TABLE "access_tokens"
34+
ADD COLUMN used BOOLEAN;

synapse/storage/schema/main/delta/59/14refresh_tokens.sql.postgres

Lines changed: 0 additions & 18 deletions
This file was deleted.

synapse/storage/schema/main/delta/59/14refresh_tokens.sql.sqlite

Lines changed: 0 additions & 18 deletions
This file was deleted.

0 commit comments

Comments
 (0)