Guest User

Untitled

a guest
Feb 19th, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.47 KB | None | 0 0
  1. import config from '../config/config'
  2. import CRUDService from '../infrastructure/CRUDService'
  3. import firebaseService from '../infrastructure/FirebaseService'
  4. import getDurationInDays from '../time/getDurationInDays'
  5. import getDurationUnitsInDays from '../time/getDurationUnitsInDays'
  6. import interplorateValue from '../math/interplorateValue'
  7. import moment from 'moment'
  8. import nodemailer from 'nodemailer'
  9. import store from '../store/Store'
  10.  
  11. const EXPIRATION_TIME = 1000 * 60 * 4
  12.  
  13. class UserService {
  14. authenticateUser(request, response) {
  15. const email = request.body.email
  16. const users = store['users']
  17. const userId = Object.keys(users).find(userId => users[userId].email === email)
  18.  
  19.  
  20. if (userId) {
  21. if (users[userId] && users[userId].unverified) {
  22. if (users[userId].noEmailSent) {
  23. this.sendVerificationEmail(email, userId)
  24. firebaseService.remove(
  25. 'users/' + userId + '/noEmailSent',
  26. )
  27. }
  28. response.status(403).send({ error: 'email not verified' })
  29. } else {
  30. response.send({ user: users[userId] })
  31. }
  32. } else {
  33. response.status(404).send({ error: 'no cigar' })
  34. }
  35. }
  36.  
  37. requestPasswordReset(request, response) {
  38. const email = request.body.email
  39. const users = store['users']
  40. const userId = Object.keys(users).find(userId => users[userId].email === email)
  41.  
  42. if (userId) {
  43. Object.keys(store['resetPasswordRequests']).map(resetPasswordRequestId => {
  44. if (store['resetPasswordRequests'][resetPasswordRequestId].email === email) {
  45. CRUDService.delete(
  46. 'resetPasswordRequest',
  47. resetPasswordRequestId
  48. )
  49. }
  50. })
  51. const { resetPasswordRequestId } = CRUDService.create(
  52. 'resetPasswordRequest',
  53. { email }
  54. )
  55.  
  56. const transporter = nodemailer.createTransport(config.SUPPORT_EMAIL_CREDENTIALS)
  57. const mailOptions = {
  58. from: `"Cnnct No-Reply" <${config.SUPPORT_EMAIL}>`,
  59. to: email,
  60. subject: `Cnnct Password Reset - Security Code`, // Subject line
  61. text: `The security code to reset your password is ${resetPasswordRequestId.split('-').join('_')}`,
  62. }
  63. transporter.sendMail(mailOptions, (error, info) => {
  64. if(error){
  65. return console.log(error)
  66. }
  67. console.log('Message sent: ' + info.response)
  68. })
  69.  
  70. response.send({ user: users[userId] })
  71. } else {
  72. response.status(404).send({ error: 'no cigar' })
  73. }
  74. }
  75.  
  76. resetPassword(request, response) {
  77. const {
  78. resetPasswordSecurityCode,
  79. resetPasswordNewPassword,
  80. resetPasswordNewPasswordConfirmed
  81. } = request.body
  82.  
  83. const resetPasswordRequests = store['resetPasswordRequests']
  84. const resetPasswordRequestId = resetPasswordSecurityCode.split('_').join('-')
  85.  
  86. if (
  87. resetPasswordRequests[resetPasswordRequestId] &&
  88. Date.now() < (resetPasswordRequests[resetPasswordRequestId].createdAt + EXPIRATION_TIME)
  89. ) {
  90. firebaseService.getUserByEmail(resetPasswordRequests[resetPasswordRequestId].email)
  91. .then(userRecord => {
  92. firebaseService.updateUser(userRecord.uid, { password: resetPasswordNewPassword })
  93. .then(function(userRecord) {
  94. // See the UserRecord reference doc for the contents of userRecord.
  95. console.log("Successfully updated user", userRecord.toJSON())
  96. response.send('OK')
  97. })
  98. .catch(function(error) {
  99. console.log("Error updating user:", error)
  100. response.status(404).send({ error: 'no cigar' })
  101. })
  102. })
  103. .catch(error => {
  104. response.status(404).send({ error: 'no cigar' })
  105. })
  106. } else {
  107. response.status(404).send({ error: 'no cigar' })
  108. }
  109. }
  110.  
  111. resendVerificationEmail(request, response) {
  112. const { email, uid } = request.body
  113. this.sendVerificationEmail(email, uid)
  114. response.send('OK')
  115. }
  116.  
  117. sendVerificationEmail(email, uid) {
  118. const emailVerifications = store.emailVerifications
  119. Object.keys(emailVerifications).map(emailVerificationId => {
  120. if (emailVerifications[emailVerificationId].email === email) {
  121. firebaseService.remove(
  122. 'emailVerifications/' + emailVerificationId,
  123. )
  124. }
  125. })
  126. const emailVerificationId = firebaseService.add(
  127. 'emailVerifications',
  128. {
  129. email,
  130. uid,
  131. }
  132. )
  133.  
  134. const transporter = nodemailer.createTransport(config.SUPPORT_EMAIL_CREDENTIALS)
  135. const mailOptions = {
  136. from: `"Cnnct No-Reply" <${config.SUPPORT_EMAIL}>`,
  137. to: email,
  138. subject: `Cnnct Email Verification`, // Subject line
  139. text: `Please use the following link to verify your email address: ${config.CLIENT_URL}/v/${emailVerificationId}`,
  140. }
  141. transporter.sendMail(mailOptions, (error, info) => {
  142. if(error){
  143. return console.log(error)
  144. }
  145. console.log('Message sent: ' + info.response)
  146. })
  147. }
  148.  
  149. verifyEmail(request, response) {
  150. const {
  151. verificationId,
  152. } = request.body
  153.  
  154. const emailVerifications = store['emailVerifications']
  155. const emailVerification = emailVerifications[verificationId] || {}
  156.  
  157. if (emailVerification.email) {
  158. response.send('OK')
  159. firebaseService.remove(
  160. 'emailVerifications/' + verificationId,
  161. )
  162. firebaseService.update(
  163. 'users/' + emailVerification.uid,
  164. {
  165. unverified: false,
  166. }
  167. )
  168. } else {
  169. response.status(404).send({ error: 'no cigar' })
  170. }
  171. }
  172. }
  173.  
  174. export default new UserService()
Add Comment
Please, Sign In to add comment