initial commit
[squeep-indie-auther] / src / db / postgres / sql / token-cleanup.sql
1 -- Remove tokens no longer in use.
2 -- only clean after code has expired
3 WITH
4 cleanable_codes AS (
5 SELECT t.code_id, t.is_token, t.is_revoked, t.expires, t.refresh_expires FROM token t
6 WHERE t.created < (now() - $(codeLifespanSeconds)::text::interval)
7 )
8 DELETE FROM token WHERE code_id IN (
9 SELECT code_id FROM cleanable_codes
10 WHERE
11 NOT is_token -- profile-only redemptions
12 OR (
13 is_token AND (
14 is_revoked -- revoked
15 OR (
16 expires < now() AND (
17 -- expired and unrefreshable
18 refresh_expires IS NULL
19 OR
20 -- expired and refresh expired
21 (refresh_expires IS NOT NULL AND refresh_expires < now())
22 )
23 )
24 )
25 )
26 )