Added frontend howst ENV, updated readme

This commit is contained in:
Alex Holliday committed 2024-06-11 11:41:57 -07:00
1 parent 30be07921a
commit 105852aed2
3 files changed
+69 -27

No files matched your search

+1
View File
@@ -83,6 +83,7 @@ Configure the server with the following environmental variables:
| ENV Variable Name | Required/Optional | Type | Description | Accepted Values |
| -------------------- | ----------------- | --------- | ------------------------------------------------------------------------------------------- | ------------------- |
| CLIENT_HOST | Required | `string` | Frontend Host | |
| JWT_SECRET | Required | `string` | JWT secret | |
| DB_TYPE | Optional | `string` | Specify DB to use | `MongoDB \| FakeDB` |
| DB_CONNECTION_STRING | Required | `string` | Specifies URL for MongoDB Database | |
+34 -2
View File
@@ -13,7 +13,6 @@ const { sendEmail } = require("../utils/sendEmail");
const {
registerTemplate,
} = require("../utils/emailTemplates/registerTemplate");
const RecoveryToken = require("../models/RecoveryToken");
/**
* Creates and returns JWT token with an arbitrary payload
@@ -88,7 +87,6 @@ const registerController = async (req, res, next) => {
* @param {Express.Request} req
* @param {Express.Response} res
* @returns {Promise<Express.Response>}
* @throws {Error}
*/
const loginController = async (req, res, next) => {
try {
@@ -152,11 +150,26 @@ const userEditController = async (req, res, next) => {
}
};
/**
* Returns a recovery token
* @async
* @param {Express.Request} req
* @property {Object} req.body
* @property {string} req.body.email
* @param {Express.Response} res
* @returns {Promise<Express.Response>}
*/
const recoveryRequestController = async (req, res, next) => {
try {
const user = await req.db.getUserByEmail(req, res);
if (user) {
const recoveryToken = await req.db.requestRecoveryToken(req, res);
await sendEmail(
[req.body.email],
"Uptime Monitor Password Recovery",
`<a href='${process.env.CLIENT_HOST}/set-new-password/${recoveryToken.token}'>Click here to reset your password</a>`,
`Recovery token: ${recoveryToken.token}`
);
return res.status(200).json({
success: true,
msg: "Created recovery token",
@@ -171,6 +184,15 @@ const recoveryRequestController = async (req, res, next) => {
}
};
/**
* Returns a recovery token
* @async
* @param {Express.Request} req
* @property {Object} req.body
* @property {string} req.body.token
* @param {Express.Response} res
* @returns {Promise<Express.Response>}
*/
const validateRecoveryTokenController = async (req, res, next) => {
try {
const recoveryToken = await req.db.validateRecoveryToken(req, res);
@@ -187,6 +209,16 @@ const validateRecoveryTokenController = async (req, res, next) => {
}
};
/**
* Returns an updated user
* @async
* @param {Express.Request} req
* @property {Object} req.body
* @property {string} req.body.token
* @property {string} req.body.password
* @param {Express.Response} res
* @returns {Promise<Express.Response>}
*/
const resetPasswordController = async (req, res, next) => {
try {
user = await req.db.resetPassword(req, res);
+34 -25
View File
@@ -1,7 +1,7 @@
const sgMail = require('@sendgrid/mail')
const logger = require('./logger')
sgMail.setApiKey(process.env.SENDGRID_API_KEY)
const SERVICE_NAME = 'Email_Service';
const sgMail = require("@sendgrid/mail");
const logger = require("./logger");
sgMail.setApiKey(process.env.SENDGRID_API_KEY);
const SERVICE_NAME = "Email_Service";
/**
* @async
* @function
@@ -12,25 +12,34 @@ const SERVICE_NAME = 'Email_Service';
* @example
* await sendEmail(['veysel@bluewavelabs.ca','alex@bluewavelabs.ca'],'Testing Email Service','<h1>BlueWaveLabs</h1>','Testing Email Service')
*/
const sendEmail = async (receivers,subject, contentHTML, contentText = null ) => {
const msg = {
to: receivers,
from: {
name: 'Uptime System',
email: process.env.SYSTEM_EMAIL_ADDRESS // must be verified email by sendgrid
},
subject: subject,
text: contentText || contentHTML,
html: contentHTML,
}
try {
await sgMail.send(msg);
logger.info(`Emails sent to receivers:${receivers} with the subject:${subject}`,{service:SERVICE_NAME})
} catch (error) {
logger.error(`Sending Email action failed, ERROR:${error}`, { service: SERVICE_NAME });
}
}
const sendEmail = async (
receivers,
subject,
contentHTML,
contentText = null
) => {
const msg = {
to: receivers,
from: {
name: "Uptime System",
email: process.env.SYSTEM_EMAIL_ADDRESS, // must be verified email by sendgrid
},
subject: subject,
text: contentText || contentHTML,
html: contentHTML,
};
try {
await sgMail.send(msg);
logger.info(
`Emails sent to receivers:${receivers} with the subject:${subject}`,
{ service: SERVICE_NAME }
);
} catch (error) {
logger.error(`Sending Email action failed, ERROR:${error}`, {
service: SERVICE_NAME,
});
throw error;
}
};
module.exports = {sendEmail}
module.exports = { sendEmail };