From 69b0a27cbbd69ca019eb7db5f917b1dd06dc82cd Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Fri, 1 Jul 2016 16:03:53 +0200 Subject: OAuth/User models refractoring -> use mongoose api --- server/lib/oauth-model.js | 70 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 server/lib/oauth-model.js (limited to 'server/lib') diff --git a/server/lib/oauth-model.js b/server/lib/oauth-model.js new file mode 100644 index 000000000..f4fd9805a --- /dev/null +++ b/server/lib/oauth-model.js @@ -0,0 +1,70 @@ +const mongoose = require('mongoose') + +const logger = require('../helpers/logger') + +const OAuthClient = mongoose.model('OAuthClient') +const OAuthToken = mongoose.model('OAuthToken') +const User = mongoose.model('User') + +// See https://github.com/oauthjs/node-oauth2-server/wiki/Model-specification for the model specifications +const OAuthModel = { + getAccessToken: getAccessToken, + getClient: getClient, + getRefreshToken: getRefreshToken, + getUser: getUser, + saveToken: saveToken +} + +// --------------------------------------------------------------------------- + +function getAccessToken (bearerToken) { + logger.debug('Getting access token (bearerToken: ' + bearerToken + ').') + + return OAuthToken.loadByTokenAndPopulateUser(bearerToken) +} + +function getClient (clientId, clientSecret) { + logger.debug('Getting Client (clientId: ' + clientId + ', clientSecret: ' + clientSecret + ').') + + // TODO req validator + const mongoId = new mongoose.mongo.ObjectID(clientId) + return OAuthClient.loadByIdAndSecret(mongoId, clientSecret) +} + +function getRefreshToken (refreshToken) { + logger.debug('Getting RefreshToken (refreshToken: ' + refreshToken + ').') + + return OAuthToken.loadByRefreshToken(refreshToken) +} + +function getUser (username, password) { + logger.debug('Getting User (username: ' + username + ', password: ' + password + ').') + + return User.loadByUsernameAndPassword(username, password) +} + +function saveToken (token, client, user) { + logger.debug('Saving token for client ' + client.id + ' and user ' + user.id + '.') + + const tokenObj = new OAuthToken({ + accessToken: token.accessToken, + accessTokenExpiresOn: token.accessTokenExpiresOn, + client: client.id, + refreshToken: token.refreshToken, + refreshTokenExpiresOn: token.refreshTokenExpiresOn, + user: user.id + }) + + return tokenObj.save(function (err, tokenCreated) { + if (err) throw err // node-oauth2-server library uses Promise.try + + tokenCreated.client = client + tokenCreated.user = user + + return tokenCreated + }) +} + +// --------------------------------------------------------------------------- + +module.exports = OAuthModel -- cgit v1.2.3