Add email to pods
authorChocobozzz <florian.bigard@gmail.com>
Thu, 16 Feb 2017 18:19:56 +0000 (19:19 +0100)
committerChocobozzz <florian.bigard@gmail.com>
Thu, 16 Feb 2017 18:19:56 +0000 (19:19 +0100)
20 files changed:
client/src/app/+admin/friends/friend-list/friend-list.component.ts
client/src/app/+admin/friends/shared/friend.model.ts
config/default.yaml
config/production.yaml.example
config/test-1.yaml
config/test-2.yaml
config/test-3.yaml
config/test-4.yaml
config/test-5.yaml
config/test-6.yaml
server/controllers/api/pods.js
server/initializers/checker.js
server/initializers/constants.js
server/initializers/migrations/0005-email-pod.js [new file with mode: 0644]
server/initializers/migrations/0005-example.js [deleted file]
server/initializers/migrator.js
server/lib/friends.js
server/middlewares/validators/pods.js
server/models/pod.js
server/tests/api/friends-basic.js

index 9783adf16afe556d21384763dd469aa64f829431..525a9fbc388b3f6db76979fdd609a0a7598a4770 100644 (file)
@@ -35,6 +35,10 @@ export class FriendListComponent {
         title: 'Host',
         sort: false
       },
+      email: {
+        title: 'Email',
+        sort: false
+      },
       score: {
         title: 'Score',
         sort: false
index 462cc82ed7693c95008cf469278f7898c99e2e75..f72156d05b601170386af15d74f4030cfc9f789f 100644 (file)
@@ -2,5 +2,6 @@ export interface Friend {
   id: string;
   host: string;
   score: number;
+  email: string;
   createdAt: Date;
 }
index ad87191fd74a8592c87f800ef1d0d70fbc5710b9..172bbef1e3284f3bc63fb02edb5e706bd88ea169 100644 (file)
@@ -22,3 +22,6 @@ storage:
   previews: 'previews/'
   thumbnails: 'thumbnails/'
   torrents: 'torrents/'
+
+admin:
+  email: 'admin@example.com'
index ba7ff8f2e1e1c1772cd4fd24e3c544b6ef76ffc9..cbfb0f46ce4a6ad28f7d78e16a3275fb733f70d3 100644 (file)
@@ -23,3 +23,6 @@ storage:
   previews: 'previews/'
   thumbnails: 'thumbnails/'
   torrents: 'torrents/'
+
+admin:
+  email: 'admin@example.com'
index b2a0a5422c96135ca02085bae5e64e2af18cf15f..dbe408a8cbdfff7471e3502f8309106cb16f2e55 100644 (file)
@@ -15,3 +15,6 @@ storage:
   logs: 'test1/logs/'
   thumbnails: 'test1/thumbnails/'
   torrents: 'test1/torrents/'
+
+admin:
+  email: 'admin1@example.com'
index 7285f339434efa5d6334e0c6363b2c555a3a83b3..13e09ff4caba3e1d127b44bf6e4601770e901707 100644 (file)
@@ -15,3 +15,6 @@ storage:
   logs: 'test2/logs/'
   thumbnails: 'test2/thumbnails/'
   torrents: 'test2/torrents/'
+
+admin:
+  email: 'admin2@example.com'
index 138a2cd53dd7c23b834308203401e3bf93d96f26..2eb98469280638120b233229f451b6c0b95c6bfc 100644 (file)
@@ -15,3 +15,6 @@ storage:
   logs: 'test3/logs/'
   thumbnails: 'test3/thumbnails/'
   torrents: 'test3/torrents/'
+
+admin:
+  email: 'admin3@example.com'
index 7425f4af7e9b3da3fb37f49b20f5a1ea8b507d45..a0a9bde21e819aa459b0576206467973f2c2c8cd 100644 (file)
@@ -15,3 +15,6 @@ storage:
   logs: 'test4/logs/'
   thumbnails: 'test4/thumbnails/'
   torrents: 'test4/torrents/'
+
+admin:
+  email: 'admin4@example.com'
index 1bf0de658270d82545c941325286f19b7fce6df1..af8654e140362a798b44ea8bd0cd249c93c12ec7 100644 (file)
@@ -15,3 +15,6 @@ storage:
   logs: 'test5/logs/'
   thumbnails: 'test5/thumbnails/'
   torrents: 'test5/torrents/'
+
+admin:
+  email: 'admin5@example.com'
index 7303a08fc67f3d1aebad9bf4d04259b6a57fffaa..d74d3b05214214de7d7e797fe5fe70c3dcae36ad 100644 (file)
@@ -15,3 +15,6 @@ storage:
   logs: 'test6/logs/'
   thumbnails: 'test6/thumbnails/'
   torrents: 'test6/torrents/'
+
+admin:
+  email: 'admin6@example.com'
index da991f8d973cf189baef8737f933395854cb8856..1c3eefcc13ef70843e5413d946c26870eeec0088 100644 (file)
@@ -4,6 +4,7 @@ const express = require('express')
 const waterfall = require('async/waterfall')
 
 const db = require('../../initializers/database')
+const constants = require('../../initializers/constants')
 const logger = require('../../helpers/logger')
 const peertubeCrypto = require('../../helpers/peertube-crypto')
 const utils = require('../../helpers/utils')
@@ -80,7 +81,7 @@ function addPods (req, res, next) {
   ], function (err, cert) {
     if (err) return next(err)
 
-    return res.json({ cert: cert })
+    return res.json({ cert: cert, email: constants.CONFIG.ADMIN.EMAIL })
   })
 }
 
index 6471bb4f11fcb940d3833d61743951d777b014bd..7adbbb37a2569600328f70343150bfc12029f481 100644 (file)
@@ -28,7 +28,8 @@ function checkMissedConfig () {
   const required = [ 'listen.port',
     'webserver.https', 'webserver.hostname', 'webserver.port',
     'database.hostname', 'database.port', 'database.suffix', 'database.username', 'database.password',
-    'storage.certs', 'storage.videos', 'storage.logs', 'storage.thumbnails', 'storage.previews'
+    'storage.certs', 'storage.videos', 'storage.logs', 'storage.thumbnails', 'storage.previews',
+    'admin.email'
   ]
   const miss = []
 
index ad7cf4f4da9e3efb7d198af0e594899fdd3ae104..eb0509efe8eba617068e5e43635525a747ab7fb8 100644 (file)
@@ -54,6 +54,9 @@ const CONFIG = {
     WS: config.get('webserver.https') === true ? 'wss' : 'ws',
     HOSTNAME: config.get('webserver.hostname'),
     PORT: config.get('webserver.port')
+  },
+  ADMIN: {
+    EMAIL: config.get('admin.email')
   }
 }
 CONFIG.WEBSERVER.URL = CONFIG.WEBSERVER.SCHEME + '://' + CONFIG.WEBSERVER.HOSTNAME + ':' + CONFIG.WEBSERVER.PORT
@@ -92,7 +95,7 @@ const FRIEND_SCORE = {
 
 // ---------------------------------------------------------------------------
 
-const LAST_MIGRATION_VERSION = 0
+const LAST_MIGRATION_VERSION = 5
 
 // ---------------------------------------------------------------------------
 
diff --git a/server/initializers/migrations/0005-email-pod.js b/server/initializers/migrations/0005-email-pod.js
new file mode 100644 (file)
index 0000000..d90b674
--- /dev/null
@@ -0,0 +1,20 @@
+/*
+  This is just an example.
+*/
+
+// utils = { transaction, queryInterface }
+exports.up = function (utils, callback) {
+  const q = utils.queryInterface
+  const Sequelize = utils.Sequelize
+
+  const data = {
+    type: Sequelize.STRING(400),
+    allowNull: false
+  }
+
+  q.addColumn('Pods', 'email', data, { transaction: utils.transaction }).asCallback(callback)
+}
+
+exports.down = function (options, callback) {
+  throw new Error('Not implemented.')
+}
diff --git a/server/initializers/migrations/0005-example.js b/server/initializers/migrations/0005-example.js
deleted file mode 100644 (file)
index cedc429..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-// /*
-//   This is just an example.
-// */
-
-// const db = require('../database')
-
-// // options contains the transaction
-// exports.up = function (options, callback) {
-//   db.Application.create({ migrationVersion: 42 }, { transaction: options.transaction }).asCallback(callback)
-// }
-
-// exports.down = function (options, callback) {
-//   throw new Error('Not implemented.')
-// }
index e5288b61589a3646b7f99a8b9079064e8dc2b04a..233ee2bddf294e2be4a21c86125a31db13db44cf 100644 (file)
@@ -64,7 +64,7 @@ function getMigrationScripts (callback) {
 }
 
 function executeMigration (actualVersion, entity, callback) {
-  const versionScript = entity.version
+  const versionScript = parseInt(entity.version)
 
   // Do not execute old migration scripts
   if (versionScript <= actualVersion) return callback(null)
@@ -78,7 +78,12 @@ function executeMigration (actualVersion, entity, callback) {
   db.sequelize.transaction().asCallback(function (err, t) {
     if (err) return callback(err)
 
-    migrationScript.up({ transaction: t }, function (err) {
+    const options = {
+      transaction: t,
+      queryInterface: db.sequelize.getQueryInterface(),
+      Sequelize: db.Sequelize
+    }
+    migrationScript.up(options, function (err) {
       if (err) {
         t.rollback()
         return callback(err)
index 2ea837c9997b5463b5eda6807d0f1ca86b2194bb..9b38693c705438f6243dc315f85b7afdafe17be5 100644 (file)
@@ -245,6 +245,7 @@ function makeRequestsToWinningPods (cert, podsList, callback) {
       method: 'POST',
       json: {
         host: constants.CONFIG.WEBSERVER.HOST,
+        email: constants.CONFIG.ADMIN.EMAIL,
         publicKey: cert
       }
     }
@@ -257,7 +258,7 @@ function makeRequestsToWinningPods (cert, podsList, callback) {
       }
 
       if (res.statusCode === 200) {
-        const podObj = db.Pod.build({ host: pod.host, publicKey: body.cert })
+        const podObj = db.Pod.build({ host: pod.host, publicKey: body.cert, email: body.email })
         podObj.save().asCallback(function (err, podCreated) {
           if (err) {
             logger.error('Cannot add friend %s pod.', pod.host, { error: err })
index b9b30e7a1bde4dd4d0220e3e6efcf7e8490bed49..0bf4b18446fb04791e258ef3df44bc45f7545a1a 100644 (file)
@@ -40,7 +40,8 @@ function makeFriends (req, res, next) {
 }
 
 function podsAdd (req, res, next) {
-  req.checkBody('host', 'Should have an host').isHostValid()
+  req.checkBody('host', 'Should have a host').isHostValid()
+  req.checkBody('email', 'Should have an email').isEmail()
   req.checkBody('publicKey', 'Should have a public key').notEmpty()
   logger.debug('Checking podsAdd parameters', { parameters: req.body })
 
index b3c6db8e881aa45e09afe688310ce3d8de6d37c2..6ae4b0999eac0ae25e9948782b8512d1a5dbe308 100644 (file)
@@ -32,6 +32,10 @@ module.exports = function (sequelize, DataTypes) {
           isInt: true,
           max: constants.FRIEND_SCORE.MAX
         }
+      },
+      email: {
+        type: DataTypes.STRING(400),
+        allowNull: false
       }
     },
     {
@@ -71,6 +75,7 @@ function toFormatedJSON () {
   const json = {
     id: this.id,
     host: this.host,
+    email: this.email,
     score: this.score,
     createdAt: this.createdAt
   }
index 6f37ff29101ec883110f4a15bf3b99656a4a8b7c..62c40df7b98cf15a489b23e32ee9cfc49d8f81d0 100644 (file)
@@ -96,6 +96,7 @@ describe('Test basic friends', function () {
 
           const pod = result[0]
           expect(pod.host).to.equal(servers[2].host)
+          expect(pod.email).to.equal('admin3@example.com')
           expect(pod.score).to.equal(20)
           expect(miscsUtils.dateIsValid(pod.createdAt)).to.be.true
 
@@ -113,6 +114,7 @@ describe('Test basic friends', function () {
 
           const pod = result[0]
           expect(pod.host).to.equal(servers[1].host)
+          expect(pod.email).to.equal('admin2@example.com')
           expect(pod.score).to.equal(20)
           expect(miscsUtils.dateIsValid(pod.createdAt)).to.be.true