Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import config from '../config/config'
- import CRUDService from '../infrastructure/CRUDService'
- import firebaseService from '../infrastructure/FirebaseService'
- import getDurationInDays from '../time/getDurationInDays'
- import getDurationUnitsInDays from '../time/getDurationUnitsInDays'
- import interplorateValue from '../math/interplorateValue'
- import moment from 'moment'
- import nodemailer from 'nodemailer'
- import store from '../store/Store'
- const EXPIRATION_TIME = 1000 * 60 * 4
- class UserService {
- authenticateUser(request, response) {
- const email = request.body.email
- const users = store['users']
- const userId = Object.keys(users).find(userId => users[userId].email === email)
- if (userId) {
- if (users[userId] && users[userId].unverified) {
- if (users[userId].noEmailSent) {
- this.sendVerificationEmail(email, userId)
- firebaseService.remove(
- 'users/' + userId + '/noEmailSent',
- )
- }
- response.status(403).send({ error: 'email not verified' })
- } else {
- response.send({ user: users[userId] })
- }
- } else {
- response.status(404).send({ error: 'no cigar' })
- }
- }
- requestPasswordReset(request, response) {
- const email = request.body.email
- const users = store['users']
- const userId = Object.keys(users).find(userId => users[userId].email === email)
- if (userId) {
- Object.keys(store['resetPasswordRequests']).map(resetPasswordRequestId => {
- if (store['resetPasswordRequests'][resetPasswordRequestId].email === email) {
- CRUDService.delete(
- 'resetPasswordRequest',
- resetPasswordRequestId
- )
- }
- })
- const { resetPasswordRequestId } = CRUDService.create(
- 'resetPasswordRequest',
- { email }
- )
- const transporter = nodemailer.createTransport(config.SUPPORT_EMAIL_CREDENTIALS)
- const mailOptions = {
- from: `"Cnnct No-Reply" <${config.SUPPORT_EMAIL}>`,
- to: email,
- subject: `Cnnct Password Reset - Security Code`, // Subject line
- text: `The security code to reset your password is ${resetPasswordRequestId.split('-').join('_')}`,
- }
- transporter.sendMail(mailOptions, (error, info) => {
- if(error){
- return console.log(error)
- }
- console.log('Message sent: ' + info.response)
- })
- response.send({ user: users[userId] })
- } else {
- response.status(404).send({ error: 'no cigar' })
- }
- }
- resetPassword(request, response) {
- const {
- resetPasswordSecurityCode,
- resetPasswordNewPassword,
- resetPasswordNewPasswordConfirmed
- } = request.body
- const resetPasswordRequests = store['resetPasswordRequests']
- const resetPasswordRequestId = resetPasswordSecurityCode.split('_').join('-')
- if (
- resetPasswordRequests[resetPasswordRequestId] &&
- Date.now() < (resetPasswordRequests[resetPasswordRequestId].createdAt + EXPIRATION_TIME)
- ) {
- firebaseService.getUserByEmail(resetPasswordRequests[resetPasswordRequestId].email)
- .then(userRecord => {
- firebaseService.updateUser(userRecord.uid, { password: resetPasswordNewPassword })
- .then(function(userRecord) {
- // See the UserRecord reference doc for the contents of userRecord.
- console.log("Successfully updated user", userRecord.toJSON())
- response.send('OK')
- })
- .catch(function(error) {
- console.log("Error updating user:", error)
- response.status(404).send({ error: 'no cigar' })
- })
- })
- .catch(error => {
- response.status(404).send({ error: 'no cigar' })
- })
- } else {
- response.status(404).send({ error: 'no cigar' })
- }
- }
- resendVerificationEmail(request, response) {
- const { email, uid } = request.body
- this.sendVerificationEmail(email, uid)
- response.send('OK')
- }
- sendVerificationEmail(email, uid) {
- const emailVerifications = store.emailVerifications
- Object.keys(emailVerifications).map(emailVerificationId => {
- if (emailVerifications[emailVerificationId].email === email) {
- firebaseService.remove(
- 'emailVerifications/' + emailVerificationId,
- )
- }
- })
- const emailVerificationId = firebaseService.add(
- 'emailVerifications',
- {
- email,
- uid,
- }
- )
- const transporter = nodemailer.createTransport(config.SUPPORT_EMAIL_CREDENTIALS)
- const mailOptions = {
- from: `"Cnnct No-Reply" <${config.SUPPORT_EMAIL}>`,
- to: email,
- subject: `Cnnct Email Verification`, // Subject line
- text: `Please use the following link to verify your email address: ${config.CLIENT_URL}/v/${emailVerificationId}`,
- }
- transporter.sendMail(mailOptions, (error, info) => {
- if(error){
- return console.log(error)
- }
- console.log('Message sent: ' + info.response)
- })
- }
- verifyEmail(request, response) {
- const {
- verificationId,
- } = request.body
- const emailVerifications = store['emailVerifications']
- const emailVerification = emailVerifications[verificationId] || {}
- if (emailVerification.email) {
- response.send('OK')
- firebaseService.remove(
- 'emailVerifications/' + verificationId,
- )
- firebaseService.update(
- 'users/' + emailVerification.uid,
- {
- unverified: false,
- }
- )
- } else {
- response.status(404).send({ error: 'no cigar' })
- }
- }
- }
- export default new UserService()
Add Comment
Please, Sign In to add comment