Skip to content

Commit

Permalink
Merge f99c8ed into c71844d
Browse files Browse the repository at this point in the history
  • Loading branch information
daviddamilola committed Sep 17, 2019
2 parents c71844d + f99c8ed commit fc75158
Show file tree
Hide file tree
Showing 11 changed files with 527 additions and 494 deletions.
421 changes: 0 additions & 421 deletions er-email-verification-167749950qq

This file was deleted.

92 changes: 47 additions & 45 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

13 changes: 9 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"build": "babel -d ./build ./src -s",
"start": "node ./build/index.js",
"pretest": "cross-env NODE_ENV=test npm run undo:migrate && cross-env NODE_ENV=test npm run db:migrate && npm run seed",
"test": "cross-env NODE_ENV=test nyc mocha --require @babel/register ./src/tests --exit",
"test": "cross-env NODE_ENV=test nyc mocha --require @babel/register ./src/tests --timeout 15000 --exit",
"dev": "cross-env NODE_ENV=development nodemon ./src/index --exec babel-node",
"lint": "npx eslint ./src --fix",
"debug": "DEBUG=app:* npm run dev",
Expand Down Expand Up @@ -49,7 +49,8 @@
"sequelize-cli": "^5.5.0",
"sinon": "^7.4.2",
"swagger-ui-express": "^4.0.7",
"underscore": "^1.9.1"
"underscore": "^1.9.1",
"xoauth2": "^1.2.0"
},
"devDependencies": {
"@babel/cli": "^7.5.5",
Expand All @@ -59,9 +60,10 @@
"@babel/preset-env": "^7.5.5",
"@babel/register": "^7.5.5",
"babel-eslint": "^10.0.3",
"coveralls": "^3.0.6",
"chai": "^4.2.0",
"chai-as-promised": "^7.1.1",
"chai-http": "^4.3.0",
"coveralls": "^3.0.6",
"eslint": "^6.1.0",
"eslint-config-airbnb": "^18.0.1",
"eslint-plugin-import": "^2.18.2",
Expand All @@ -70,6 +72,9 @@
"morgan": "^1.9.1",
"nodemon": "^1.19.1",
"nyc": "^14.1.1",
"request": "^2.88.0"
"request": "^2.88.0",
"sinon": "^7.4.2",
"sinon-chai": "^3.3.0",
"sinon-express-mock": "^2.2.1"
}
}
65 changes: 61 additions & 4 deletions src/controllers/UserController.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@ export default class UserController {
*/
static signup(req, res) {
const user = req.body;
const { host } = req.headers;
const msg = 'Kindly confirm the link sent to your email account to complete your registration';
UserService.signup(user).then(response => {
const result = {
Expand All @@ -49,7 +48,7 @@ export default class UserController {
};
const { email } = result;
const token = Helper.generateToken({ id: response.id, email, });
const mailData = UserController.composeVerificationMail(email, host, token);
const mailData = Helper.composeVerificationMail(req, email, token);
sendEmail(transporter(), mailData);
Responses.setSuccess(201, msg, { token, ...result });
return Responses.send(res);
Expand Down Expand Up @@ -82,21 +81,79 @@ export default class UserController {

/**
* @method
* @description Email verification endpoint
* @description Implements password reset endpoint
* @static
* @param {object} req - Request object
* @param {object} res - Response object
* @returns {object} JSON response
* @memberof UserController
*/
static async resetPassword(req, res) {
const { email } = req.body;
const emailOptions = Helper.constructResetEmail(req, email);
const validUser = await Helper.verifyExistingEmail(email);
if (validUser) {
sendEmail(transporter(), emailOptions);
Responses.setSuccess(200, 'a password reset link has been sent to your email');
return Responses.send(res);
}
Responses.setError(400, 'there is no user with such email');
return Responses.send(res);
}

/**
* @method
* @description Implements update password controller
* @static
* @param {object} req - Request object
* @param {object} res - Response object
* @returns {object} JSON response
* @memberof UserController
*/
static async updatePassword(req, res) {
const { token } = req.params;
const data = Helper.verifyToken(token);
const hasExpired = data.expiryDate < Date.now();
if (hasExpired) {
Responses.setError(400, 'this address link has expired');
return Responses.send(res);
}
if (req.method === 'GET') {
Responses.setSuccess(200, 'enter your new email');
return Responses.send(res);
}
const { password } = req.body;
const user = await UserService.resetPassword(password, data.email);
const {
id, email, createdAt, updatedAt
} = user[1];
Responses.setSuccess(
200,
'successfully updated your password',
{
id, email, createdAt, updatedAt
}
);
return Responses.send(res);
}

/**
* @method
* @description Email verification endpoint
* @static
* @param {object} req - Request object
* @param {object} res - Response object
* @returns {object} JSON response
* @memberof UserController
*/
static async verifyUserEmail(req, res) {
const { token } = req.params;
const { id, email } = Helper.verifyToken(token);
const user = await UserService.findUser(id);
if (email === user.email) {
UserService.updateUser(email);
Responses.setSuccess(200, 'Your account has been verified');
}
Responses.setSuccess(200, 'Your account has been verified');
return Responses.send(res);
}
}
Loading

0 comments on commit fc75158

Please sign in to comment.