Advertisement
Vadorequest

UserModel.js

Feb 11th, 2014
214
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ///<reference path='./../../lib/def/defLoader.d.ts'/>
  2. var __extends = this.__extends || function (d, b) {
  3.     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  4.     function __() { this.constructor = d; }
  5.     __.prototype = b.prototype;
  6.     d.prototype = new __();
  7. };
  8. var model = require('./Model');
  9.  
  10. (function (Models) {
  11.     /**
  12.     * Model used to manage users.
  13.     * The model is primary static, but, to make it easy to use, some things are also stored for each instance.
  14.     * That allows the code to use both Model or instance of Model such as:
  15.     *      Model.schema
  16.     *      model.Schema
  17.     */
  18.     var UserModel = (function (_super) {
  19.         __extends(UserModel, _super);
  20.         function UserModel() {
  21.             _super.apply(this, arguments);
  22.             /**
  23.             * Helpers to always get the property, from instance or static.
  24.             */
  25.             this.modelName = UserModel.modelName;
  26.             this.schema = UserModel.schema;
  27.             this.model = UserModel.model;
  28.         }
  29.         /**
  30.         * Returns the protected fields.
  31.         * @returns {string[]}
  32.         */
  33.         UserModel.getProtectedFields = function () {
  34.             return this._protectedFields;
  35.         };
  36.  
  37.         /**
  38.         * Hash a user password depending on the password hash configuration. Currently SHA256 in hexadecimal.
  39.         * Assuming crypto is global.
  40.         * @param password      User password.
  41.         * @returns {string}    Hashed password.
  42.         */
  43.         UserModel.hashPassword = function (password) {
  44.             return crypto.createHash(UserModel._passwordHashMethod).update(password).digest(UserModel._passwordDigest);
  45.         };
  46.         UserModel.modelName = 'User';
  47.  
  48.         UserModel.schema = require('../schemas/userSchema.js');
  49.  
  50.         UserModel.Schema = model.Models.Model.getNewSchemaInstance(UserModel);
  51.  
  52.         UserModel.model = model.Models.Model.getNewModelInstance(UserModel);
  53.  
  54.         UserModel._protectedFields = [
  55.             'login',
  56.             'email'
  57.         ];
  58.  
  59.         UserModel._passwordHashMethod = 'sha256';
  60.  
  61.         UserModel._passwordDigest = 'hex';
  62.         return UserModel;
  63.     })(model.Models.Model);
  64.     Models.UserModel = UserModel;
  65.  
  66.     /**
  67.     * Don't forget that some methods such as exists() are written in the Model class and available for all Models.
  68.     * The following methods belong ONLY to the mongoose model instance, not to the Model class itself!
  69.     *
  70.     *************************************************************************************************
  71.     ******************************** Extended Model methods *****************************************
  72.     *************************************************************************************************
  73.     */
  74.     /**
  75.     * Connect a user to the game.
  76.     * @param user      User to check. {}
  77.     * @param callback  Callback to execute.
  78.     */
  79.     UserModel.model.checkAuthentication = function (user, callback) {
  80.         // Force to provide login and password.
  81.         UserModel.model.exists({ login: user.login, password: UserModel.hashPassword(user.password) }, function (err, userFound) {
  82.             // Load public profile.
  83.             UserModel.model._getProtectedInformation(userFound, function (userPublic) {
  84.                 // Provides only public fields.
  85.                 callback(new __message("__17", { err: err, user: userPublic }, !err && userFound ? true : false));
  86.             });
  87.         });
  88.     };
  89.  
  90.     /**
  91.     * Get the protected fields for the found user.
  92.     * @param user      User to find.
  93.     * @param callback  Callback to execute.
  94.     */
  95.     UserModel.model.getProtectedInformation = function (user, callback) {
  96.         // We are looking for an unique user.
  97.         UserModel.model.exists(user, function (err, userFound) {
  98.             if (err) {
  99.                 UserModel.model.errorHandler(err, UserModel, callback);
  100.             } else {
  101.                 // Load public profile.
  102.                 UserModel.model._getProtectedInformation(userFound, function (userPublic) {
  103.                     // Provides only public fields.
  104.                     callback(new __message('', { err: err, user: userPublic }, err ? false : true));
  105.                 });
  106.             }
  107.         });
  108.     };
  109.  
  110.     /**
  111.     * Get the protected fields of a user.
  112.     * @param user  Instance of model.
  113.     * @param callback  Callback to execute.
  114.     * @private
  115.     */
  116.     UserModel.model.hashPassword = function (user, callback) {
  117.         var err = false;
  118.         if (user && user.password) {
  119.             user.password = UserModel.hashPassword(user.password);
  120.         } else {
  121.             err = true;
  122.         }
  123.         callback(new __message(err ? '__18' : '', { user: user }, err ? false : true));
  124.     };
  125.  
  126.     /**
  127.     *************************************************************************************************
  128.     *************************** Methods to use only locally (private) *******************************
  129.     *************************************************************************************************
  130.     */
  131.     /**
  132.     * Get the protected fields of a user.
  133.     * @param user  Instance of model.
  134.     * @param callback  Callback to execute.
  135.     * @private
  136.     */
  137.     UserModel.model._getProtectedInformation = function (user, callback) {
  138.         var userPublic = {};
  139.  
  140.         // Get fields to share.
  141.         var publicFields = UserModel.getProtectedFields();
  142.  
  143.         for (var field in publicFields) {
  144.             userPublic[publicFields[field]] = user[publicFields[field]];
  145.         }
  146.  
  147.         callback(userPublic);
  148.     };
  149. })(exports.Models || (exports.Models = {}));
  150. var Models = exports.Models;
  151. //# sourceMappingURL=UserModel.js.map
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement