]>
Commit | Line | Data |
---|---|---|
9457bf88 C |
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, | |
37dc07b2 | 37 | getClients: getClients, |
9457bf88 C |
38 | getRefreshToken: getRefreshToken, |
39 | getUser: getUser, | |
37dc07b2 | 40 | getUsers: getUsers, |
9457bf88 C |
41 | saveToken: saveToken |
42 | } | |
43 | ||
44 | function createClient (secret, grants, callback) { | |
45 | logger.debug('Creating client.') | |
46 | ||
47 | const mongo_id = new mongoose.mongo.ObjectID() | |
48 | return OAuthClientsDB.create({ _id: mongo_id, clientSecret: secret, grants: grants }, function (err) { | |
49 | if (err) return callback(err) | |
50 | ||
51 | return callback(null, mongo_id) | |
52 | }) | |
53 | } | |
54 | ||
55 | function createUser (username, password, callback) { | |
56 | logger.debug('Creating user.') | |
57 | ||
58 | return UsersDB.create({ username: username, password: password }, callback) | |
59 | } | |
60 | ||
61 | function getAccessToken (bearerToken, callback) { | |
62 | logger.debug('Getting access token (bearerToken: ' + bearerToken + ').') | |
63 | ||
64 | return OAuthTokensDB.findOne({ accessToken: bearerToken }).populate('user') | |
65 | } | |
66 | ||
67 | function getClient (clientId, clientSecret) { | |
68 | logger.debug('Getting Client (clientId: ' + clientId + ', clientSecret: ' + clientSecret + ').') | |
69 | ||
70 | // TODO req validator | |
71 | const mongo_id = new mongoose.mongo.ObjectID(clientId) | |
72 | return OAuthClientsDB.findOne({ _id: mongo_id, clientSecret: clientSecret }) | |
73 | } | |
74 | ||
37dc07b2 C |
75 | function getClients (callback) { |
76 | return OAuthClientsDB.find(callback) | |
77 | } | |
78 | ||
9457bf88 C |
79 | function getRefreshToken (refreshToken) { |
80 | logger.debug('Getting RefreshToken (refreshToken: ' + refreshToken + ').') | |
81 | ||
82 | return OAuthTokensDB.findOne({ refreshToken: refreshToken }) | |
83 | } | |
84 | ||
85 | function getUser (username, password) { | |
86 | logger.debug('Getting User (username: ' + username + ', password: ' + password + ').') | |
87 | return UsersDB.findOne({ username: username, password: password }) | |
88 | } | |
89 | ||
37dc07b2 C |
90 | function getUsers (callback) { |
91 | return UsersDB.find(callback) | |
92 | } | |
93 | ||
9457bf88 C |
94 | function saveToken (token, client, user) { |
95 | logger.debug('Saving token for client ' + client.id + ' and user ' + user.id + '.') | |
96 | ||
97 | const token_to_create = { | |
98 | accessToken: token.accessToken, | |
99 | accessTokenExpiresOn: token.accessTokenExpiresOn, | |
100 | client: client.id, | |
101 | refreshToken: token.refreshToken, | |
102 | refreshTokenExpiresOn: token.refreshTokenExpiresOn, | |
103 | user: user.id | |
104 | } | |
105 | ||
106 | return OAuthTokensDB.create(token_to_create, function (err, token_created) { | |
0c1cbbfe | 107 | if (err) throw err // node-oauth2-server library uses Promise.try |
9457bf88 C |
108 | |
109 | token_created.client = client | |
110 | token_created.user = user | |
111 | ||
112 | return token_created | |
113 | }) | |
114 | } | |
115 | ||
116 | // --------------------------------------------------------------------------- | |
117 | ||
118 | module.exports = Users |