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