X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fcontrollers%2Fapi%2Fv1%2Fusers.js;h=704df770c4fb8099325ab363e95000bfa02f3614;hb=68a3b9f2aacb0225ae8b883b561b144bac339cbd;hp=caa979567aad89efdc14af635bee29388c565ab3;hpb=69b0a27cbbd69ca019eb7db5f917b1dd06dc82cd;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/controllers/api/v1/users.js b/server/controllers/api/v1/users.js index caa979567..704df770c 100644 --- a/server/controllers/api/v1/users.js +++ b/server/controllers/api/v1/users.js @@ -1,16 +1,48 @@ 'use strict' -const config = require('config') -const mongoose = require('mongoose') +const each = require('async/each') const express = require('express') -const oAuth = require('../../../middlewares').oauth +const mongoose = require('mongoose') +const waterfall = require('async/waterfall') + +const constants = require('../../../initializers/constants') +const friends = require('../../../lib/friends') +const logger = require('../../../helpers/logger') +const middlewares = require('../../../middlewares') +const admin = middlewares.admin +const oAuth = middlewares.oauth +const validatorsUsers = middlewares.validators.users -const Client = mongoose.model('OAuthClient') +const User = mongoose.model('User') +const Video = mongoose.model('Video') const router = express.Router() -router.get('/client', getAngularClient) +router.get('/', listUsers) +router.get('/me', oAuth.authenticate, getUserInformation) + +router.post('/', + oAuth.authenticate, + admin.ensureIsAdmin, + validatorsUsers.usersAdd, + createUser +) + +router.put('/:id', + oAuth.authenticate, + validatorsUsers.usersUpdate, + updateUser +) + +router.delete('/:id', + oAuth.authenticate, + admin.ensureIsAdmin, + validatorsUsers.usersRemove, + removeUser +) + router.post('/token', oAuth.token, success) +// TODO: Once https://github.com/oauthjs/node-oauth2-server/pull/289 is merged, implement revoke token route // --------------------------------------------------------------------------- @@ -18,23 +50,91 @@ module.exports = router // --------------------------------------------------------------------------- -function getAngularClient (req, res, next) { - const serverHost = config.get('webserver.host') - const serverPort = config.get('webserver.port') - let headerHostShouldBe = serverHost - if (serverPort !== 80 && serverPort !== 443) { - headerHostShouldBe += ':' + serverPort - } +function createUser (req, res, next) { + const user = new User({ + username: req.body.username, + password: req.body.password, + role: constants.USER_ROLES.USER + }) + + user.save(function (err, createdUser) { + if (err) return next(err) + + return res.type('json').status(204).end() + }) +} + +function getUserInformation (req, res, next) { + User.loadByUsername(res.locals.oauth.token.user.username, function (err, user) { + if (err) return next(err) + + return res.json(user.toFormatedJSON()) + }) +} + +function listUsers (req, res, next) { + User.list(function (err, usersList) { + if (err) return next(err) - if (req.get('host') !== headerHostShouldBe) return res.type('json').status(403).end() + res.json(getFormatedUsers(usersList)) + }) +} + +function removeUser (req, res, next) { + waterfall([ + function getUser (callback) { + User.loadById(req.params.id, callback) + }, + + function getVideos (user, callback) { + Video.listOwnedByAuthor(user.username, function (err, videos) { + return callback(err, user, videos) + }) + }, + + function removeVideosFromDB (user, videos, callback) { + each(videos, function (video, callbackEach) { + video.remove(callbackEach) + }, function (err) { + return callback(err, user, videos) + }) + }, + + function sendInformationToFriends (user, videos, callback) { + videos.forEach(function (video) { + const params = { + name: video.name, + magnetUri: video.magnetUri + } - Client.loadFirstClient(function (err, client) { + friends.removeVideoToFriends(params) + }) + + return callback(null, user) + }, + + function removeUserFromDB (user, callback) { + user.remove(callback) + } + ], function andFinally (err) { + if (err) { + logger.error('Errors when removed the user.', { error: err }) + return next(err) + } + + return res.sendStatus(204) + }) +} + +function updateUser (req, res, next) { + User.loadByUsername(res.locals.oauth.token.user.username, function (err, user) { if (err) return next(err) - if (!client) return next(new Error('No client available.')) - res.json({ - client_id: client._id, - client_secret: client.clientSecret + user.password = req.body.password + user.save(function (err) { + if (err) return next(err) + + return res.sendStatus(204) }) }) } @@ -42,3 +142,17 @@ function getAngularClient (req, res, next) { function success (req, res, next) { res.end() } + +// --------------------------------------------------------------------------- + +function getFormatedUsers (users) { + const formatedUsers = [] + + users.forEach(function (user) { + formatedUsers.push(user.toFormatedJSON()) + }) + + return { + data: formatedUsers + } +}