sync tables login_users and state_users

This commit is contained in:
Ulf Gebhardt 2022-01-20 13:49:28 +01:00
parent 163570d34f
commit 65a7b2bfd8
Signed by: ulfgebhardt
GPG Key ID: DA6B843E748679C9

View File

@ -0,0 +1,42 @@
/* MIGRATION TO CLEAN PRODUCTION DATA
*
* login_users and state_users are not in sync.
* Copy missing data from login_users to state_users.
*/
export async function upgrade(queryFn: (query: string, values?: any[]) => Promise<Array<any>>) {
// Copy data with intact private key
await queryFn(
`INSERT INTO state_users
(public_key, email, first_name, last_name, username, disabled)
(SELECT pubkey as public_key, email, first_name, last_name, username, disabled
FROM login_users
WHERE email NOT IN (SELECT email from state_users) AND privkey IS NOT NULL
)`,
)
// Copy data without intact private key, generate random pubkey
await queryFn(
`INSERT INTO state_users
(public_key, email, first_name, last_name, username, disabled)
(SELECT UNHEX(SHA1(RAND())) as public_key, email, first_name, last_name, username, disabled
FROM login_users
WHERE email NOT IN (SELECT email from state_users) AND privkey IS NULL
)`,
)
// Remove duplicate data from state_users with dead pubkeys
await queryFn(
`DELETE FROM state_users
WHERE id IN
(SELECT state_users.id FROM state_users
WHERE public_key NOT IN
(SELECT pubkey FROM login_users
WHERE pubkey IS NOT NULL)
AND email IN (SELECT email FROM state_users GROUP BY email HAVING COUNT(*) > 1
)
)`,
)
}
export async function downgrade(queryFn: (query: string, values?: any[]) => Promise<Array<any>>) {
return [] // cannot undelete things
}