]>
git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server/lib/oauth-model.js
1 const mongoose
= require('mongoose')
3 const logger
= require('../helpers/logger')
5 const OAuthClient
= mongoose
.model('OAuthClient')
6 const OAuthToken
= mongoose
.model('OAuthToken')
7 const User
= mongoose
.model('User')
9 // See https://github.com/oauthjs/node-oauth2-server/wiki/Model-specification for the model specifications
11 getAccessToken: getAccessToken
,
13 getRefreshToken: getRefreshToken
,
15 revokeToken: revokeToken
,
19 // ---------------------------------------------------------------------------
21 function getAccessToken (bearerToken
) {
22 logger
.debug('Getting access token (bearerToken: ' + bearerToken
+ ').')
24 return OAuthToken
.getByTokenAndPopulateUser(bearerToken
)
27 function getClient (clientId
, clientSecret
) {
28 logger
.debug('Getting Client (clientId: ' + clientId
+ ', clientSecret: ' + clientSecret
+ ').')
31 const mongoId
= new mongoose
.mongo
.ObjectID(clientId
)
32 return OAuthClient
.getByIdAndSecret(mongoId
, clientSecret
)
35 function getRefreshToken (refreshToken
, callback
) {
36 logger
.debug('Getting RefreshToken (refreshToken: ' + refreshToken
+ ').')
38 return OAuthToken
.getByRefreshTokenAndPopulateClient(refreshToken
)
41 function getUser (username
, password
) {
42 logger
.debug('Getting User (username: ' + username
+ ', password: ' + password
+ ').')
44 return User
.getByUsername(username
).then(function (user
) {
45 if (!user
) return null
47 // We need to return a promise
48 return new Promise(function (resolve
, reject
) {
49 return user
.isPasswordMatch(password
, function (err
, isPasswordMatch
) {
50 if (err
) return reject(err
)
52 if (isPasswordMatch
=== true) {
62 function revokeToken (token
) {
63 return OAuthToken
.getByRefreshToken(token
.refreshToken
).then(function (tokenDB
) {
64 if (tokenDB
) tokenDB
.remove()
67 * Thanks to https://github.com/manjeshpv/node-oauth2-server-implementation/blob/master/components/oauth/mongo-models.js
68 * "As per the discussion we need set older date
69 * revokeToken will expected return a boolean in future version
70 * https://github.com/oauthjs/node-oauth2-server/pull/274
71 * https://github.com/oauthjs/node-oauth2-server/issues/290"
73 const expiredToken
= tokenDB
74 expiredToken
.refreshTokenExpiresAt
= new Date('2015-05-28T06:59:53.000Z')
79 function saveToken (token
, client
, user
) {
80 logger
.debug('Saving token ' + token
.accessToken
+ ' for client ' + client
.id
+ ' and user ' + user
.id
+ '.')
82 const tokenObj
= new OAuthToken({
83 accessToken: token
.accessToken
,
84 accessTokenExpiresAt: token
.accessTokenExpiresAt
,
86 refreshToken: token
.refreshToken
,
87 refreshTokenExpiresAt: token
.refreshTokenExpiresAt
,
91 return tokenObj
.save().then(function (tokenCreated
) {
92 tokenCreated
.client
= client
93 tokenCreated
.user
= user
95 }).catch(function (err
) {
100 // ---------------------------------------------------------------------------
102 module
.exports
= OAuthModel