]>
Commit | Line | Data |
---|---|---|
1 | const mongoose = require('mongoose') | |
2 | ||
3 | const logger = require('../helpers/logger') | |
4 | ||
5 | // --------------------------------------------------------------------------- | |
6 | ||
7 | const oAuthTokensSchema = mongoose.Schema({ | |
8 | accessToken: String, | |
9 | accessTokenExpiresOn: Date, | |
10 | client: { type: mongoose.Schema.Types.ObjectId, ref: 'oAuthClients' }, | |
11 | refreshToken: String, | |
12 | refreshTokenExpiresOn: Date, | |
13 | user: { type: mongoose.Schema.Types.ObjectId, ref: 'users' } | |
14 | }) | |
15 | const OAuthTokensDB = mongoose.model('oAuthTokens', oAuthTokensSchema) | |
16 | ||
17 | const oAuthClientsSchema = mongoose.Schema({ | |
18 | clientSecret: String, | |
19 | grants: Array, | |
20 | redirectUris: Array | |
21 | }) | |
22 | const OAuthClientsDB = mongoose.model('oAuthClients', oAuthClientsSchema) | |
23 | ||
24 | const usersSchema = mongoose.Schema({ | |
25 | password: String, | |
26 | username: String | |
27 | }) | |
28 | const UsersDB = mongoose.model('users', usersSchema) | |
29 | ||
30 | // --------------------------------------------------------------------------- | |
31 | ||
32 | const Users = { | |
33 | createClient: createClient, | |
34 | createUser: createUser, | |
35 | getAccessToken: getAccessToken, | |
36 | getClient: getClient, | |
37 | getClients: getClients, | |
38 | getFirstClient: getFirstClient, | |
39 | getRefreshToken: getRefreshToken, | |
40 | getUser: getUser, | |
41 | getUsers: getUsers, | |
42 | saveToken: saveToken | |
43 | } | |
44 | ||
45 | function createClient (secret, grants, callback) { | |
46 | logger.debug('Creating client.') | |
47 | ||
48 | const mongoId = new mongoose.mongo.ObjectID() | |
49 | return OAuthClientsDB.create({ _id: mongoId, clientSecret: secret, grants: grants }, function (err) { | |
50 | if (err) return callback(err) | |
51 | ||
52 | return callback(null, mongoId) | |
53 | }) | |
54 | } | |
55 | ||
56 | function createUser (username, password, callback) { | |
57 | logger.debug('Creating user.') | |
58 | ||
59 | return UsersDB.create({ username: username, password: password }, callback) | |
60 | } | |
61 | ||
62 | function getAccessToken (bearerToken, callback) { | |
63 | logger.debug('Getting access token (bearerToken: ' + bearerToken + ').') | |
64 | ||
65 | return OAuthTokensDB.findOne({ accessToken: bearerToken }).populate('user') | |
66 | } | |
67 | ||
68 | function getFirstClient (callback) { | |
69 | return OAuthClientsDB.findOne({}, callback) | |
70 | } | |
71 | ||
72 | function getClient (clientId, clientSecret) { | |
73 | logger.debug('Getting Client (clientId: ' + clientId + ', clientSecret: ' + clientSecret + ').') | |
74 | ||
75 | // TODO req validator | |
76 | const mongoId = new mongoose.mongo.ObjectID(clientId) | |
77 | return OAuthClientsDB.findOne({ _id: mongoId, clientSecret: clientSecret }) | |
78 | } | |
79 | ||
80 | function getClients (callback) { | |
81 | return OAuthClientsDB.find(callback) | |
82 | } | |
83 | ||
84 | function getRefreshToken (refreshToken) { | |
85 | logger.debug('Getting RefreshToken (refreshToken: ' + refreshToken + ').') | |
86 | ||
87 | return OAuthTokensDB.findOne({ refreshToken: refreshToken }) | |
88 | } | |
89 | ||
90 | function getUser (username, password) { | |
91 | logger.debug('Getting User (username: ' + username + ', password: ' + password + ').') | |
92 | return UsersDB.findOne({ username: username, password: password }) | |
93 | } | |
94 | ||
95 | function getUsers (callback) { | |
96 | return UsersDB.find(callback) | |
97 | } | |
98 | ||
99 | function saveToken (token, client, user) { | |
100 | logger.debug('Saving token for client ' + client.id + ' and user ' + user.id + '.') | |
101 | ||
102 | const tokenToCreate = { | |
103 | accessToken: token.accessToken, | |
104 | accessTokenExpiresOn: token.accessTokenExpiresOn, | |
105 | client: client.id, | |
106 | refreshToken: token.refreshToken, | |
107 | refreshTokenExpiresOn: token.refreshTokenExpiresOn, | |
108 | user: user.id | |
109 | } | |
110 | ||
111 | return OAuthTokensDB.create(tokenToCreate, function (err, tokenCreated) { | |
112 | if (err) throw err // node-oauth2-server library uses Promise.try | |
113 | ||
114 | tokenCreated.client = client | |
115 | tokenCreated.user = user | |
116 | ||
117 | return tokenCreated | |
118 | }) | |
119 | } | |
120 | ||
121 | // --------------------------------------------------------------------------- | |
122 | ||
123 | module.exports = Users |