X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Flib%2Fuser.ts;h=d54ffc916d34bee45960655a06ddde8370229361;hb=54141398354e6e7b94aa3065a705a1251390111c;hp=1094c2401de8b6a2dd9a423f937d2efe64ff55fd;hpb=571389d43b8fc8aaf27e77c06f19b320b08dbbc9;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/lib/user.ts b/server/lib/user.ts index 1094c2401..d54ffc916 100644 --- a/server/lib/user.ts +++ b/server/lib/user.ts @@ -1,41 +1,48 @@ import * as Sequelize from 'sequelize' -import { getActivityPubUrl } from '../helpers/activitypub' import { createPrivateAndPublicKeys } from '../helpers/peertube-crypto' import { database as db } from '../initializers' import { CONFIG } from '../initializers/constants' import { UserInstance } from '../models' import { createVideoChannel } from './video-channel' +import { logger } from '../helpers/logger' +import { getAccountActivityPubUrl } from '../helpers/activitypub' async function createUserAccountAndChannel (user: UserInstance, validateUser = true) { - const res = await db.sequelize.transaction(async t => { + const { account, videoChannel } = await db.sequelize.transaction(async t => { const userOptions = { transaction: t, validate: validateUser } const userCreated = await user.save(userOptions) - const accountCreated = await createLocalAccount(user.username, user.id, null, t) + const accountCreated = await createLocalAccountWithoutKeys(user.username, user.id, null, t) + const videoChannelName = `Default ${userCreated.username} channel` const videoChannelInfo = { - name: `Default ${userCreated.username} channel` + name: videoChannelName } const videoChannel = await createVideoChannel(videoChannelInfo, accountCreated, t) return { account: accountCreated, videoChannel } }) - return res + // Set account keys, this could be long so process after the account creation and do not block the client + const { publicKey, privateKey } = await createPrivateAndPublicKeys() + account.set('publicKey', publicKey) + account.set('privateKey', privateKey) + account.save().catch(err => logger.error('Cannot set public/private keys of local account %d.', account.id, err)) + + return { account, videoChannel } } -async function createLocalAccount (name: string, userId: number, applicationId: number, t: Sequelize.Transaction) { - const { publicKey, privateKey } = await createPrivateAndPublicKeys() - const url = getActivityPubUrl('account', name) +async function createLocalAccountWithoutKeys (name: string, userId: number, applicationId: number, t: Sequelize.Transaction) { + const url = getAccountActivityPubUrl(name) const accountInstance = db.Account.build({ name, url, - publicKey, - privateKey, + publicKey: null, + privateKey: null, followersCount: 0, followingCount: 0, inboxUrl: url + '/inbox', @@ -45,7 +52,7 @@ async function createLocalAccount (name: string, userId: number, applicationId: followingUrl: url + '/following', userId, applicationId, - podId: null // It is our pod + serverId: null // It is our server }) return accountInstance.save({ transaction: t }) @@ -55,5 +62,5 @@ async function createLocalAccount (name: string, userId: number, applicationId: export { createUserAccountAndChannel, - createLocalAccount + createLocalAccountWithoutKeys }