aboutsummaryrefslogtreecommitdiffhomepage
path: root/controllers/api/v1/pods.js
blob: 29517ba8ecbe934aceb54a509cf9cc20d6a37b44 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
;(function () {
  'use strict'

  var express = require('express')
  var fs = require('fs')

  var logger = require('../../../helpers/logger')
  var friends = require('../../../lib/friends')
  var middleware = require('../../../middlewares')
  var cacheMiddleware = middleware.cache
  var peertubeCrypto = require('../../../helpers/peertubeCrypto')
  var Pods = require('../../../models/pods')
  var reqValidator = middleware.reqValidators.pods
  var secureMiddleware = middleware.secure
  var secureRequest = middleware.reqValidators.remote.secureRequest
  var Videos = require('../../../models/videos')

  var router = express.Router()

  router.get('/', cacheMiddleware.cache(false), listPods)
  router.post('/', reqValidator.podsAdd, cacheMiddleware.cache(false), addPods)
  router.get('/makefriends', reqValidator.makeFriends, cacheMiddleware.cache(false), makeFriends)
  router.get('/quitfriends', cacheMiddleware.cache(false), quitFriends)
  // Post because this is a secured request
  router.post('/remove', secureRequest, secureMiddleware.decryptBody, removePods)

  // ---------------------------------------------------------------------------

  module.exports = router

  // ---------------------------------------------------------------------------

  function addPods (req, res, next) {
    var informations = req.body.data
    Pods.add(informations, function (err) {
      if (err) return next(err)

      Videos.addRemotes(informations.videos)

      fs.readFile(peertubeCrypto.getCertDir() + 'peertube.pub', 'utf8', function (err, cert) {
        if (err) {
          logger.error('Cannot read cert file.', { error: err })
          return next(err)
        }

        Videos.listOwned(function (err, videos_list) {
          if (err) {
            logger.error('Cannot get the list of owned videos.', { error: err })
            return next(err)
          }

          res.json({ cert: cert, videos: videos_list })
        })
      })
    })
  }

  function listPods (req, res, next) {
    Pods.list(function (err, pods_list) {
      if (err) return next(err)

      res.json(pods_list)
    })
  }

  function makeFriends (req, res, next) {
    friends.makeFriends(function (err) {
      if (err) return next(err)

      res.sendStatus(204)
    })
  }

  function removePods (req, res, next) {
    var url = req.body.signature.url
    Pods.remove(url, function (err) {
      if (err) return next(err)

      Videos.removeAllRemotesOf(url, function (err) {
        if (err) logger.error('Cannot remove all remote videos of %s.', url)
        logger.info('%s pod removed.', url)
        res.sendStatus(204)
      })
    })
  }

  function quitFriends (req, res, next) {
    friends.quitFriends(function (err) {
      if (err) return next(err)

      res.sendStatus(204)
    })
  }
})()