]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/controllers/api/v1/users.js
Server: move clients in its own file
[github/Chocobozzz/PeerTube.git] / server / controllers / api / v1 / users.js
CommitLineData
9457bf88
C
1'use strict'
2
9bd26629 3const each = require('async/each')
0c1cbbfe 4const express = require('express')
9bd26629
C
5const mongoose = require('mongoose')
6const waterfall = require('async/waterfall')
fc51fde0 7
9bd26629
C
8const constants = require('../../../initializers/constants')
9const friends = require('../../../lib/friends')
10const logger = require('../../../helpers/logger')
11const middlewares = require('../../../middlewares')
12const admin = middlewares.admin
13const oAuth = middlewares.oauth
14const validatorsUsers = middlewares.validators.users
9457bf88 15
9bd26629
C
16const User = mongoose.model('User')
17const Video = mongoose.model('Video')
9457bf88
C
18
19const router = express.Router()
20
9bd26629
C
21router.get('/', listUsers)
22
23router.post('/',
24 oAuth.authenticate,
25 admin.ensureIsAdmin,
26 validatorsUsers.usersAdd,
27 createUser
28)
29
30router.put('/:id',
31 oAuth.authenticate,
32 validatorsUsers.usersUpdate,
33 updateUser
34)
35
36router.delete('/:username',
37 oAuth.authenticate,
38 admin.ensureIsAdmin,
39 validatorsUsers.usersRemove,
40 removeUser
41)
6606150c 42
69b0a27c 43router.post('/token', oAuth.token, success)
9bd26629 44// TODO: Once https://github.com/oauthjs/node-oauth2-server/pull/289 is merged, implement revoke token route
9457bf88
C
45
46// ---------------------------------------------------------------------------
47
48module.exports = router
49
50// ---------------------------------------------------------------------------
51
9bd26629
C
52function createUser (req, res, next) {
53 const user = new User({
54 username: req.body.username,
55 password: req.body.password,
56 role: constants.USER_ROLES.USER
57 })
58
59 user.save(function (err, createdUser) {
60 if (err) return next(err)
61
62 return res.type('json').status(204).end()
63 })
64}
65
9bd26629
C
66function listUsers (req, res, next) {
67 User.list(function (err, usersList) {
68 if (err) return next(err)
69
70 res.json(getFormatedUsers(usersList))
71 })
72}
73
74function removeUser (req, res, next) {
75 waterfall([
76 function getUser (callback) {
77 User.loadByUsername(req.params.username, callback)
78 },
79
80 function getVideos (user, callback) {
81 Video.listOwnedByAuthor(user.username, function (err, videos) {
82 return callback(err, user, videos)
83 })
84 },
85
86 function removeVideosFromDB (user, videos, callback) {
87 each(videos, function (video, callbackEach) {
88 video.remove(callbackEach)
89 }, function (err) {
90 return callback(err, user, videos)
91 })
92 },
93
94 function sendInformationToFriends (user, videos, callback) {
95 videos.forEach(function (video) {
96 const params = {
97 name: video.name,
98 magnetUri: video.magnetUri
99 }
100
101 friends.removeVideoToFriends(params)
102 })
103
104 return callback(null, user)
105 },
106
107 function removeUserFromDB (user, callback) {
108 user.remove(callback)
109 }
110 ], function andFinally (err) {
111 if (err) {
112 logger.error('Errors when removed the user.', { error: err })
113 return next(err)
114 }
115
116 return res.type('json').status(204).end()
117 })
118}
119
120function updateUser (req, res, next) {
121 User.loadByUsername(res.locals.oauth.token.user.username, function (err, user) {
122 if (err) return next(err)
123
124 user.password = req.body.password
125 user.save(function (err) {
126 if (err) return next(err)
127
128 return res.json('json').status(204).end()
129 })
130 })
131}
132
9457bf88
C
133function success (req, res, next) {
134 res.end()
135}
9bd26629
C
136
137// ---------------------------------------------------------------------------
138
139function getFormatedUsers (users) {
140 const formatedUsers = []
141
142 users.forEach(function (user) {
143 formatedUsers.push(user.toFormatedJSON())
144 })
145
146 return {
147 data: formatedUsers
148 }
149}