diff options
Diffstat (limited to 'server/models/user.js')
-rw-r--r-- | server/models/user.js | 86 |
1 files changed, 78 insertions, 8 deletions
diff --git a/server/models/user.js b/server/models/user.js index 14ffecbff..a19de7072 100644 --- a/server/models/user.js +++ b/server/models/user.js | |||
@@ -1,28 +1,98 @@ | |||
1 | const mongoose = require('mongoose') | 1 | const mongoose = require('mongoose') |
2 | 2 | ||
3 | const customUsersValidators = require('../helpers/custom-validators').users | ||
4 | const modelUtils = require('./utils') | ||
5 | const peertubeCrypto = require('../helpers/peertube-crypto') | ||
6 | |||
7 | const OAuthToken = mongoose.model('OAuthToken') | ||
8 | |||
3 | // --------------------------------------------------------------------------- | 9 | // --------------------------------------------------------------------------- |
4 | 10 | ||
5 | const UserSchema = mongoose.Schema({ | 11 | const UserSchema = mongoose.Schema({ |
12 | createdDate: { | ||
13 | type: Date, | ||
14 | default: Date.now | ||
15 | }, | ||
6 | password: String, | 16 | password: String, |
7 | username: String | 17 | username: String, |
18 | role: String | ||
8 | }) | 19 | }) |
9 | 20 | ||
10 | UserSchema.path('password').required(true) | 21 | UserSchema.path('password').required(customUsersValidators.isUserPasswordValid) |
11 | UserSchema.path('username').required(true) | 22 | UserSchema.path('username').required(customUsersValidators.isUserUsernameValid) |
23 | UserSchema.path('role').validate(customUsersValidators.isUserRoleValid) | ||
24 | |||
25 | UserSchema.methods = { | ||
26 | isPasswordMatch, | ||
27 | toFormatedJSON | ||
28 | } | ||
12 | 29 | ||
13 | UserSchema.statics = { | 30 | UserSchema.statics = { |
14 | getByUsernameAndPassword: getByUsernameAndPassword, | 31 | countTotal, |
15 | list: list | 32 | getByUsername, |
33 | list, | ||
34 | listForApi, | ||
35 | loadById, | ||
36 | loadByUsername | ||
16 | } | 37 | } |
17 | 38 | ||
39 | UserSchema.pre('save', function (next) { | ||
40 | const user = this | ||
41 | |||
42 | peertubeCrypto.cryptPassword(this.password, function (err, hash) { | ||
43 | if (err) return next(err) | ||
44 | |||
45 | user.password = hash | ||
46 | |||
47 | return next() | ||
48 | }) | ||
49 | }) | ||
50 | |||
51 | UserSchema.pre('remove', function (next) { | ||
52 | const user = this | ||
53 | |||
54 | OAuthToken.removeByUserId(user._id, next) | ||
55 | }) | ||
56 | |||
18 | mongoose.model('User', UserSchema) | 57 | mongoose.model('User', UserSchema) |
19 | 58 | ||
20 | // --------------------------------------------------------------------------- | 59 | // ------------------------------ METHODS ------------------------------ |
60 | |||
61 | function isPasswordMatch (password, callback) { | ||
62 | return peertubeCrypto.comparePassword(password, this.password, callback) | ||
63 | } | ||
64 | |||
65 | function toFormatedJSON () { | ||
66 | return { | ||
67 | id: this._id, | ||
68 | username: this.username, | ||
69 | role: this.role, | ||
70 | createdDate: this.createdDate | ||
71 | } | ||
72 | } | ||
73 | // ------------------------------ STATICS ------------------------------ | ||
74 | |||
75 | function countTotal (callback) { | ||
76 | return this.count(callback) | ||
77 | } | ||
78 | |||
79 | function getByUsername (username) { | ||
80 | return this.findOne({ username: username }) | ||
81 | } | ||
21 | 82 | ||
22 | function list (callback) { | 83 | function list (callback) { |
23 | return this.find(callback) | 84 | return this.find(callback) |
24 | } | 85 | } |
25 | 86 | ||
26 | function getByUsernameAndPassword (username, password) { | 87 | function listForApi (start, count, sort, callback) { |
27 | return this.findOne({ username: username, password: password }) | 88 | const query = {} |
89 | return modelUtils.listForApiWithCount.call(this, query, start, count, sort, callback) | ||
90 | } | ||
91 | |||
92 | function loadById (id, callback) { | ||
93 | return this.findById(id, callback) | ||
94 | } | ||
95 | |||
96 | function loadByUsername (username, callback) { | ||
97 | return this.findOne({ username: username }, callback) | ||
28 | } | 98 | } |