diff --git a/.gitignore b/.gitignore index e9baeb6..d16b552 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ /node_modules .env -/tmp -gmail.js \ No newline at end of file +/tmp \ No newline at end of file diff --git a/src/index.routes.js b/src/index.routes.js index a96a87a..455bd4f 100644 --- a/src/index.routes.js +++ b/src/index.routes.js @@ -19,7 +19,6 @@ const role = require('./services/role/role.routes'); const profile = require('./services/user/profile.routes'); const plans = require('./services/plans/plans.routes'); - const { initPlans } = require('./services/plans/plans.model'); module.exports = async (app) => { diff --git a/src/services/login/login.controller.js b/src/services/login/login.controller.js index 9ba29cb..fc7b954 100644 --- a/src/services/login/login.controller.js +++ b/src/services/login/login.controller.js @@ -1,9 +1,11 @@ const User = require('../user/user.model'); const bcrypt = require('bcrypt'); const { successfulRes, failedRes } = require('../../utils/response'); -const {premiumPlan, freePlan} = require('../../config/membership'); -const {plansNames} = require('../plans/plans.model'); +const { premiumPlan, freePlan } = require('../../config/membership'); +const { plansNames } = require('../plans/plans.model'); const { setS_id } = require('../../utils/cookie'); +const { default: mongoose } = require('mongoose'); +const MongoStore = require('connect-mongo'); exports.regUser = async (req, res) => { try { @@ -55,7 +57,7 @@ exports.logUser = async (req, res) => { } else { const token = logged.generateToken(req, res); const date = new Date().toISOString().split('T')[0]; - if(logged.membership==premiumPlan && date > logged.end_of_membership){ + if (logged.membership == premiumPlan && date > logged.end_of_membership) { logged.membership = freePlan; logged.memberplan = plansNames.None; await logged.save(); @@ -69,7 +71,7 @@ exports.logUser = async (req, res) => { user.inprogress = undefined; user.quizzes = undefined; - setS_id(req, res); + setS_id(req, res); return successfulRes(res, 200, { user: user, token }); } } catch (e) { @@ -77,12 +79,37 @@ exports.logUser = async (req, res) => { } }; -exports.logout = (req, res) => { +exports.logout = async (req, res) => { try { req.session.destroy(() => {}); + const session = MongoStore.create({ client: mongoose.connection.getClient() }); + session.destroy(req.sessionID); + res.clearCookie('authorization'); - successfulRes(res, 200, 'You have been logged out successfully'); + return successfulRes(res, 200, 'You have been logged out successfully'); } catch (err) { - failedRes(res, 500, 'Invalid logout operation'); + return failedRes(res, 500, 'Invalid logout operation'); } }; + +exports.resetPassword = async (req, res) => { + const {current_password, new_password} = req.body; + const user_id = res.locals.user.id; + try { + const user = await User.findById(user_id).exec(); + if (!user) { + return failedRes(res, 400, new Error('User not found')); + } + const matched = bcrypt.compareSync(current_password, user.password); + if (!matched) { + return failedRes(res, 400, new Error('Current password is invalid')); + }else{ + user.password = bcrypt.hashSync(new_password, 10); + await user.save(); + return successfulRes(res, 200, 'Password has been changed successfully'); + } + + }catch(e){ + return failedRes(res, 500, e); + } +}; \ No newline at end of file diff --git a/src/services/login/login.routes.js b/src/services/login/login.routes.js index 3e0dc02..d960644 100644 --- a/src/services/login/login.routes.js +++ b/src/services/login/login.routes.js @@ -1,9 +1,10 @@ const router = require('express').Router(); -const { logUser, regUser, logout } = require('./login.controller'); +const { logUser, regUser, logout, resetPassword } = require('./login.controller'); +const {authN} = require('../../middelwares/authN'); router.post('/login', logUser); router.post('/signup', regUser); - +router.post('/reset-password', authN, resetPassword); router.post('/logout', logout); module.exports = router; diff --git a/src/services/reading/reading.controllers.js b/src/services/reading/reading.controllers.js index 5aa09dc..7e14bbb 100644 --- a/src/services/reading/reading.controllers.js +++ b/src/services/reading/reading.controllers.js @@ -33,7 +33,7 @@ exports.getReading = async (req, res) => { try { const _id = req.params.id; const user = req.session.user; - console.log(req.session); + const doc = await Reading.findById(_id).populate('quizzes').sort('-createdAt'); if (doc && doc.membership == premiumPlan && user.membership == freePlan) { diff --git a/src/services/user/profile.routes.js b/src/services/user/profile.routes.js index 21511f0..7066f29 100644 --- a/src/services/user/profile.routes.js +++ b/src/services/user/profile.routes.js @@ -7,7 +7,6 @@ const { payment, paymentcb } = require('./payment.controller'); const { submitQuiz } = require('../quiz/quiz.controllers'); //Profile - router.get('/myprofile', authN, profileView); router.put('/myprofile', authN, imageUpload.single('photo'), profileUpdate); router.delete('/myprofile', authN, profileDelete); diff --git a/src/utils/cookie.js b/src/utils/cookie.js index 3dc7e96..723a3e1 100644 --- a/src/utils/cookie.js +++ b/src/utils/cookie.js @@ -1,9 +1,7 @@ const crypto = require('crypto'); const { TOKENKEY, NODE_ENV } = require('../config/env'); -var decode = decodeURIComponent; var encode = encodeURIComponent; var fieldContentRegExp = /^[\u0009\u0020-\u007e\u0080-\u00ff]+$/; -var pairSplitRegExp = /; */; serialize = function (name, val, options) { var opt = options || {};