Advertisement
Guest User

Untitled

a guest
Nov 21st, 2017
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.93 KB | None | 0 0
  1. // external modules
  2. var md5 = require("blueimp-md5");
  3. var Sequelize = require("sequelize");
  4. var scrypt = require('scrypt');
  5.  
  6. //core
  7. var logger = require("../logger.js");
  8. var letterAvatars = require('../letter-avatars.js');
  9.  
  10. module.exports = function (sequelize, DataTypes) {
  11. var User = sequelize.define('User', {
  12. id: {
  13. type: DataTypes.UUID,
  14. primaryKey: true,
  15. defaultValue: Sequelize.UUIDV4
  16. },
  17. profileid: {
  18. type: DataTypes.STRING,
  19. unique: true
  20. },
  21. profile: {
  22. type: DataTypes.TEXT
  23. },
  24. accessToken: {
  25. type: DataTypes.STRING
  26. },
  27. refreshToken: {
  28. type: DataTypes.STRING
  29. },
  30. nickname: {
  31. type: Sequelize.STRING,
  32. primaryKey: true
  33. },
  34. email: {
  35. type: Sequelize.TEXT,
  36. validate: {
  37. isEmail: true
  38. }
  39. },
  40. password: {
  41. type: Sequelize.TEXT,
  42. set: function (value) {
  43. var hash = scrypt.kdfSync(value, scrypt.paramsSync(0.1)).toString("hex");
  44. this.setDataValue('password', hash);
  45. }
  46. }
  47. }, {
  48. instanceMethods: {
  49. verifyPassword: function (attempt) {
  50. if (scrypt.verifyKdfSync(new Buffer(this.password, "hex"), attempt)) {
  51. return this;
  52. } else {
  53. return false;
  54. }
  55. }
  56. },
  57. classMethods: {
  58. getProfile: function (user) {
  59. return user.profile ? User.parseProfile(user.profile) : (user.email ? User.parseProfileByEmail(user.email) : null);
  60. },
  61. parseProfile: function (profile) {
  62. try {
  63. var profile = JSON.parse(profile);
  64. } catch (err) {
  65. logger.error(err);
  66. profile = null;
  67. }
  68. if (profile) {
  69. profile = {
  70. name: profile.displayName || profile.username,
  71. photo: User.parsePhotoByProfile(profile),
  72. biggerphoto: User.parsePhotoByProfile(profile, true)
  73. }
  74. }
  75. return profile;
  76. },
  77. parseProfileByEmail: function (email) {
  78. var photoUrl = 'https://www.gravatar.com/avatar/' + md5(email);
  79. return {
  80. name: email.substring(0, email.lastIndexOf("@")),
  81. photo: photoUrl += '?s=96',
  82. biggerphoto: photoUrl += '?s=400'
  83. };
  84. }
  85. }
  86. });
  87.  
  88. return User;
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement