Add migration (for db, folders...) mechanism
[oweals/peertube.git] / server / models / oauth-token.js
1 const mongoose = require('mongoose')
2
3 const logger = require('../helpers/logger')
4
5 // ---------------------------------------------------------------------------
6
7 const OAuthTokenSchema = mongoose.Schema({
8   accessToken: String,
9   accessTokenExpiresAt: Date,
10   client: { type: mongoose.Schema.Types.ObjectId, ref: 'OAuthClient' },
11   refreshToken: String,
12   refreshTokenExpiresAt: Date,
13   user: { type: mongoose.Schema.Types.ObjectId, ref: 'User' }
14 })
15
16 OAuthTokenSchema.path('accessToken').required(true)
17 OAuthTokenSchema.path('client').required(true)
18 OAuthTokenSchema.path('user').required(true)
19
20 OAuthTokenSchema.statics = {
21   getByRefreshTokenAndPopulateClient: getByRefreshTokenAndPopulateClient,
22   getByTokenAndPopulateUser: getByTokenAndPopulateUser,
23   getByRefreshToken: getByRefreshToken
24 }
25
26 mongoose.model('OAuthToken', OAuthTokenSchema)
27
28 // ---------------------------------------------------------------------------
29
30 function getByRefreshTokenAndPopulateClient (refreshToken) {
31   return this.findOne({ refreshToken: refreshToken }).populate('client').exec().then(function (token) {
32     if (!token) return token
33
34     const tokenInfos = {
35       refreshToken: token.refreshToken,
36       refreshTokenExpiresAt: token.refreshTokenExpiresAt,
37       client: {
38         id: token.client._id.toString()
39       },
40       user: token.user
41     }
42
43     return tokenInfos
44   }).catch(function (err) {
45     logger.info('getRefreshToken error.', { error: err })
46   })
47 }
48
49 function getByTokenAndPopulateUser (bearerToken) {
50   return this.findOne({ accessToken: bearerToken }).populate('user').exec()
51 }
52
53 function getByRefreshToken (refreshToken) {
54   return this.findOne({ refreshToken: refreshToken }).exec()
55 }