diff options
author | Chocobozzz <me@florianbigard.com> | 2021-02-26 14:22:25 +0100 |
---|---|---|
committer | Chocobozzz <me@florianbigard.com> | 2021-02-26 14:22:25 +0100 |
commit | 8795d6f254bd8f88c385bf77b82cc6f177c94df9 (patch) | |
tree | 88f8f4fced9e0c12db5b43dcac6e44bd94eb8b1a /server/initializers | |
parent | 92315d979c3f424d81f8fca3c8831d81e4e2a6d6 (diff) | |
download | PeerTube-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.ts | 7 | ||||
-rw-r--r-- | server/initializers/migrations/0605-actor-missing-keys.ts | 34 |
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 @@ | |||
1 | import { randomInt } from '../../shared/core-utils/miscs/miscs' | ||
2 | import { CronRepeatOptions, EveryRepeatOptions } from 'bull' | 1 | import { CronRepeatOptions, EveryRepeatOptions } from 'bull' |
3 | import { randomBytes } from 'crypto' | 2 | import { randomBytes } from 'crypto' |
4 | import { invert } from 'lodash' | 3 | import { invert } from 'lodash' |
5 | import { join } from 'path' | 4 | import { join } from 'path' |
5 | import { randomInt } from '../../shared/core-utils/miscs/miscs' | ||
6 | import { | 6 | import { |
7 | AbuseState, | 7 | AbuseState, |
8 | JobType, | 8 | JobType, |
@@ -24,7 +24,7 @@ import { CONFIG, registerConfigChangedHandler } from './config' | |||
24 | 24 | ||
25 | // --------------------------------------------------------------------------- | 25 | // --------------------------------------------------------------------------- |
26 | 26 | ||
27 | const LAST_MIGRATION_VERSION = 600 | 27 | const 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 @@ | |||
1 | import * as Sequelize from 'sequelize' | ||
2 | import { createPrivateKey, getPublicKey } from '../../helpers/core-utils' | ||
3 | import { PRIVATE_RSA_KEY_SIZE } from '../constants' | ||
4 | |||
5 | async 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 | |||
27 | function down (options) { | ||
28 | throw new Error('Not implemented.') | ||
29 | } | ||
30 | |||
31 | export { | ||
32 | up, | ||
33 | down | ||
34 | } | ||