From 76c047e26b4a8b91d3c07d1146c30b5f160205f0 Mon Sep 17 00:00:00 2001 From: Varun Date: Fri, 10 Jan 2025 12:53:37 +0530 Subject: [PATCH] changes in login --- src/index.js | 209 +++++++++++++++++++++++++++++---------------------- 1 file changed, 118 insertions(+), 91 deletions(-) diff --git a/src/index.js b/src/index.js index 19dfed5c..89978d64 100644 --- a/src/index.js +++ b/src/index.js @@ -154,7 +154,6 @@ fastify.register(require('point-of-view'), { }); // * This is for login user as a simply user * - fastify.post("/api/login", { schema: { description: "This is for Login User", @@ -166,118 +165,146 @@ fastify.post("/api/login", { properties: { phone: { type: "string" }, password: { type: "string" }, - fcmId: { type: "string" }, // Add this line - deviceId: { type: "string" } // Add this line + fcmId: { type: "string" }, + deviceId: { type: "string" }, }, }, }, async handler(req, reply) { - // Pass fcmId and deviceId to the loginUser function const { phone, password, fcmId, deviceId } = req.body; - const loginObject = await userController.loginUser(req, fcmId, deviceId); - - if (loginObject.same) { - const phoneVerified = loginObject.user.phoneVerified; - const oneTimePasswordSetFlag = loginObject.user.oneTimePasswordSetFlag; - console.log( - "oneTimePasswordSetFlag is ......", - oneTimePasswordSetFlag, - typeof oneTimePasswordSetFlag, - typeof phoneVerified - ); - if (!phoneVerified) { - reply.send({ - simplydata: { - error: false, - phoneVerified: false, - phone: loginObject.user.phone, - oneTimePasswordSetFlag: oneTimePasswordSetFlag, - message: "Please Verify your phone number", - }, - }); - } else if (oneTimePasswordSetFlag) { - reply.send({ - simplydata: { - error: false, - phoneVerified: phoneVerified, - phone: loginObject.user.phone, - oneTimePasswordSetFlag: true, - message: "Password must be reset", - }, - }); - } else { - const token = fastify.jwt.sign( - { - username: loginObject.user.username, - userId: loginObject.user._id, - roles: loginObject.user.profile.role, - }, - { expiresIn: "30d" } - ); - const arr = loginObject.user.profile.role; - const arrayToString = JSON.stringify(Object.assign({}, arr)); // convert array to string - const stringToJsonObject = JSON.parse(arrayToString); // convert string to json object - const c_id = loginObject.user.customerId; - const profilePicture = await ProfilePicture.findOne({ customerId: c_id }); - - if (!profilePicture) { - reply.send({ + + // First check for user login + const user = await User.findOne({ phone }); + if (user) { + const loginObject = await userController.loginUser(req, fcmId, deviceId); + if (loginObject.same) { + const phoneVerified = loginObject.user.phoneVerified; + const oneTimePasswordSetFlag = loginObject.user.oneTimePasswordSetFlag; + + if (!phoneVerified) { + return reply.send({ simplydata: { error: false, - apiversion: fastify.config.APIVERSION, - access_token: token, - buildingName: loginObject.user.buildingName, - email: loginObject.user.emails, + phoneVerified: false, phone: loginObject.user.phone, - customerId: loginObject.user.customerId, - username: loginObject.user.username, - address1: loginObject.user.profile.address1, - address2: loginObject.user.profile.address2, - phoneVerified: loginObject.user.phoneVerified, - oneTimePasswordSetFlag: loginObject.user.oneTimePasswordSetFlag, - latitude: loginObject.user.latitude, - longitude: loginObject.user.longitude, - type: loginObject.user.profile.role, - typeasobj: stringToJsonObject, + oneTimePasswordSetFlag: oneTimePasswordSetFlag, + message: "Please Verify your phone number", }, }); - } else { - reply.send({ + } else if (oneTimePasswordSetFlag) { + return reply.send({ simplydata: { error: false, - apiversion: fastify.config.APIVERSION, - access_token: token, - picture: profilePicture.picture, - email: loginObject.user.emails, + phoneVerified: phoneVerified, phone: loginObject.user.phone, - buildingName: loginObject.user.buildingName, - customerId: loginObject.user.customerId, - username: loginObject.user.username, - address1: loginObject.user.profile.address1, - address2: loginObject.user.profile.address2, - phoneVerified: loginObject.user.phoneVerified, - oneTimePasswordSetFlag: loginObject.user.oneTimePasswordSetFlag, - latitude: loginObject.user.latitude, - longitude: loginObject.user.longitude, - type: loginObject.user.profile.role, - typeasobj: stringToJsonObject, + oneTimePasswordSetFlag: true, + message: "Password must be reset", }, }); + } else { + const token = fastify.jwt.sign( + { + username: loginObject.user.username, + userId: loginObject.user._id, + roles: loginObject.user.profile.role, + }, + { expiresIn: "30d" } + ); + + const arr = loginObject.user.profile.role; + const arrayToString = JSON.stringify(Object.assign({}, arr)); // convert array to string + const stringToJsonObject = JSON.parse(arrayToString); // convert string to json object + const c_id = loginObject.user.customerId; + const profilePicture = await ProfilePicture.findOne({ customerId: c_id }); + + if (!profilePicture) { + return reply.send({ + simplydata: { + error: false, + apiversion: fastify.config.APIVERSION, + access_token: token, + buildingName: loginObject.user.buildingName, + email: loginObject.user.emails, + phone: loginObject.user.phone, + customerId: loginObject.user.customerId, + username: loginObject.user.username, + address1: loginObject.user.profile.address1, + address2: loginObject.user.profile.address2, + phoneVerified: loginObject.user.phoneVerified, + oneTimePasswordSetFlag: loginObject.user.oneTimePasswordSetFlag, + latitude: loginObject.user.latitude, + longitude: loginObject.user.longitude, + type: loginObject.user.profile.role, + typeasobj: stringToJsonObject, + }, + }); + } else { + return reply.send({ + simplydata: { + error: false, + apiversion: fastify.config.APIVERSION, + access_token: token, + picture: profilePicture.picture, + email: loginObject.user.emails, + phone: loginObject.user.phone, + buildingName: loginObject.user.buildingName, + customerId: loginObject.user.customerId, + username: loginObject.user.username, + address1: loginObject.user.profile.address1, + address2: loginObject.user.profile.address2, + phoneVerified: loginObject.user.phoneVerified, + oneTimePasswordSetFlag: loginObject.user.oneTimePasswordSetFlag, + latitude: loginObject.user.latitude, + longitude: loginObject.user.longitude, + type: loginObject.user.profile.role, + typeasobj: stringToJsonObject, + }, + }); + } } } - } else { - reply.send({ - simplydata: { - error: true, - code: 400, - message: "Invalid UserId or Password supplied", - }, - }); } + + // Check for staff login + const allUsers = await User.find({ "staff.staff": { $elemMatch: { phone } } }); + for (const currentUser of allUsers) { + const staffMember = currentUser.staff.staff.find(staff => staff.phone === phone && staff.status === "active"); + if (staffMember && staffMember.password === password) { + const token = fastify.jwt.sign( + { + name: staffMember.name, + phone: staffMember.phone, + customerId: currentUser.customerId, + role: 'staff', + }, + { expiresIn: "30d" } + ); + return reply.send({ + simplydata: { + error: false, + access_token: token, + name: staffMember.name, + phone: staffMember.phone, + customerId: currentUser.customerId, + message: "Staff login successful", + }, + }); + } + } + + // If no user or staff found + return reply.send({ + simplydata: { + error: true, + code: 400, + message: "Invalid UserId or Password supplied", + }, + }); }, }); + fastify.post("/api/installotplogin", { schema: { description: "This is for Login Otp Installation",