aboutsummaryrefslogtreecommitdiffhomepage
path: root/server/initializers
diff options
context:
space:
mode:
authorChocobozzz <me@florianbigard.com>2021-02-26 14:22:25 +0100
committerChocobozzz <me@florianbigard.com>2021-02-26 14:22:25 +0100
commit8795d6f254bd8f88c385bf77b82cc6f177c94df9 (patch)
tree88f8f4fced9e0c12db5b43dcac6e44bd94eb8b1a /server/initializers
parent92315d979c3f424d81f8fca3c8831d81e4e2a6d6 (diff)
downloadPeerTube-8795d6f254bd8f88c385bf77b82cc6f177c94df9.tar.gz
PeerTube-8795d6f254bd8f88c385bf77b82cc6f177c94df9.tar.zst
PeerTube-8795d6f254bd8f88c385bf77b82cc6f177c94df9.zip
Fix broken local actors
Some channels can't federate because they don't have public/private keys, maybe because the generation failed for various reasons
Diffstat (limited to 'server/initializers')
-rw-r--r--server/initializers/constants.ts7
-rw-r--r--server/initializers/migrations/0605-actor-missing-keys.ts34
2 files changed, 39 insertions, 2 deletions
diff --git a/server/initializers/constants.ts b/server/initializers/constants.ts
index bbf55d7a4..74192d590 100644
--- a/server/initializers/constants.ts
+++ b/server/initializers/constants.ts
@@ -1,8 +1,8 @@
1import { randomInt } from '../../shared/core-utils/miscs/miscs'
2import { CronRepeatOptions, EveryRepeatOptions } from 'bull' 1import { CronRepeatOptions, EveryRepeatOptions } from 'bull'
3import { randomBytes } from 'crypto' 2import { randomBytes } from 'crypto'
4import { invert } from 'lodash' 3import { invert } from 'lodash'
5import { join } from 'path' 4import { join } from 'path'
5import { randomInt } from '../../shared/core-utils/miscs/miscs'
6import { 6import {
7 AbuseState, 7 AbuseState,
8 JobType, 8 JobType,
@@ -24,7 +24,7 @@ import { CONFIG, registerConfigChangedHandler } from './config'
24 24
25// --------------------------------------------------------------------------- 25// ---------------------------------------------------------------------------
26 26
27const LAST_MIGRATION_VERSION = 600 27const LAST_MIGRATION_VERSION = 605
28 28
29// --------------------------------------------------------------------------- 29// ---------------------------------------------------------------------------
30 30
@@ -141,6 +141,7 @@ const JOB_ATTEMPTS: { [id in JobType]: number } = {
141 'video-transcoding': 1, 141 'video-transcoding': 1,
142 'video-import': 1, 142 'video-import': 1,
143 'email': 5, 143 'email': 5,
144 'actor-keys': 3,
144 'videos-views': 1, 145 'videos-views': 1,
145 'activitypub-refresher': 1, 146 'activitypub-refresher': 1,
146 'video-redundancy': 1, 147 'video-redundancy': 1,
@@ -153,6 +154,7 @@ const JOB_CONCURRENCY: { [id in JobType]?: number } = {
153 'activitypub-follow': 1, 154 'activitypub-follow': 1,
154 'video-file-import': 1, 155 'video-file-import': 1,
155 'email': 5, 156 'email': 5,
157 'actor-keys': 1,
156 'videos-views': 1, 158 'videos-views': 1,
157 'activitypub-refresher': 1, 159 'activitypub-refresher': 1,
158 'video-redundancy': 1, 160 'video-redundancy': 1,
@@ -167,6 +169,7 @@ const JOB_TTL: { [id in JobType]: number } = {
167 'video-transcoding': 1000 * 3600 * 48, // 2 days, transcoding could be long 169 'video-transcoding': 1000 * 3600 * 48, // 2 days, transcoding could be long
168 'video-import': 1000 * 3600 * 2, // 2 hours 170 'video-import': 1000 * 3600 * 2, // 2 hours
169 'email': 60000 * 10, // 10 minutes 171 'email': 60000 * 10, // 10 minutes
172 'actor-keys': 60000 * 20, // 20 minutes
170 'videos-views': undefined, // Unlimited 173 'videos-views': undefined, // Unlimited
171 'activitypub-refresher': 60000 * 10, // 10 minutes 174 'activitypub-refresher': 60000 * 10, // 10 minutes
172 'video-redundancy': 1000 * 3600 * 3, // 3 hours 175 'video-redundancy': 1000 * 3600 * 3, // 3 hours
diff --git a/server/initializers/migrations/0605-actor-missing-keys.ts b/server/initializers/migrations/0605-actor-missing-keys.ts
new file mode 100644
index 000000000..72d9b359d
--- /dev/null
+++ b/server/initializers/migrations/0605-actor-missing-keys.ts
@@ -0,0 +1,34 @@
1import * as Sequelize from 'sequelize'
2import { createPrivateKey, getPublicKey } from '../../helpers/core-utils'
3import { PRIVATE_RSA_KEY_SIZE } from '../constants'
4
5async function up (utils: {
6 transaction: Sequelize.Transaction
7 queryInterface: Sequelize.QueryInterface
8 sequelize: Sequelize.Sequelize
9 db: any
10}): Promise<void> {
11
12 {
13 const query = 'SELECT * FROM "actor" WHERE "serverId" IS NULL AND "publicKey" IS NULL'
14 const options = { type: Sequelize.QueryTypes.SELECT as Sequelize.QueryTypes.SELECT }
15 const actors = await utils.sequelize.query<any>(query, options)
16
17 for (const actor of actors) {
18 const { key } = await createPrivateKey(PRIVATE_RSA_KEY_SIZE)
19 const { publicKey } = await getPublicKey(key)
20
21 const queryUpdate = `UPDATE "actor" SET "publicKey" = '${publicKey}', "privateKey" = '${key}' WHERE id = ${actor.id}`
22 await utils.sequelize.query(queryUpdate)
23 }
24 }
25}
26
27function down (options) {
28 throw new Error('Not implemented.')
29}
30
31export {
32 up,
33 down
34}