Advertisement
Guest User

Untitled

a guest
Nov 6th, 2016
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.45 KB | None | 0 0
  1. var scrypt = require('scrypt');
  2. var Promise = require('bluebird');
  3. var personalRole = require('../constants/Role').personal;
  4. var validatePassword = require('password-strength');
  5.  
  6. validatePassword.min = 8;
  7.  
  8. module.exports = {
  9. attributes: {
  10. password: {
  11. set: function(password) {
  12. var params = scrypt.paramsSync(0.1);
  13. var crypted = scrypt.kdfSync(password, params).toString('base64');
  14. this.setDataValue('password', crypted);
  15. }
  16. },
  17. avatar: {
  18. set: function(avatar) {
  19.  
  20. return this.setDataValue('avatar', JSON.stringify(avatar));
  21. },
  22. get: function() {
  23.  
  24. var avatar = this.getDataValue('avatar');
  25. var structure = { large: '', medium: '', small: '', thumbnail: '' };
  26.  
  27. return avatar ? JSON.parse(avatar) : structure;
  28. }
  29. }
  30. },
  31. options: {
  32. hooks: {
  33. afterCreate: function(user, opts, done) {
  34.  
  35. var data = {
  36. name: 'My Workspace',
  37. owner_id: user.id
  38. };
  39.  
  40. return Company.create(data).bind({}).then(function(company) {
  41.  
  42. this.company_id = company.id;
  43.  
  44. return user.update({ active_company: company.id });
  45. }).then(function() {
  46.  
  47. personalRole.company_id = this.company_id;
  48.  
  49. return Role.create(personalRole);
  50. }).then(function(role) {
  51.  
  52. var member = {
  53. company_id: this.company_id,
  54. role_id: role.id,
  55. user_id: user.id
  56. };
  57.  
  58. return CompanyMember.create(member);
  59. }).then(function() {
  60.  
  61. // Here should be included all the new users activities
  62. var activity = {
  63. user_id: user.id,
  64. activities: [ 'homeSlider' ]
  65. };
  66.  
  67. return PendingActivity.create(activity);
  68. }).then(function() {
  69.  
  70. return done();
  71. });
  72. }
  73. },
  74. instanceMethods: {
  75. verifyPassword: function(testPassword) {
  76. if (!testPassword) {
  77. return false;
  78. }
  79. var passwordBuffer = new Buffer(this.getDataValue('password'), 'base64');
  80. return scrypt.verifyKdfSync(passwordBuffer, testPassword);
  81. },
  82. full_name: function() {
  83.  
  84. return this.first_name + ' ' + this.last_name;
  85. },
  86. summary: function() {
  87.  
  88. var self = this;
  89.  
  90. return new Promise(function(resolve, reject) {
  91.  
  92. var query = {
  93. include: [ {
  94. model: Subscription,
  95. required: true
  96. } ]
  97. };
  98.  
  99. self.getCompany(query).bind({}).then(function(company) {
  100.  
  101. this.company = company;
  102.  
  103. return self.getRole();
  104. }).then(function(role) {
  105.  
  106. this.role = role.get({ plain: true });
  107.  
  108. return self.getSession();
  109. }).then(function(session) {
  110.  
  111. var company = this.company;
  112. var roleOmits = [
  113. 'id',
  114. 'name',
  115. 'company_id',
  116. 'tags',
  117. 'created_at',
  118. 'updated_at'
  119. ];
  120. var response = {
  121. id: self.id,
  122. firstName: self.first_name,
  123. lastName: self.last_name,
  124. email: self.email,
  125. avatar: self.avatar,
  126. terms: self.terms,
  127. status: company.status,
  128. token: '',
  129. subscription: {
  130. no_matters: company.Subscription.no_matters,
  131. plan_name: company.Subscription.plan_name,
  132. plan_code: company.Subscription.plan_code,
  133. expiration_date: company.Subscription.expiration_date
  134. },
  135. company: {
  136. id: company.id,
  137. name: company.name,
  138. enterprise: company.enterprise
  139. },
  140. privileges: _.omit(this.role, roleOmits)
  141. };
  142.  
  143. if (session) {
  144. response.token = session.token;
  145. }
  146.  
  147. return resolve(response);
  148. }).catch(reject);
  149. });
  150. },
  151. getSubscription: function() {
  152.  
  153. return this.getCompany().then(function(company) {
  154.  
  155. return company.getSubscription();
  156. });
  157. },
  158. getBillingInformation: function() {
  159.  
  160. return this.getCompany().then(function(company) {
  161.  
  162. return company.getBillingInformation();
  163. });
  164. },
  165. getCompany: function(query) {
  166.  
  167. var extendedQuery = _.extend({ where: { id: this.active_company } }, query);
  168.  
  169. return Company.findOne(extendedQuery);
  170. },
  171. getRole: function(query) {
  172.  
  173. var basicQuery = {
  174. where: {
  175. user_id: this.id,
  176. company_id: this.active_company
  177. },
  178. include: [ {
  179. model: Role
  180. } ]
  181. };
  182. var extendedQuery = _.extend(basicQuery, query);
  183.  
  184. return CompanyMember.findOne(extendedQuery).then(function(instance) {
  185.  
  186. if (!instance) {
  187. var error = {
  188. errors: [ {
  189. path: 'User',
  190. message: 'The user has no role within the company'
  191. } ]
  192. };
  193. return Promise.reject(error);
  194. }
  195.  
  196. return Promise.resolve(instance.Role);
  197. });
  198. }
  199. },
  200. classMethods: {
  201. updatePassword: function(email, passwordData) {
  202.  
  203. return new Promise(function(resolve, reject) {
  204.  
  205. if (!passwordData.password) {
  206. var err = {
  207. errors: [ {
  208. path: 'password',
  209. message: 'Must be present'
  210. } ]
  211. };
  212.  
  213. return reject(err);
  214. } else if (passwordData.password !== passwordData.confirm_password) {
  215. var err = {
  216. errors: [ {
  217. path: 'confirm_password',
  218. message: 'Passwords don\'t match'
  219. } ]
  220. };
  221.  
  222. return reject(err);
  223. }
  224.  
  225. var validation = validatePassword(passwordData.password);
  226.  
  227. if (validation.strength === 'simple') {
  228. var err = {
  229. errors: [ {
  230. path: 'password',
  231. message: validation.hint || 'It\'s too simple'
  232. } ]
  233. };
  234.  
  235. return reject(err);
  236. }
  237.  
  238. var query = { where: { email: { $iLike: email } }, returning: true };
  239.  
  240. return User.update(passwordData, query).then(function(result) {
  241.  
  242. var affectedRows = result[1];
  243. var user = affectedRows[0];
  244.  
  245. return resolve(user);
  246. }).catch(reject);
  247. });
  248. }
  249. }
  250. }
  251. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement