mirror of https://github.com/Chocobozzz/PeerTube
				
				
				
			
		
			
				
	
	
		
			99 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
			
		
		
	
	
			99 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
| const mongoose = require('mongoose')
 | |
| 
 | |
| const customUsersValidators = require('../helpers/custom-validators').users
 | |
| const modelUtils = require('./utils')
 | |
| const peertubeCrypto = require('../helpers/peertube-crypto')
 | |
| 
 | |
| const OAuthToken = mongoose.model('OAuthToken')
 | |
| 
 | |
| // ---------------------------------------------------------------------------
 | |
| 
 | |
| const UserSchema = mongoose.Schema({
 | |
|   createdDate: {
 | |
|     type: Date,
 | |
|     default: Date.now
 | |
|   },
 | |
|   password: String,
 | |
|   username: String,
 | |
|   role: String
 | |
| })
 | |
| 
 | |
| UserSchema.path('password').required(customUsersValidators.isUserPasswordValid)
 | |
| UserSchema.path('username').required(customUsersValidators.isUserUsernameValid)
 | |
| UserSchema.path('role').validate(customUsersValidators.isUserRoleValid)
 | |
| 
 | |
| UserSchema.methods = {
 | |
|   isPasswordMatch,
 | |
|   toFormatedJSON
 | |
| }
 | |
| 
 | |
| UserSchema.statics = {
 | |
|   countTotal,
 | |
|   getByUsername,
 | |
|   list,
 | |
|   listForApi,
 | |
|   loadById,
 | |
|   loadByUsername
 | |
| }
 | |
| 
 | |
| UserSchema.pre('save', function (next) {
 | |
|   const user = this
 | |
| 
 | |
|   peertubeCrypto.cryptPassword(this.password, function (err, hash) {
 | |
|     if (err) return next(err)
 | |
| 
 | |
|     user.password = hash
 | |
| 
 | |
|     return next()
 | |
|   })
 | |
| })
 | |
| 
 | |
| UserSchema.pre('remove', function (next) {
 | |
|   const user = this
 | |
| 
 | |
|   OAuthToken.removeByUserId(user._id, next)
 | |
| })
 | |
| 
 | |
| mongoose.model('User', UserSchema)
 | |
| 
 | |
| // ------------------------------ METHODS ------------------------------
 | |
| 
 | |
| function isPasswordMatch (password, callback) {
 | |
|   return peertubeCrypto.comparePassword(password, this.password, callback)
 | |
| }
 | |
| 
 | |
| function toFormatedJSON () {
 | |
|   return {
 | |
|     id: this._id,
 | |
|     username: this.username,
 | |
|     role: this.role,
 | |
|     createdDate: this.createdDate
 | |
|   }
 | |
| }
 | |
| // ------------------------------ STATICS ------------------------------
 | |
| 
 | |
| function countTotal (callback) {
 | |
|   return this.count(callback)
 | |
| }
 | |
| 
 | |
| function getByUsername (username) {
 | |
|   return this.findOne({ username: username })
 | |
| }
 | |
| 
 | |
| function list (callback) {
 | |
|   return this.find(callback)
 | |
| }
 | |
| 
 | |
| function listForApi (start, count, sort, callback) {
 | |
|   const query = {}
 | |
|   return modelUtils.listForApiWithCount.call(this, query, start, count, sort, callback)
 | |
| }
 | |
| 
 | |
| function loadById (id, callback) {
 | |
|   return this.findById(id, callback)
 | |
| }
 | |
| 
 | |
| function loadByUsername (username, callback) {
 | |
|   return this.findOne({ username: username }, callback)
 | |
| }
 |