feature/IO-3187-Admin-Enhancements - Minor cleanup
This commit is contained in:
@@ -1,15 +1,10 @@
|
|||||||
const path = require("path");
|
|
||||||
require("dotenv").config({
|
|
||||||
path: path.resolve(process.cwd(), `.env.${process.env.NODE_ENV || "development"}`)
|
|
||||||
});
|
|
||||||
|
|
||||||
const admin = require("firebase-admin");
|
|
||||||
const logger = require("../utils/logger");
|
|
||||||
const { sendWelcomeEmail } = require("../email/sendemail");
|
|
||||||
const client = require("../graphql-client/graphql-client").client;
|
|
||||||
const serviceAccount = require(process.env.FIREBASE_ADMINSDK_JSON);
|
const serviceAccount = require(process.env.FIREBASE_ADMINSDK_JSON);
|
||||||
|
const admin = require("firebase-admin");
|
||||||
const moment = require("moment-timezone");
|
const moment = require("moment-timezone");
|
||||||
//const generateEmailTemplate = require("../email/generateTemplate");
|
const logger = require("../utils/logger");
|
||||||
|
const client = require("../graphql-client/graphql-client").client;
|
||||||
|
const { sendWelcomeEmail } = require("../email/sendemail");
|
||||||
|
const { GET_USER_BY_EMAIL } = require("../graphql-client/queries");
|
||||||
|
|
||||||
admin.initializeApp({
|
admin.initializeApp({
|
||||||
credential: admin.credential.cert(serviceAccount),
|
credential: admin.credential.cert(serviceAccount),
|
||||||
@@ -202,112 +197,89 @@ const unsubscribe = async (req, res) => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const sendwelcome = (req, res) => {
|
const getWelcomeEmail = async (req, res) => {
|
||||||
const { authid, email } = req.body;
|
const { authid, email } = req.body;
|
||||||
|
|
||||||
// Fetch user from Firebase
|
try {
|
||||||
admin
|
// Fetch user from Firebase
|
||||||
.auth()
|
const userRecord = await admin.auth().getUser(authid);
|
||||||
.getUser(authid)
|
if (!userRecord) {
|
||||||
.then((userRecord) => {
|
throw { status: 404, message: "User not found in Firebase." };
|
||||||
if (!userRecord) {
|
}
|
||||||
return Promise.reject({ status: 404, message: "User not found in Firebase." });
|
|
||||||
}
|
|
||||||
|
|
||||||
// Fetch user data from the database using GraphQL
|
// Fetch user data from the database using GraphQL
|
||||||
return client.request(
|
const dbUserResult = await client.request(GET_USER_BY_EMAIL, { email: email.toLowerCase() });
|
||||||
`
|
|
||||||
query GET_USER_BY_EMAIL($email: String!) {
|
|
||||||
users(where: { email: { _eq: $email } }) {
|
|
||||||
email
|
|
||||||
validemail
|
|
||||||
associations {
|
|
||||||
id
|
|
||||||
shopid
|
|
||||||
bodyshop {
|
|
||||||
id
|
|
||||||
convenient_company
|
|
||||||
features
|
|
||||||
timezone
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}`,
|
|
||||||
{ email: email.toLowerCase() }
|
|
||||||
);
|
|
||||||
})
|
|
||||||
.then((dbUserResult) => {
|
|
||||||
const dbUser = dbUserResult?.users?.[0];
|
|
||||||
if (!dbUser) {
|
|
||||||
return Promise.reject({ status: 404, message: "User not found in database." });
|
|
||||||
}
|
|
||||||
// Validate email before proceeding
|
|
||||||
if (!dbUser.validemail) {
|
|
||||||
logger.log("admin-send-welcome-email-skip", "debug", req.user.email, null, {
|
|
||||||
message: "User email is not valid, skipping email.",
|
|
||||||
email
|
|
||||||
});
|
|
||||||
return res.status(200).json({ message: "User email is not valid, email not sent." });
|
|
||||||
}
|
|
||||||
|
|
||||||
// Generate password reset link
|
const dbUser = dbUserResult?.users?.[0];
|
||||||
return admin
|
if (!dbUser) {
|
||||||
.auth()
|
throw { status: 404, message: "User not found in database." };
|
||||||
.generatePasswordResetLink(dbUser.email)
|
}
|
||||||
.then((resetLink) => ({ dbUser, resetLink }));
|
|
||||||
})
|
// Validate email before proceeding
|
||||||
.then(({ dbUser, resetLink }) => {
|
if (!dbUser.validemail) {
|
||||||
// Send welcome email (replace with your actual email-sending service)
|
logger.log("admin-send-welcome-email-skip", "debug", req.user.email, null, {
|
||||||
return sendWelcomeEmail({
|
message: "User email is not valid, skipping email.",
|
||||||
to: dbUser.email,
|
email
|
||||||
resetLink,
|
|
||||||
dateLine: moment().tz(dbUser.associations?.[0]?.bodyshop?.timezone).format("MM/DD/YYYY @ hh:mm a"),
|
|
||||||
features: dbUser.associations?.[0]?.bodyshop?.features
|
|
||||||
});
|
});
|
||||||
})
|
return res.status(200).json({ message: "User email is not valid, email not sent." });
|
||||||
.then(() => {
|
}
|
||||||
// Log success and return response
|
|
||||||
logger.log("admin-send-welcome-email", "debug", req.user.email, null, {
|
|
||||||
request: req.body,
|
|
||||||
ioadmin: true,
|
|
||||||
emailSentTo: email
|
|
||||||
});
|
|
||||||
res.status(200).json({ message: "Welcome email sent successfully." });
|
|
||||||
})
|
|
||||||
.catch((error) => {
|
|
||||||
logger.log("admin-send-welcome-email-error", "ERROR", req.user.email, null, { error });
|
|
||||||
|
|
||||||
if (!res.headersSent) {
|
// Generate password reset link
|
||||||
res.status(error.status || 500).json({
|
const resetLink = await admin.auth().generatePasswordResetLink(dbUser.email);
|
||||||
message: error.message || "Error sending welcome email.",
|
|
||||||
error
|
// Send welcome email
|
||||||
});
|
await sendWelcomeEmail({
|
||||||
}
|
to: dbUser.email,
|
||||||
|
resetLink,
|
||||||
|
dateLine: moment().tz(dbUser.associations?.[0]?.bodyshop?.timezone).format("MM/DD/YYYY @ hh:mm a"),
|
||||||
|
features: dbUser.associations?.[0]?.bodyshop?.features
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Log success and return response
|
||||||
|
logger.log("admin-send-welcome-email", "debug", req.user.email, null, {
|
||||||
|
request: req.body,
|
||||||
|
ioadmin: true,
|
||||||
|
emailSentTo: email
|
||||||
|
});
|
||||||
|
res.status(200).json({ message: "Welcome email sent successfully." });
|
||||||
|
} catch (error) {
|
||||||
|
logger.log("admin-send-welcome-email-error", "ERROR", req.user.email, null, { error });
|
||||||
|
|
||||||
|
if (!res.headersSent) {
|
||||||
|
res.status(error.status || 500).json({
|
||||||
|
message: error.message || "Error sending welcome email.",
|
||||||
|
error
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const resetlink = (req, res) => {
|
const getResetLink = async (req, res) => {
|
||||||
const { authid, email } = req.body;
|
const { authid, email } = req.body;
|
||||||
logger.log("admin-reset-link", "debug", req.user.email, null, { authid: authid, email: email });
|
logger.log("admin-reset-link", "debug", req.user.email, null, { authid, email });
|
||||||
admin
|
|
||||||
.auth()
|
try {
|
||||||
.getUser(authid)
|
// Fetch user from Firebase
|
||||||
.then((userRecord) => {
|
const userRecord = await admin.auth().getUser(authid);
|
||||||
if (!userRecord) {
|
if (!userRecord) {
|
||||||
return Promise.reject({ status: 404, message: "User not found in Firebase." });
|
throw { status: 404, message: "User not found in Firebase." };
|
||||||
}
|
}
|
||||||
return admin
|
|
||||||
.auth()
|
// Generate password reset link
|
||||||
.generatePasswordResetLink(email)
|
const resetLink = await admin.auth().generatePasswordResetLink(email);
|
||||||
.then((resetLink) => ({ userRecord, resetLink }));
|
|
||||||
})
|
// Log success and return response
|
||||||
.then(({ resetLink }) => {
|
logger.log("admin-reset-link-success", "debug", req.user.email, null, {
|
||||||
logger.log("admin-reset-link-success", "debug", req.user.email, null, {
|
request: req.body,
|
||||||
request: req.body,
|
ioadmin: true
|
||||||
ioadmin: true,
|
|
||||||
});
|
|
||||||
res.status(200).json({ message: "Reset link generated successfully.", resetLink });
|
|
||||||
});
|
});
|
||||||
|
res.status(200).json({ message: "Reset link generated successfully.", resetLink });
|
||||||
|
} catch (error) {
|
||||||
|
res.status(error.status || 500).json({
|
||||||
|
message: error.message || "Error generating reset link.",
|
||||||
|
error
|
||||||
|
});
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
@@ -318,24 +290,6 @@ module.exports = {
|
|||||||
sendNotification,
|
sendNotification,
|
||||||
subscribe,
|
subscribe,
|
||||||
unsubscribe,
|
unsubscribe,
|
||||||
sendwelcome,
|
getWelcomeEmail,
|
||||||
resetlink
|
getResetLink
|
||||||
};
|
};
|
||||||
|
|
||||||
//Admin claims code.
|
|
||||||
// const uid = "JEqqYlsadwPEXIiyRBR55fflfko1";
|
|
||||||
|
|
||||||
// admin
|
|
||||||
// .auth()
|
|
||||||
// .getUser(uid)
|
|
||||||
// .then((user) => {
|
|
||||||
// console.log(user);
|
|
||||||
// admin.auth().setCustomUserClaims(uid, {
|
|
||||||
// ioadmin: true,
|
|
||||||
// "https://hasura.io/jwt/claims": {
|
|
||||||
// "x-hasura-default-role": "debug",
|
|
||||||
// "x-hasura-allowed-roles": ["admin"],
|
|
||||||
// "x-hasura-user-id": uid,
|
|
||||||
// },
|
|
||||||
// });
|
|
||||||
// });
|
|
||||||
|
|||||||
@@ -2853,3 +2853,21 @@ query GET_BODYSHOP_BY_MERCHANTID($merchantID: String!) {
|
|||||||
email
|
email
|
||||||
}
|
}
|
||||||
}`;
|
}`;
|
||||||
|
|
||||||
|
exports.GET_USER_BY_EMAIL = `
|
||||||
|
query GET_USER_BY_EMAIL($email: String!) {
|
||||||
|
users(where: {email: {_eq: $email}}) {
|
||||||
|
email
|
||||||
|
validemail
|
||||||
|
associations {
|
||||||
|
id
|
||||||
|
shopid
|
||||||
|
bodyshop {
|
||||||
|
id
|
||||||
|
convenient_company
|
||||||
|
features
|
||||||
|
timezone
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}`;
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ const express = require("express");
|
|||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
const validateFirebaseIdTokenMiddleware = require("../middleware/validateFirebaseIdTokenMiddleware");
|
const validateFirebaseIdTokenMiddleware = require("../middleware/validateFirebaseIdTokenMiddleware");
|
||||||
const { createAssociation, createShop, updateShop, updateCounter } = require("../admin/adminops");
|
const { createAssociation, createShop, updateShop, updateCounter } = require("../admin/adminops");
|
||||||
const { updateUser, getUser, createUser, sendwelcome, resetlink } = require("../firebase/firebase-handler");
|
const { updateUser, getUser, createUser, getWelcomeEmail, getResetLink } = require("../firebase/firebase-handler");
|
||||||
const validateAdminMiddleware = require("../middleware/validateAdminMiddleware");
|
const validateAdminMiddleware = require("../middleware/validateAdminMiddleware");
|
||||||
|
|
||||||
router.use(validateFirebaseIdTokenMiddleware);
|
router.use(validateFirebaseIdTokenMiddleware);
|
||||||
@@ -15,7 +15,7 @@ router.post("/updatecounter", updateCounter);
|
|||||||
router.post("/updateuser", updateUser);
|
router.post("/updateuser", updateUser);
|
||||||
router.post("/getuser", getUser);
|
router.post("/getuser", getUser);
|
||||||
router.post("/createuser", createUser);
|
router.post("/createuser", createUser);
|
||||||
router.post("/sendwelcome", sendwelcome);
|
router.post("/sendwelcome", getWelcomeEmail);
|
||||||
router.post("/resetlink", resetlink);
|
router.post("/resetlink", getResetLink);
|
||||||
|
|
||||||
module.exports = router;
|
module.exports = router;
|
||||||
|
|||||||
Reference in New Issue
Block a user