Advertisement
Guest User

Untitled

a guest
Dec 6th, 2017
210
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 'use strict'
  2.  
  3. import * as indicative from 'indicative'
  4. import { RateLimiter } from "limiter"
  5.  
  6. import { User } from '../../models/User'
  7. import { Socket } from '../../../scripts/class/Socket'
  8. import { Password } from '../../../scripts/class/Hash'
  9. import { rules } from '../../../config/config'
  10.  
  11. const limiter = new RateLimiter(5, 'hour', true)
  12.  
  13. const profile = (instance: Socket, socket: any) => {
  14.     socket.on('profile', async (data) => {
  15.         const { DB } = instance
  16.         const user = new User(DB)
  17.  
  18.         indicative.validate(data, rules).then(async () => {
  19.             const { pseudo, tag, email, password, newPassword } = data
  20.  
  21.             const emailCursor = await user.filter({ tag })
  22.             const result = await emailCursor.toArray()
  23.             const userID = result[0].id
  24.  
  25.             if (userID) {
  26.                 limiter.removeTokens(1, async (err, remainingRequests) => {
  27.                     if (remainingRequests < 1) {
  28.                         socket.emit('profile', {
  29.                             success: false,
  30.                             message: 'Vous changez vos informations trop rapidement, veuillez réessayer plus tard.'
  31.                         })
  32.                     } else {
  33.                         if (pseudo) {
  34.                             user.update(userID, { pseudo }, password).then((res) => {
  35.                                 if (!res) {
  36.                                     socket.emit('profile', {
  37.                                         success: false,
  38.                                         message: 'Mot de passe invalide'
  39.                                     })
  40.                                 } else {
  41.                                     socket.emit('profile', { success: true })
  42.                                 }
  43.                             })
  44.                         }
  45.  
  46.                         if (email) {
  47.                             user.update(userID, { email }, password).then((res) => {
  48.                                 if (!res) {
  49.                                     socket.emit('profile', {
  50.                                         success: false,
  51.                                         message: 'Mot de passe invalide'
  52.                                     })
  53.                                 } else {
  54.                                     socket.emit('profile', { success: true })
  55.                                 }
  56.                             })
  57.                         }
  58.  
  59.                         if (password && newPassword) {
  60.                             const hashedPassword = await Password.hash(newPassword)
  61.  
  62.                             user.update(userID, { password: hashedPassword }, password).then((res) => {
  63.                                 if (!res) {
  64.                                     socket.emit('profile', {
  65.                                         success: false,
  66.                                         message: 'Mot de passe invalide'
  67.                                     })
  68.                                 } else {
  69.                                     socket.emit('profile', { success: true })
  70.                                 }
  71.                             })
  72.                         }
  73.                     } // Les multiples } & }) me dérangent, est-ce grave ? Y a t il une méthode que je peux utiliser pour remplacer ça ?
  74.                 })  /*
  75.                         J'ai regardé vite fait, je pourrai faire quelque chose de ce genre la non ?
  76.                         userID
  77.                             .then() // do something inside
  78.                             .then() // do something inside
  79.  
  80.                         ???
  81.                     */
  82.             }
  83.         }).catch((err) => {
  84.             socket.emit('profile', {
  85.                 success: false,
  86.                 message: `${err[0].field} obligatoire`
  87.             })
  88.         })
  89.     })
  90. }
  91.  
  92. export { profile }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement