]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/controllers/api/users.ts
Add ability to limit user registrations
[github/Chocobozzz/PeerTube.git] / server / controllers / api / users.ts
index 1e9e65689ea99b02a21762d46663bae4c5991b6d..f50dbc9a31a3e31833eb39fce629f08b4f291bcc 100644 (file)
@@ -1,12 +1,12 @@
 import * as express from 'express'
-import { waterfall } from 'async'
 
 import { database as db } from '../../initializers/database'
-import { CONFIG, USER_ROLES } from '../../initializers'
+import { USER_ROLES } from '../../initializers'
 import { logger, getFormatedObjects } from '../../helpers'
 import {
   authenticate,
   ensureIsAdmin,
+  ensureUserRegistrationAllowed,
   usersAddValidator,
   usersUpdateValidator,
   usersRemoveValidator,
@@ -17,7 +17,7 @@ import {
   setUsersSort,
   token
 } from '../../middlewares'
-import { UserVideoRate as FormatedUserVideoRate } from '../../../shared'
+import { UserVideoRate as FormatedUserVideoRate, UserCreate, UserUpdate } from '../../../shared'
 
 const usersRouter = express.Router()
 
@@ -48,7 +48,7 @@ usersRouter.post('/',
 )
 
 usersRouter.post('/register',
-  ensureRegistrationEnabled,
+  ensureUserRegistrationAllowed,
   usersAddValidator,
   createUser
 )
@@ -77,97 +77,74 @@ export {
 
 // ---------------------------------------------------------------------------
 
-function ensureRegistrationEnabled (req: express.Request, res: express.Response, next: express.NextFunction) {
-  const registrationEnabled = CONFIG.SIGNUP.ENABLED
-
-  if (registrationEnabled === true) {
-    return next()
-  }
-
-  return res.status(400).send('User registration is not enabled.')
-}
-
 function createUser (req: express.Request, res: express.Response, next: express.NextFunction) {
+  const body: UserCreate = req.body
+
   const user = db.User.build({
-    username: req.body.username,
-    password: req.body.password,
-    email: req.body.email,
+    username: body.username,
+    password: body.password,
+    email: body.email,
     displayNSFW: false,
     role: USER_ROLES.USER
   })
 
-  user.save().asCallback(function (err) {
-    if (err) return next(err)
-
-    return res.type('json').status(204).end()
-  })
+  user.save()
+    .then(() => res.type('json').status(204).end())
+    .catch(err => next(err))
 }
 
 function getUserInformation (req: express.Request, res: express.Response, next: express.NextFunction) {
-  db.User.loadByUsername(res.locals.oauth.token.user.username, function (err, user) {
-    if (err) return next(err)
-
-    return res.json(user.toFormatedJSON())
-  })
+  db.User.loadByUsername(res.locals.oauth.token.user.username)
+    .then(user => res.json(user.toFormatedJSON()))
+    .catch(err => next(err))
 }
 
 function getUserVideoRating (req: express.Request, res: express.Response, next: express.NextFunction) {
-  const videoId = '' + req.params.videoId
+  const videoId = +req.params.videoId
   const userId = +res.locals.oauth.token.User.id
 
-  db.UserVideoRate.load(userId, videoId, null, function (err, ratingObj) {
-    if (err) return next(err)
-
-    const rating = ratingObj ? ratingObj.type : 'none'
-
-    const json: FormatedUserVideoRate = {
-      videoId,
-      rating
-    }
-    res.json(json)
-  })
+  db.UserVideoRate.load(userId, videoId, null)
+    .then(ratingObj => {
+      const rating = ratingObj ? ratingObj.type : 'none'
+      const json: FormatedUserVideoRate = {
+        videoId,
+        rating
+      }
+      res.json(json)
+    })
+    .catch(err => next(err))
 }
 
 function listUsers (req: express.Request, res: express.Response, next: express.NextFunction) {
-  db.User.listForApi(req.query.start, req.query.count, req.query.sort, function (err, usersList, usersTotal) {
-    if (err) return next(err)
-
-    res.json(getFormatedObjects(usersList, usersTotal))
-  })
+  db.User.listForApi(req.query.start, req.query.count, req.query.sort)
+    .then(resultList => {
+      res.json(getFormatedObjects(resultList.data, resultList.total))
+    })
+    .catch(err => next(err))
 }
 
 function removeUser (req: express.Request, res: express.Response, next: express.NextFunction) {
-  waterfall([
-    function loadUser (callback) {
-      db.User.loadById(req.params.id, callback)
-    },
-
-    function deleteUser (user, callback) {
-      user.destroy().asCallback(callback)
-    }
-  ], function andFinally (err) {
-    if (err) {
-      logger.error('Errors when removed the user.', { error: err })
+  db.User.loadById(req.params.id)
+    .then(user => user.destroy())
+    .then(() => res.sendStatus(204))
+    .catch(err => {
+      logger.error('Errors when removed the user.', err)
       return next(err)
-    }
-
-    return res.sendStatus(204)
-  })
+    })
 }
 
 function updateUser (req: express.Request, res: express.Response, next: express.NextFunction) {
-  db.User.loadByUsername(res.locals.oauth.token.user.username, function (err, user) {
-    if (err) return next(err)
+  const body: UserUpdate = req.body
 
-    if (req.body.password) user.password = req.body.password
-    if (req.body.displayNSFW !== undefined) user.displayNSFW = req.body.displayNSFW
+  db.User.loadByUsername(res.locals.oauth.token.user.username)
+    .then(user => {
+      if (body.password) user.password = body.password
+      if (body.displayNSFW !== undefined) user.displayNSFW = body.displayNSFW
 
-    user.save().asCallback(function (err) {
-      if (err) return next(err)
-
-      return res.sendStatus(204)
+      return user.save()
     })
-  })
+    .then(() => res.sendStatus(204))
+    .catch(err => next(err))
 }
 
 function success (req: express.Request, res: express.Response, next: express.NextFunction) {