datasquirel/package-shared/functions/api/social-login/facebookLogin.js
Benjamin Toby 586e3cfa85 Updates
2024-12-09 12:45:39 +01:00

129 lines
4.8 KiB
JavaScript
Executable File

// @ts-check
/**
* ==============================================================================
* Imports
* ==============================================================================
*/
const DB_HANDLER = require("../../../utils/backend/global-db/DB_HANDLER");
const handleNodemailer = require("../../backend/handleNodemailer");
const serverError = require("../../backend/serverError");
const hashPassword = require("../../dsql/hashPassword");
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
/**
* ==============================================================================
* Main Function
* ==============================================================================
* @param {object} params - parameters object
* @param {any} params.body
* @param {import("../../../types").UserType} params.usertype
*/
module.exports = async function facebookLogin({ usertype, body }) {
try {
////////////////////////////////////////////////
////////////////////////////////////////////////
////////////////////////////////////////////////
const foundUser = await DB_HANDLER(
`SELECT * FROM users WHERE email='${body.facebookUserEmail}' AND social_login='1'`
);
if (foundUser && foundUser[0]) {
return foundUser[0];
}
////////////////////////////////////////////////
////////////////////////////////////////////////
////////////////////////////////////////////////
let socialHashedPassword = hashPassword({
password: body.facebookUserId,
});
let newUser = await DB_HANDLER(`INSERT INTO ${usertype} (
first_name,
last_name,
social_platform,
social_name,
email,
image,
image_thumbnail,
password,
verification_status,
social_login,
social_id,
terms_agreement,
date_created,
date_code
) VALUES (
'${body.facebookUserFirstName}',
'${body.facebookUserLastName}',
'facebook',
'facebook_${
body.facebookUserEmail
? body.facebookUserEmail.replace(/@.*/, "")
: body.facebookUserFirstName.toLowerCase()
}',
'${body.facebookUserEmail}',
'${body.facebookUserImage}',
'${body.facebookUserImage}',
'${socialHashedPassword}',
'1',
'1',
'${body.facebookUserId}',
'1',
'${Date()}',
'${Date.now()}'
)`);
const newFoundUser = await DB_HANDLER(
`SELECT * FROM ${usertype} WHERE id='${newUser.insertId}'`
);
////////////////////////////////////////////////
////////////////////////////////////////////////
////////////////////////////////////////////////
/**
* Send email notifications to admin
*
* @description Send verification email to newly created agent
*/
// handleNodemailer({
// to: "",
// subject: "New Registered Buyer",
// text: "We have a new registered Buyer from facebook",
// html: `
// <h2>${newFoundUser[0].first_name} ${newFoundUser[0].last_name} just registered from facebook.</h2>
// <p>We have a new buyer registration</p>
// <div>Name: <b>${newFoundUser[0].first_name} ${newFoundUser[0].last_name}</b></div>
// <div>Email: <b>${newFoundUser[0].email}</b></div>
// <div>Site: <b>${process.env.DSQL_DB_HOST}</b></div>
// `,
// }).catch((error) => {
// console.log(
// "error in mail notification for new Facebook user =>",
// error.message
// );
// });
} catch (/** @type {any} */ error) {
serverError({
component: "functions/backend/facebookLogin",
message: error.message,
});
}
return {
isFacebookAuthValid: false,
newFoundUser: null,
};
};