]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server/controllers/api/users.ts
Update systemd service template
[github/Chocobozzz/PeerTube.git] / server / controllers / api / users.ts
1 import * as express from 'express'
2 import { waterfall } from 'async'
3
4 import { database as db } from '../../initializers/database'
5 import { CONFIG, USER_ROLES } from '../../initializers'
6 import { logger, getFormatedObjects } from '../../helpers'
7 import {
8 authenticate,
9 ensureIsAdmin,
10 usersAddValidator,
11 usersUpdateValidator,
12 usersRemoveValidator,
13 usersVideoRatingValidator,
14 paginationValidator,
15 setPagination,
16 usersSortValidator,
17 setUsersSort,
18 token
19 } from '../../middlewares'
20 import { UserVideoRate as FormatedUserVideoRate } from '../../../shared'
21
22 const usersRouter = express.Router()
23
24 usersRouter.get('/me',
25 authenticate,
26 getUserInformation
27 )
28
29 usersRouter.get('/me/videos/:videoId/rating',
30 authenticate,
31 usersVideoRatingValidator,
32 getUserVideoRating
33 )
34
35 usersRouter.get('/',
36 paginationValidator,
37 usersSortValidator,
38 setUsersSort,
39 setPagination,
40 listUsers
41 )
42
43 usersRouter.post('/',
44 authenticate,
45 ensureIsAdmin,
46 usersAddValidator,
47 createUser
48 )
49
50 usersRouter.post('/register',
51 ensureRegistrationEnabled,
52 usersAddValidator,
53 createUser
54 )
55
56 usersRouter.put('/:id',
57 authenticate,
58 usersUpdateValidator,
59 updateUser
60 )
61
62 usersRouter.delete('/:id',
63 authenticate,
64 ensureIsAdmin,
65 usersRemoveValidator,
66 removeUser
67 )
68
69 usersRouter.post('/token', token, success)
70 // TODO: Once https://github.com/oauthjs/node-oauth2-server/pull/289 is merged, implement revoke token route
71
72 // ---------------------------------------------------------------------------
73
74 export {
75 usersRouter
76 }
77
78 // ---------------------------------------------------------------------------
79
80 function ensureRegistrationEnabled (req: express.Request, res: express.Response, next: express.NextFunction) {
81 const registrationEnabled = CONFIG.SIGNUP.ENABLED
82
83 if (registrationEnabled === true) {
84 return next()
85 }
86
87 return res.status(400).send('User registration is not enabled.')
88 }
89
90 function createUser (req: express.Request, res: express.Response, next: express.NextFunction) {
91 const user = db.User.build({
92 username: req.body.username,
93 password: req.body.password,
94 email: req.body.email,
95 displayNSFW: false,
96 role: USER_ROLES.USER
97 })
98
99 user.save().asCallback(function (err) {
100 if (err) return next(err)
101
102 return res.type('json').status(204).end()
103 })
104 }
105
106 function getUserInformation (req: express.Request, res: express.Response, next: express.NextFunction) {
107 db.User.loadByUsername(res.locals.oauth.token.user.username, function (err, user) {
108 if (err) return next(err)
109
110 return res.json(user.toFormatedJSON())
111 })
112 }
113
114 function getUserVideoRating (req: express.Request, res: express.Response, next: express.NextFunction) {
115 const videoId = '' + req.params.videoId
116 const userId = +res.locals.oauth.token.User.id
117
118 db.UserVideoRate.load(userId, videoId, null, function (err, ratingObj) {
119 if (err) return next(err)
120
121 const rating = ratingObj ? ratingObj.type : 'none'
122
123 const json: FormatedUserVideoRate = {
124 videoId,
125 rating
126 }
127 res.json(json)
128 })
129 }
130
131 function listUsers (req: express.Request, res: express.Response, next: express.NextFunction) {
132 db.User.listForApi(req.query.start, req.query.count, req.query.sort, function (err, usersList, usersTotal) {
133 if (err) return next(err)
134
135 res.json(getFormatedObjects(usersList, usersTotal))
136 })
137 }
138
139 function removeUser (req: express.Request, res: express.Response, next: express.NextFunction) {
140 waterfall([
141 function loadUser (callback) {
142 db.User.loadById(req.params.id, callback)
143 },
144
145 function deleteUser (user, callback) {
146 user.destroy().asCallback(callback)
147 }
148 ], function andFinally (err) {
149 if (err) {
150 logger.error('Errors when removed the user.', { error: err })
151 return next(err)
152 }
153
154 return res.sendStatus(204)
155 })
156 }
157
158 function updateUser (req: express.Request, res: express.Response, next: express.NextFunction) {
159 db.User.loadByUsername(res.locals.oauth.token.user.username, function (err, user) {
160 if (err) return next(err)
161
162 if (req.body.password) user.password = req.body.password
163 if (req.body.displayNSFW !== undefined) user.displayNSFW = req.body.displayNSFW
164
165 user.save().asCallback(function (err) {
166 if (err) return next(err)
167
168 return res.sendStatus(204)
169 })
170 })
171 }
172
173 function success (req: express.Request, res: express.Response, next: express.NextFunction) {
174 res.end()
175 }