Advertisement
Guest User

Untitled

a guest
Mar 11th, 2016
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.53 KB | None | 0 0
  1. import { createHmac } from 'crypto'
  2. import min from 'min'
  3. import { EventEmitter } from 'events'
  4.  
  5. const secret = 'foobar'
  6.  
  7. const store = {
  8. data: new Map(),
  9. set(key, value) {
  10. store.data.set(key, value)
  11. },
  12.  
  13. get(key) {
  14. if (store.data.has(key)) {
  15. return store.data.get(key)
  16. } else {
  17. throw new Error('no such key')
  18. }
  19. },
  20.  
  21. remove(key) {
  22. store.data.delete(key)
  23. }
  24. }
  25.  
  26. min.store = store
  27.  
  28. class User extends EventEmitter {
  29. async construtor(username, nickname, password = null, salt = secret) {
  30. if (await User.checkUsername(username)) {
  31. throw new Error('User was already exists.')
  32. }
  33.  
  34. this.username = username
  35. this.nickname = nickname
  36.  
  37. if (password) {
  38. this.secretHash = User.createHash(password)
  39. await this.save()
  40. }
  41. }
  42.  
  43. async save() {
  44. await min.hmset(`user:${this.username}`, {
  45. username: this.username,
  46. nickname: this.nickname,
  47. secretHash: this.secretHash
  48. })
  49. await min.sadd('users', this.username)
  50. }
  51.  
  52. static fetch(username) {
  53. const nickname = await min.hget(`user:${username}`, 'nickname')
  54.  
  55. return new User(username, nickname)
  56. }
  57.  
  58. static checkPassword(username, password, salt = secret) {
  59. const secretHash = await min.hget(`user:${username}`, 'secretHash')
  60.  
  61. return User.createHash(salt + password.toUpperCase() + salt, salt) === secretHash
  62. }
  63.  
  64. static createHash(str, salt = secret) {
  65. return createHmac(salt + str.toUpperCase() + salt, salt)
  66. }
  67.  
  68. static checkUsername(username) {
  69. return min.sismember('users', username)
  70. }
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement