1 import * as express from 'express'
2 import { waterfall } from 'async'
4 import { database as db } from '../../initializers/database'
5 import { CONFIG, USER_ROLES } from '../../initializers'
6 import { logger, getFormatedObjects } from '../../helpers'
13 usersVideoRatingValidator,
19 } from '../../middlewares'
20 import { UserVideoRate as FormatedUserVideoRate } from '../../../shared'
22 const usersRouter = express.Router()
24 usersRouter.get('/me',
29 usersRouter.get('/me/videos/:videoId/rating',
31 usersVideoRatingValidator,
50 usersRouter.post('/register',
51 ensureRegistrationEnabled,
56 usersRouter.put('/:id',
62 usersRouter.delete('/:id',
69 usersRouter.post('/token', token, success)
70 // TODO: Once https://github.com/oauthjs/node-oauth2-server/pull/289 is merged, implement revoke token route
72 // ---------------------------------------------------------------------------
78 // ---------------------------------------------------------------------------
80 function ensureRegistrationEnabled (req: express.Request, res: express.Response, next: express.NextFunction) {
81 const registrationEnabled = CONFIG.SIGNUP.ENABLED
83 if (registrationEnabled === true) {
87 return res.status(400).send('User registration is not enabled.')
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,
99 user.save().asCallback(function (err) {
100 if (err) return next(err)
102 return res.type('json').status(204).end()
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)
110 return res.json(user.toFormatedJSON())
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
118 db.UserVideoRate.load(userId, videoId, null, function (err, ratingObj) {
119 if (err) return next(err)
121 const rating = ratingObj ? ratingObj.type : 'none'
123 const json: FormatedUserVideoRate = {
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)
135 res.json(getFormatedObjects(usersList, usersTotal))
139 function removeUser (req: express.Request, res: express.Response, next: express.NextFunction) {
141 function loadUser (callback) {
142 db.User.loadById(req.params.id, callback)
145 function deleteUser (user, callback) {
146 user.destroy().asCallback(callback)
148 ], function andFinally (err) {
150 logger.error('Errors when removed the user.', { error: err })
154 return res.sendStatus(204)
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)
162 if (req.body.password) user.password = req.body.password
163 if (req.body.displayNSFW !== undefined) user.displayNSFW = req.body.displayNSFW
165 user.save().asCallback(function (err) {
166 if (err) return next(err)
168 return res.sendStatus(204)
173 function success (req: express.Request, res: express.Response, next: express.NextFunction) {