1 const mongoose = require('mongoose')
3 const logger = require('../helpers/logger')
5 // ---------------------------------------------------------------------------
7 const oAuthTokensSchema = mongoose.Schema({
9 accessTokenExpiresOn: Date,
10 client: { type: mongoose.Schema.Types.ObjectId, ref: 'oAuthClients' },
12 refreshTokenExpiresOn: Date,
13 user: { type: mongoose.Schema.Types.ObjectId, ref: 'users' }
15 const OAuthTokensDB = mongoose.model('oAuthTokens', oAuthTokensSchema)
17 const oAuthClientsSchema = mongoose.Schema({
22 const OAuthClientsDB = mongoose.model('oAuthClients', oAuthClientsSchema)
24 const usersSchema = mongoose.Schema({
28 const UsersDB = mongoose.model('users', usersSchema)
30 // ---------------------------------------------------------------------------
33 createClient: createClient,
34 createUser: createUser,
35 getAccessToken: getAccessToken,
37 getRefreshToken: getRefreshToken,
42 function createClient (secret, grants, callback) {
43 logger.debug('Creating client.')
45 const mongo_id = new mongoose.mongo.ObjectID()
46 return OAuthClientsDB.create({ _id: mongo_id, clientSecret: secret, grants: grants }, function (err) {
47 if (err) return callback(err)
49 return callback(null, mongo_id)
53 function createUser (username, password, callback) {
54 logger.debug('Creating user.')
56 return UsersDB.create({ username: username, password: password }, callback)
59 function getAccessToken (bearerToken, callback) {
60 logger.debug('Getting access token (bearerToken: ' + bearerToken + ').')
62 return OAuthTokensDB.findOne({ accessToken: bearerToken }).populate('user')
65 function getClient (clientId, clientSecret) {
66 logger.debug('Getting Client (clientId: ' + clientId + ', clientSecret: ' + clientSecret + ').')
69 const mongo_id = new mongoose.mongo.ObjectID(clientId)
70 return OAuthClientsDB.findOne({ _id: mongo_id, clientSecret: clientSecret })
73 function getRefreshToken (refreshToken) {
74 logger.debug('Getting RefreshToken (refreshToken: ' + refreshToken + ').')
76 return OAuthTokensDB.findOne({ refreshToken: refreshToken })
79 function getUser (username, password) {
80 logger.debug('Getting User (username: ' + username + ', password: ' + password + ').')
81 return UsersDB.findOne({ username: username, password: password })
84 function saveToken (token, client, user) {
85 logger.debug('Saving token for client ' + client.id + ' and user ' + user.id + '.')
87 const token_to_create = {
88 accessToken: token.accessToken,
89 accessTokenExpiresOn: token.accessTokenExpiresOn,
91 refreshToken: token.refreshToken,
92 refreshTokenExpiresOn: token.refreshTokenExpiresOn,
96 return OAuthTokensDB.create(token_to_create, function (err, token_created) {
97 if (err) throw err // node-oauth2-server library use Promise.try
99 token_created.client = client
100 token_created.user = user
106 // ---------------------------------------------------------------------------
108 module.exports = Users