feat: auth service logic for purging expired unverified accounts upon registration, new sql queries for this purpose
This commit is contained in:
@@ -56,6 +56,29 @@ SELECT users.* FROM users
|
||||
JOIN login_informations linfo ON linfo.user_id = users.id
|
||||
WHERE linfo.email = @email::text;
|
||||
|
||||
;-- name: CheckUserRegistrationAvailability :one
|
||||
-- SELECT
|
||||
-- COUNT(users.username = @username::text) > 0 AS username_busy,
|
||||
-- COUNT(linfo.email = @email::text) > 0 AS email_busy
|
||||
-- FROM users
|
||||
-- JOIN login_informations AS linfo on linfo.user_id = users.id
|
||||
-- WHERE
|
||||
-- (
|
||||
-- users.username = @username::text OR
|
||||
-- linfo.email = @email::text
|
||||
-- )
|
||||
-- AND
|
||||
-- (
|
||||
-- users.verified IS TRUE OR
|
||||
-- COUNT(
|
||||
-- SELECT confirmation_codes as codes
|
||||
-- JOIN users on users.id = codes.user_id
|
||||
-- WHERE codes.code_type = 0 AND
|
||||
-- codes.deleted IS FALSE AND
|
||||
-- codes.expires_at < CURRENT_TIMESTAMP
|
||||
-- ) = 0;
|
||||
-- )
|
||||
|
||||
;-- name: GetValidUserByLoginCredentials :one
|
||||
SELECT
|
||||
users.id,
|
||||
@@ -72,6 +95,46 @@ WHERE
|
||||
banned.user_id IS NULL AND -- Not banned
|
||||
linfo.password_hash = crypt(@password::text, linfo.password_hash); -- Password hash matches
|
||||
|
||||
;-- name: CheckUserRegistrationAvailability :one
|
||||
SELECT
|
||||
COUNT(CASE WHEN users.username = @username::text THEN 1 END) > 0 AS username_busy,
|
||||
COUNT(CASE WHEN linfo.email = @email::text THEN 1 END) > 0 AS email_busy
|
||||
FROM users
|
||||
JOIN login_informations AS linfo ON linfo.user_id = users.id
|
||||
WHERE
|
||||
(
|
||||
users.username = @username::text OR
|
||||
linfo.email = @email::text
|
||||
)
|
||||
AND
|
||||
(
|
||||
users.verified IS TRUE OR
|
||||
NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM confirmation_codes AS codes
|
||||
WHERE codes.user_id = users.id
|
||||
AND codes.code_type = 0
|
||||
AND codes.deleted IS FALSE
|
||||
AND codes.expires_at > CURRENT_TIMESTAMP
|
||||
)
|
||||
);
|
||||
|
||||
;-- name: DeleteUnverifiedAccountsHavingUsernameOrEmail :one
|
||||
WITH deleted_rows AS (
|
||||
DELETE FROM users
|
||||
WHERE
|
||||
(username = @username::text OR
|
||||
EXISTS (
|
||||
SELECT 1
|
||||
FROM login_informations AS linfo
|
||||
WHERE linfo.user_id = users.id
|
||||
AND linfo.email = @email::text
|
||||
))
|
||||
AND verified IS FALSE
|
||||
RETURNING *
|
||||
)
|
||||
SELECT COUNT(*) AS deleted_count FROM deleted_rows;
|
||||
|
||||
--: }}}
|
||||
|
||||
--: Banned User Object {{{
|
||||
@@ -146,6 +209,15 @@ WHERE
|
||||
used IS FALSE AND
|
||||
code_hash = crypt(@code::text, code_hash);
|
||||
|
||||
;-- name: GetValidConfirmationCodesByUsername :many
|
||||
SELECT * FROM confirmation_codes
|
||||
JOIN users on users.id = confirmation_codes.user_id
|
||||
WHERE
|
||||
users.username = @username::text AND
|
||||
code_type = @code_type::integer AND
|
||||
expires_at > CURRENT_TIMESTAMP AND
|
||||
used IS FALSE;
|
||||
|
||||
;-- name: UpdateConfirmationCode :exec
|
||||
UPDATE confirmation_codes
|
||||
SET
|
||||
|
||||
Reference in New Issue
Block a user