From 6d308bf95d6db2b53cc4054b9cf65fe139b2e88a Mon Sep 17 00:00:00 2001 From: devthejo Date: Wed, 2 Jul 2025 12:50:23 +0200 Subject: [PATCH] chore: debug --- .../auth/login/confim-login-request.patch.js | 90 +++++++++++++++++++ 1 file changed, 90 insertions(+) diff --git a/services/api/src/api/v1/operations/auth/login/confim-login-request.patch.js b/services/api/src/api/v1/operations/auth/login/confim-login-request.patch.js index bdcf5a7..800d709 100644 --- a/services/api/src/api/v1/operations/auth/login/confim-login-request.patch.js +++ b/services/api/src/api/v1/operations/auth/login/confim-login-request.patch.js @@ -13,8 +13,15 @@ module.exports = async function ({ services: { signJwt } }) { } async function doAuthLoginConfimLoginRequest(req) { + const logger = ctx.require("logger") + const { loginRequestId, deviceUuid } = req.body + logger.debug( + { loginRequestId, deviceUuid }, + "Starting login confirmation request" + ) + const [userLoginRequest] = await sql` SELECT "user_id" as "userId", @@ -27,22 +34,46 @@ module.exports = async function ({ services: { signJwt } }) { WHERE "id" = ${loginRequestId} ` + if (!userLoginRequest) { + logger.warn({ loginRequestId }, "Login request not found") throw httpError(404) } + + logger.info( + { loginRequestId, type: userLoginRequest.type }, + "Login request found" + ) const { type, updatedAt } = userLoginRequest const expire = new Date() expire.setTime(expire.getTime() - 2 * 3600000) // 2 hours + logger.debug( + { loginRequestId, updatedAt, expireThreshold: expire }, + "Checking login request expiration" + ) + if (updatedAt < expire) { + logger.warn( + { loginRequestId, updatedAt, expireThreshold: expire }, + "Login request expired, cleaning up" + ) deleteLoginRequest(loginRequestId) // cleanup in background throw httpError(498, "login request expired") } + logger.info({ loginRequestId }, "Login request is valid and not expired") + let userId + logger.info({ loginRequestId, type }, "Resolving user ID by login type") + switch (type) { case "phone_number": { + logger.debug( + { loginRequestId, phoneNumberId: userLoginRequest.phoneNumberId }, + "Looking up user by phone number" + ) const [phoneNumber] = await sql` SELECT "user_id" as "userId" @@ -51,10 +82,29 @@ module.exports = async function ({ services: { signJwt } }) { WHERE "id" = ${userLoginRequest.phoneNumberId} ` + if (!phoneNumber) { + logger.error( + { loginRequestId, phoneNumberId: userLoginRequest.phoneNumberId }, + "Phone number not found" + ) + throw httpError(404, "Phone number not found") + } userId = phoneNumber.userId + logger.debug( + { + loginRequestId, + userId, + phoneNumberId: userLoginRequest.phoneNumberId, + }, + "User resolved via phone number" + ) break } case "email": { + logger.debug( + { loginRequestId, emailId: userLoginRequest.emailId }, + "Looking up user by email" + ) const [email] = await sql` SELECT "user_id" as "userId" @@ -63,18 +113,35 @@ module.exports = async function ({ services: { signJwt } }) { WHERE "id" = ${userLoginRequest.emailId} ` + if (!email) { + logger.error( + { loginRequestId, emailId: userLoginRequest.emailId }, + "Email not found" + ) + throw httpError(404, "Email not found") + } userId = email.userId + logger.debug( + { loginRequestId, userId, emailId: userLoginRequest.emailId }, + "User resolved via email" + ) break } default: { + logger.error({ loginRequestId, type }, "Invalid login request type") throw httpError(400) } } + logger.info({ loginRequestId }, "Cleaning up login request") deleteLoginRequest(loginRequestId) // cleanup in background let deviceId = null if (deviceUuid) { + logger.debug( + { loginRequestId, userId, deviceUuid }, + "Looking up device for user" + ) const [matchDevice] = await sql` SELECT "id" @@ -87,10 +154,23 @@ module.exports = async function ({ services: { signJwt } }) { if (matchDevice) { deviceId = matchDevice.id + logger.debug( + { loginRequestId, userId, deviceUuid, deviceId }, + "Device matched for user" + ) + } else { + logger.debug( + { loginRequestId, userId, deviceUuid }, + "No matching device found for user" + ) } + } else { + logger.debug({ loginRequestId, userId }, "No device UUID provided") } + logger.debug({ loginRequestId, userId, deviceId }, "Generating auth token") const plainAuthToken = nanoid() + await sql` INSERT INTO "auth_token" ("auth_token", "user_id", "device_id") VALUES (${plainAuthToken}, ${userId}, ${deviceId}) @@ -99,8 +179,18 @@ module.exports = async function ({ services: { signJwt } }) { "auth_token" = ${plainAuthToken}, "user_id" = ${userId} ` + logger.debug( + { loginRequestId, userId, deviceId }, + "Auth token stored in database" + ) + const authTokenJwt = await signJwt({ authToken: plainAuthToken }) + logger.debug( + { loginRequestId, userId, deviceId }, + "Login confirmation completed successfully" + ) + return { authTokenJwt } }