feature/IO-3187-Admin-Enhancements - Minor cleanup

This commit is contained in:
Dave Richer
2025-04-15 13:57:50 -04:00
parent b5cb520944
commit 546ebba0bd
3 changed files with 100 additions and 128 deletions

View File

@@ -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 admin = require("firebase-admin");
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({
credential: admin.credential.cert(serviceAccount),
@@ -202,45 +197,24 @@ const unsubscribe = async (req, res) => {
}
};
const sendwelcome = (req, res) => {
const getWelcomeEmail = async (req, res) => {
const { authid, email } = req.body;
try {
// Fetch user from Firebase
admin
.auth()
.getUser(authid)
.then((userRecord) => {
const userRecord = await admin.auth().getUser(authid);
if (!userRecord) {
return Promise.reject({ status: 404, message: "User not found in Firebase." });
throw { status: 404, message: "User not found in Firebase." };
}
// Fetch user data from the database using GraphQL
return client.request(
`
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 dbUserResult = await client.request(GET_USER_BY_EMAIL, { email: email.toLowerCase() });
const dbUser = dbUserResult?.users?.[0];
if (!dbUser) {
return Promise.reject({ status: 404, message: "User not found in database." });
throw { 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, {
@@ -251,21 +225,16 @@ const sendwelcome = (req, res) => {
}
// Generate password reset link
return admin
.auth()
.generatePasswordResetLink(dbUser.email)
.then((resetLink) => ({ dbUser, resetLink }));
})
.then(({ dbUser, resetLink }) => {
// Send welcome email (replace with your actual email-sending service)
return sendWelcomeEmail({
const resetLink = await admin.auth().generatePasswordResetLink(dbUser.email);
// 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
});
})
.then(() => {
// Log success and return response
logger.log("admin-send-welcome-email", "debug", req.user.email, null, {
request: req.body,
@@ -273,8 +242,7 @@ const sendwelcome = (req, res) => {
emailSentTo: email
});
res.status(200).json({ message: "Welcome email sent successfully." });
})
.catch((error) => {
} catch (error) {
logger.log("admin-send-welcome-email-error", "ERROR", req.user.email, null, { error });
if (!res.headersSent) {
@@ -283,31 +251,35 @@ const sendwelcome = (req, res) => {
error
});
}
});
}
};
const resetlink = (req, res) => {
const getResetLink = async (req, res) => {
const { authid, email } = req.body;
logger.log("admin-reset-link", "debug", req.user.email, null, { authid: authid, email: email });
admin
.auth()
.getUser(authid)
.then((userRecord) => {
logger.log("admin-reset-link", "debug", req.user.email, null, { authid, email });
try {
// Fetch user from Firebase
const userRecord = await admin.auth().getUser(authid);
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()
.generatePasswordResetLink(email)
.then((resetLink) => ({ userRecord, resetLink }));
})
.then(({ resetLink }) => {
// Generate password reset link
const resetLink = await admin.auth().generatePasswordResetLink(email);
// Log success and return response
logger.log("admin-reset-link-success", "debug", req.user.email, null, {
request: req.body,
ioadmin: true,
ioadmin: true
});
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 = {
@@ -318,24 +290,6 @@ module.exports = {
sendNotification,
subscribe,
unsubscribe,
sendwelcome,
resetlink
getWelcomeEmail,
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,
// },
// });
// });

View File

@@ -2853,3 +2853,21 @@ query GET_BODYSHOP_BY_MERCHANTID($merchantID: String!) {
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
}
}
}
}`;

View File

@@ -2,7 +2,7 @@ const express = require("express");
const router = express.Router();
const validateFirebaseIdTokenMiddleware = require("../middleware/validateFirebaseIdTokenMiddleware");
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");
router.use(validateFirebaseIdTokenMiddleware);
@@ -15,7 +15,7 @@ router.post("/updatecounter", updateCounter);
router.post("/updateuser", updateUser);
router.post("/getuser", getUser);
router.post("/createuser", createUser);
router.post("/sendwelcome", sendwelcome);
router.post("/resetlink", resetlink);
router.post("/sendwelcome", getWelcomeEmail);
router.post("/resetlink", getResetLink);
module.exports = router;