1+ SET NAMES utf8mb4 COLLATE utf8mb4_bin;
2+
3+ CALL assertPatchLevel(' 159' );
4+
5+ CREATE PROCEDURE ` resetAccount_19` (
6+ IN ` uidArg` BINARY(16 ),
7+ IN ` verifyHashArg` BINARY(32 ),
8+ IN ` verifyHashVersion2Arg` BINARY(32 ),
9+ IN ` authSaltArg` BINARY(32 ),
10+ IN ` clientSaltArg` VARCHAR (128 ),
11+ IN ` wrapWrapKbArg` BINARY(32 ),
12+ IN ` wrapWrapKbVersion2Arg` BINARY(32 ),
13+ IN ` verifierSetAtArg` BIGINT UNSIGNED,
14+ IN ` verifierVersionArg` TINYINT UNSIGNED,
15+ IN ` keysHaveChangedArg` BOOLEAN ,
16+ IN ` isPasswordUpgrade` BOOLEAN
17+ )
18+ BEGIN
19+ DECLARE EXIT HANDLER FOR SQLEXCEPTION
20+ BEGIN
21+ ROLLBACK ;
22+ RESIGNAL;
23+ END;
24+
25+ START TRANSACTION ;
26+
27+ -- When we upgrade accounts to key stretching v2, we do
28+ -- an 'automated reset' for the user. When we do this, we
29+ -- preserve the underlying private key, so there's actually
30+ -- no reason to drop associated data.
31+ IF isPasswordUpgrade = 0 THEN
32+ DELETE FROM sessionTokens WHERE uid = uidArg;
33+ DELETE FROM keyFetchTokens WHERE uid = uidArg;
34+ DELETE FROM accountResetTokens WHERE uid = uidArg;
35+ DELETE FROM passwordChangeTokens WHERE uid = uidArg;
36+ DELETE FROM passwordForgotTokens WHERE uid = uidArg;
37+ DELETE devices, deviceCommands FROM devices LEFT JOIN deviceCommands
38+ ON (deviceCommands .uid = devices .uid AND deviceCommands .deviceId = devices .id )
39+ WHERE devices .uid = uidArg; DELETE FROM unverifiedTokens WHERE uid = uidArg;
40+ END IF;
41+
42+ -- We should only revoke the recovery key if the users private key has changed.
43+ IF keysHaveChangedArg = 1 THEN
44+ DELETE FROM recoveryKeys WHERE uid = uidArg;
45+ END IF;
46+
47+ UPDATE accounts
48+ SET
49+ verifyHash = verifyHashArg,
50+ verifyHashVersion2 = verifyHashVersion2Arg,
51+ wrapWrapKb = wrapWrapKbArg,
52+ wrapWrapKbVersion2 = wrapWrapKbVersion2Arg,
53+ authSalt = authSaltArg,
54+ clientSalt = clientSaltArg,
55+ verifierVersion = verifierVersionArg,
56+ profileChangedAt = verifierSetAtArg,
57+ -- The `keysChangedAt` column was added in a migration, so its default value
58+ -- is NULL meaning "we don't know". Now that we do know whether or not the keys
59+ -- are being changed, ensure it gets set to some concrete non-NULL value.
60+ keysChangedAt = IF(keysHaveChangedArg, verifierSetAtArg, COALESCE(keysChangedAt, verifierSetAt, createdAt)),
61+ verifierSetAt = verifierSetAtArg,
62+ lockedAt = NULL
63+ WHERE uid = uidArg;
64+
65+ COMMIT ;
66+ END;
67+
68+ UPDATE dbMetadata SET value = ' 160' WHERE name = ' schema-patch-level' ;
0 commit comments