]>
git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server/controllers/api/v1/users.js
3 const each
= require('async/each')
4 const config
= require('config')
5 const express
= require('express')
6 const mongoose
= require('mongoose')
7 const waterfall
= require('async/waterfall')
9 const constants
= require('../../../initializers/constants')
10 const friends
= require('../../../lib/friends')
11 const logger
= require('../../../helpers/logger')
12 const middlewares
= require('../../../middlewares')
13 const admin
= middlewares
.admin
14 const oAuth
= middlewares
.oauth
15 const validatorsUsers
= middlewares
.validators
.users
17 const Client
= mongoose
.model('OAuthClient')
18 const User
= mongoose
.model('User')
19 const Video
= mongoose
.model('Video')
21 const router
= express
.Router()
23 router
.get('/', listUsers
)
28 validatorsUsers
.usersAdd
,
34 validatorsUsers
.usersUpdate
,
38 router
.delete('/:username',
41 validatorsUsers
.usersRemove
,
44 router
.get('/client', getAngularClient
)
45 router
.post('/token', oAuth
.token
, success
)
46 // TODO: Once https://github.com/oauthjs/node-oauth2-server/pull/289 is merged, implement revoke token route
48 // ---------------------------------------------------------------------------
50 module
.exports
= router
52 // ---------------------------------------------------------------------------
54 function createUser (req
, res
, next
) {
55 const user
= new User({
56 username: req
.body
.username
,
57 password: req
.body
.password
,
58 role: constants
.USER_ROLES
.USER
61 user
.save(function (err
, createdUser
) {
62 if (err
) return next(err
)
64 return res
.type('json').status(204).end()
68 function getAngularClient (req
, res
, next
) {
69 const serverHost
= config
.get('webserver.host')
70 const serverPort
= config
.get('webserver.port')
71 let headerHostShouldBe
= serverHost
72 if (serverPort
!== 80 && serverPort
!== 443) {
73 headerHostShouldBe
+= ':' + serverPort
76 // Don't make this check if this is a test instance
77 if (process
.env
.NODE_ENV
!== 'test' && req
.get('host') !== headerHostShouldBe
) {
78 return res
.type('json').status(403).end()
81 Client
.loadFirstClient(function (err
, client
) {
82 if (err
) return next(err
)
83 if (!client
) return next(new Error('No client available.'))
86 client_id: client
._id
,
87 client_secret: client
.clientSecret
92 function listUsers (req
, res
, next
) {
93 User
.list(function (err
, usersList
) {
94 if (err
) return next(err
)
96 res
.json(getFormatedUsers(usersList
))
100 function removeUser (req
, res
, next
) {
102 function getUser (callback
) {
103 User
.loadByUsername(req
.params
.username
, callback
)
106 function getVideos (user
, callback
) {
107 Video
.listOwnedByAuthor(user
.username
, function (err
, videos
) {
108 return callback(err
, user
, videos
)
112 function removeVideosFromDB (user
, videos
, callback
) {
113 each(videos
, function (video
, callbackEach
) {
114 video
.remove(callbackEach
)
116 return callback(err
, user
, videos
)
120 function sendInformationToFriends (user
, videos
, callback
) {
121 videos
.forEach(function (video
) {
124 magnetUri: video
.magnetUri
127 friends
.removeVideoToFriends(params
)
130 return callback(null, user
)
133 function removeUserFromDB (user
, callback
) {
134 user
.remove(callback
)
136 ], function andFinally (err
) {
138 logger
.error('Errors when removed the user.', { error: err
})
142 return res
.type('json').status(204).end()
146 function updateUser (req
, res
, next
) {
147 User
.loadByUsername(res
.locals
.oauth
.token
.user
.username
, function (err
, user
) {
148 if (err
) return next(err
)
150 user
.password
= req
.body
.password
151 user
.save(function (err
) {
152 if (err
) return next(err
)
154 return res
.json('json').status(204).end()
159 function success (req
, res
, next
) {
163 // ---------------------------------------------------------------------------
165 function getFormatedUsers (users
) {
166 const formatedUsers
= []
168 users
.forEach(function (user
) {
169 formatedUsers
.push(user
.toFormatedJSON())