]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/models/users.js
Add authentications for routes that need it and adapts the tests
[github/Chocobozzz/PeerTube.git] / server / models / users.js
CommitLineData
9457bf88
C
1const mongoose = require('mongoose')
2
3const logger = require('../helpers/logger')
4
5// ---------------------------------------------------------------------------
6
7const 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})
15const OAuthTokensDB = mongoose.model('oAuthTokens', oAuthTokensSchema)
16
17const oAuthClientsSchema = mongoose.Schema({
18 clientSecret: String,
19 grants: Array,
20 redirectUris: Array
21})
22const OAuthClientsDB = mongoose.model('oAuthClients', oAuthClientsSchema)
23
24const usersSchema = mongoose.Schema({
25 password: String,
26 username: String
27})
28const UsersDB = mongoose.model('users', usersSchema)
29
30// ---------------------------------------------------------------------------
31
32const 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
44function 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
55function createUser (username, password, callback) {
56 logger.debug('Creating user.')
57
58 return UsersDB.create({ username: username, password: password }, callback)
59}
60
61function getAccessToken (bearerToken, callback) {
62 logger.debug('Getting access token (bearerToken: ' + bearerToken + ').')
63
64 return OAuthTokensDB.findOne({ accessToken: bearerToken }).populate('user')
65}
66
67function 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
75function getClients (callback) {
76 return OAuthClientsDB.find(callback)
77}
78
9457bf88
C
79function getRefreshToken (refreshToken) {
80 logger.debug('Getting RefreshToken (refreshToken: ' + refreshToken + ').')
81
82 return OAuthTokensDB.findOne({ refreshToken: refreshToken })
83}
84
85function getUser (username, password) {
86 logger.debug('Getting User (username: ' + username + ', password: ' + password + ').')
87 return UsersDB.findOne({ username: username, password: password })
88}
89
37dc07b2
C
90function getUsers (callback) {
91 return UsersDB.find(callback)
92}
93
9457bf88
C
94function 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
118module.exports = Users