|
|
|
@ -1,66 +1,98 @@
|
|
|
|
|
const boom = require("boom");
|
|
|
|
|
const jwt = require('jsonwebtoken')
|
|
|
|
|
const bcrypt = require('bcrypt')
|
|
|
|
|
const bcrypt = require('bcrypt');
|
|
|
|
|
const jwt = require('jsonwebtoken');
|
|
|
|
|
|
|
|
|
|
const fastify = require("fastify");
|
|
|
|
|
const { Store } = require("../models/store");
|
|
|
|
|
const { Install, ProfilePictureInstall } = require("../models/store");
|
|
|
|
|
|
|
|
|
|
exports.storeSignUp = async (request, reply) => {
|
|
|
|
|
const supplierController = require("../controllers/supplierController")
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
const { phone1,name,phone2, city,team,manager,picture,email, password } = request.body
|
|
|
|
|
|
|
|
|
|
// Check if the email address is valid
|
|
|
|
|
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/
|
|
|
|
|
if (!emailRegex.test(email)) {
|
|
|
|
|
return reply.status(400).send({ message: 'Invalid email address' })
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check if an admin with the same email address already exists
|
|
|
|
|
const existingstore = await Store.findOne({ phone1 })
|
|
|
|
|
|
|
|
|
|
if (existingstore) {
|
|
|
|
|
return reply.status(400).send({ message: 'Phone is already registered' })
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Hash the password using bcrypt
|
|
|
|
|
const hashedPassword = await bcrypt.hash(password, 10)
|
|
|
|
|
|
|
|
|
|
// Create a new admin object with the hashed password
|
|
|
|
|
const store = new Store({ phone1,name,phone2, city,team,manager,picture,email, password: hashedPassword })
|
|
|
|
|
|
|
|
|
|
// Save the new admin to the database
|
|
|
|
|
await store.save()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
reply.send({message : "Store Account Created Sucessfully"})
|
|
|
|
|
} catch (err) {
|
|
|
|
|
reply.status(500).send({ message: err.message })
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
exports.installSignUp = async (request, reply) => {
|
|
|
|
|
try {
|
|
|
|
|
const {
|
|
|
|
|
name,
|
|
|
|
|
phone,
|
|
|
|
|
address,
|
|
|
|
|
installationId,
|
|
|
|
|
emails,
|
|
|
|
|
password,
|
|
|
|
|
profile,
|
|
|
|
|
team,
|
|
|
|
|
manager,
|
|
|
|
|
longitude,
|
|
|
|
|
latitude,
|
|
|
|
|
fcmId,
|
|
|
|
|
createdBy,
|
|
|
|
|
updatedBy,
|
|
|
|
|
} = request.body;
|
|
|
|
|
|
|
|
|
|
// Check if the email address is valid
|
|
|
|
|
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
|
|
|
if (emails.some((emailObj) => !emailRegex.test(emailObj.email))) {
|
|
|
|
|
return reply.status(400).send({ message: 'Invalid email address' });
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check if a user with the same phone number already exists
|
|
|
|
|
const existingInstall = await Install.findOne({ phone });
|
|
|
|
|
if (existingInstall) {
|
|
|
|
|
return reply.status(400).send({ message: 'Phone is already registered' });
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Hash the password using bcrypt
|
|
|
|
|
const hashedPassword = await bcrypt.hash(password, 10);
|
|
|
|
|
|
|
|
|
|
// Create a new install object with the hashed password and other details
|
|
|
|
|
const install = new Install({
|
|
|
|
|
name,
|
|
|
|
|
phone,
|
|
|
|
|
address,
|
|
|
|
|
installationId,
|
|
|
|
|
emails,
|
|
|
|
|
services: { password: { bcrypt: hashedPassword } },
|
|
|
|
|
profile,
|
|
|
|
|
team,
|
|
|
|
|
manager,
|
|
|
|
|
longitude,
|
|
|
|
|
latitude,
|
|
|
|
|
fcmId,
|
|
|
|
|
createdBy,
|
|
|
|
|
updatedBy,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// Save the new install to the database
|
|
|
|
|
await install.save();
|
|
|
|
|
|
|
|
|
|
reply.send({ message: 'Install Account Created Successfully' });
|
|
|
|
|
} catch (err) {
|
|
|
|
|
reply.status(500).send({ message: err.message });
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
exports.storeLogin = async (request, reply) => {
|
|
|
|
|
exports.installLogin = async (request, reply) => {
|
|
|
|
|
try {
|
|
|
|
|
const { phone1, password } = request.body
|
|
|
|
|
|
|
|
|
|
// Check if an admin with the email address exists
|
|
|
|
|
const store = await Store.findOne({ phone1 })
|
|
|
|
|
const install = await Install.findOne({ phone1 })
|
|
|
|
|
|
|
|
|
|
if (!store) {
|
|
|
|
|
if (!install) {
|
|
|
|
|
return reply.status(401).send({ message: 'Invalid Phone1 or password' })
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Compare the password entered by the user with the hashed password stored in the database
|
|
|
|
|
const isPasswordValid = await bcrypt.compare(password, store.password)
|
|
|
|
|
const isPasswordValid = await bcrypt.compare(password, install.password)
|
|
|
|
|
|
|
|
|
|
if (!isPasswordValid) {
|
|
|
|
|
return reply.status(401).send({ message: 'Invalid phone or password' })
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Generate a JWT token for the authenticated admin
|
|
|
|
|
const token = jwt.sign({ phone1: store.phone1 }, 'secret')
|
|
|
|
|
const token = jwt.sign({ phone1: install.phone1 }, 'secret')
|
|
|
|
|
|
|
|
|
|
// Return the token to the client
|
|
|
|
|
return { token }
|
|
|
|
@ -69,3 +101,154 @@ exports.storeSignUp = async (request, reply) => {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
exports.installationVerifyPhone = async (req, reply) => {
|
|
|
|
|
console.log("-------------------------------------------------");
|
|
|
|
|
try {
|
|
|
|
|
phone = req.body.phone;
|
|
|
|
|
phoneVerificationCode = req.body.phoneVerificationCode;
|
|
|
|
|
|
|
|
|
|
// check if user exists in the system. If user exists , display message that
|
|
|
|
|
// username is not available
|
|
|
|
|
console.log(
|
|
|
|
|
"this is the phone and verification code",
|
|
|
|
|
phone,
|
|
|
|
|
phoneVerificationCode
|
|
|
|
|
);
|
|
|
|
|
deliveryBoyExists = await Install.findOne({
|
|
|
|
|
phone: phone,
|
|
|
|
|
//phoneVerified: false,
|
|
|
|
|
phoneVerificationCode: phoneVerificationCode,
|
|
|
|
|
});
|
|
|
|
|
console.log(deliveryBoyExists);
|
|
|
|
|
if (deliveryBoyExists) {
|
|
|
|
|
// update the phoneVerified flag to true.
|
|
|
|
|
const filter = {
|
|
|
|
|
phone: phone,
|
|
|
|
|
phoneVerificationCode: phoneVerificationCode,
|
|
|
|
|
};
|
|
|
|
|
const update = { phoneVerified: true };
|
|
|
|
|
const doc = await Install.findOneAndUpdate(filter, update);
|
|
|
|
|
updatedDeliveryBoy = await Install.findOne({ phone: phone });
|
|
|
|
|
|
|
|
|
|
if (updatedDeliveryBoy.phoneVerified) {
|
|
|
|
|
loginObject = await supplierController.loginInstallation(req);
|
|
|
|
|
console.log("loginObject...", loginObject);
|
|
|
|
|
if (loginObject.same) {
|
|
|
|
|
const phoneVerified = loginObject.delivery.phoneVerified;
|
|
|
|
|
const oneTimePasswordSetFlag =
|
|
|
|
|
loginObject.delivery.oneTimePasswordSetFlag;
|
|
|
|
|
console.log(
|
|
|
|
|
"oneTimePasswordSetFlag is ......",
|
|
|
|
|
oneTimePasswordSetFlag,
|
|
|
|
|
typeof oneTimePasswordSetFlag,
|
|
|
|
|
typeof phoneVerified
|
|
|
|
|
);
|
|
|
|
|
if (!phoneVerified) {
|
|
|
|
|
reply.send({
|
|
|
|
|
simplydata: {
|
|
|
|
|
error: false,
|
|
|
|
|
phoneVerified: false,
|
|
|
|
|
|
|
|
|
|
phone: loginObject.delivery.phone,
|
|
|
|
|
oneTimePasswordSetFlag: oneTimePasswordSetFlag,
|
|
|
|
|
message: "Please Verify your phone number",
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
} else if (oneTimePasswordSetFlag) {
|
|
|
|
|
reply.send({
|
|
|
|
|
simplydata: {
|
|
|
|
|
error: false,
|
|
|
|
|
phoneVerified: phoneVerified,
|
|
|
|
|
phone: loginObject.delivery.phone,
|
|
|
|
|
oneTimePasswordSetFlag: true,
|
|
|
|
|
message: "Password must be reset",
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
} else {
|
|
|
|
|
const token = fastify.jwt.sign(
|
|
|
|
|
{
|
|
|
|
|
name: loginObject.delivery.name,
|
|
|
|
|
},
|
|
|
|
|
//expiresIn: expressed in seconds or a string describing a time span zeit/ms. Eg: 60, "2 days", "10h", "7d".
|
|
|
|
|
//A numeric value is interpreted as a seconds count. If you use a string be sure you provide the time units (days, hours, etc),
|
|
|
|
|
//otherwise milliseconds unit is used by default ("120" is equal to "120ms").
|
|
|
|
|
{ expiresIn: "30d" }
|
|
|
|
|
);
|
|
|
|
|
console.log(token, "..token");
|
|
|
|
|
|
|
|
|
|
var d_id = loginObject.delivery._id;
|
|
|
|
|
|
|
|
|
|
console.log(d_id, "deliveryId");
|
|
|
|
|
var profilePicture = await ProfilePictureInstall.findOne({
|
|
|
|
|
installationId: d_id,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// request.session.set('supplierId', loginObject.supplier._id)
|
|
|
|
|
|
|
|
|
|
if (!profilePicture) {
|
|
|
|
|
reply.send({
|
|
|
|
|
simplydata: {
|
|
|
|
|
error: false,
|
|
|
|
|
apiversion: fastify.config.APIVERSION,
|
|
|
|
|
access_token: token,
|
|
|
|
|
|
|
|
|
|
phone: loginObject.delivery.phone,
|
|
|
|
|
installationId: loginObject.delivery.installationId,
|
|
|
|
|
name: loginObject.delivery.name,
|
|
|
|
|
address: loginObject.delivery.address,
|
|
|
|
|
phoneVerified: loginObject.delivery.phoneVerified,
|
|
|
|
|
oneTimePasswordSetFlag:
|
|
|
|
|
loginObject.delivery.oneTimePasswordSetFlag,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
if (profilePicture) {
|
|
|
|
|
reply.send({
|
|
|
|
|
simplydata: {
|
|
|
|
|
error: false,
|
|
|
|
|
apiversion: fastify.config.APIVERSION,
|
|
|
|
|
access_token: token,
|
|
|
|
|
picture: profilePicture.picture,
|
|
|
|
|
phone: loginObject.delivery.phone,
|
|
|
|
|
installationId: loginObject.delivery.installationId,
|
|
|
|
|
|
|
|
|
|
name: loginObject.delivery.name,
|
|
|
|
|
address: loginObject.delivery.address,
|
|
|
|
|
phoneVerified: loginObject.delivery.phoneVerified,
|
|
|
|
|
oneTimePasswordSetFlag:
|
|
|
|
|
loginObject.delivery.oneTimePasswordSetFlag,
|
|
|
|
|
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
error = {
|
|
|
|
|
simplydata: {
|
|
|
|
|
error: true,
|
|
|
|
|
code: 400,
|
|
|
|
|
message: "Invalid Details",
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
reply.send(error);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}else {
|
|
|
|
|
error = {
|
|
|
|
|
armintatankdata: {
|
|
|
|
|
error: true,
|
|
|
|
|
code: 10005,
|
|
|
|
|
message: "10005 - Verification code entered cannot be validated.",
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
req.body.regError = error;
|
|
|
|
|
reply.send(error);
|
|
|
|
|
}
|
|
|
|
|
} catch (err) {
|
|
|
|
|
throw boom.boomify(err);
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|