X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;ds=sidebyside;f=server%2Flib%2Fuser.ts;h=9884e566f9f5ea0a69bd0db44dd0eb8f5322f125;hb=608624252466acf9f1d9ee1c1170bd4fe4d18d18;hp=8609e72d8ea1611b86347719f2e8b53544810e61;hpb=72c7248b6fdcdb2175e726ff51b42e7555f2bd84;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/lib/user.ts b/server/lib/user.ts index 8609e72d8..9884e566f 100644 --- a/server/lib/user.ts +++ b/server/lib/user.ts @@ -1,46 +1,60 @@ +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 { addVideoAuthorToFriends } from './friends' import { createVideoChannel } from './video-channel' -function createUserAuthorAndChannel (user: UserInstance, validateUser = true) { - return db.sequelize.transaction(t => { +async function createUserAccountAndChannel (user: UserInstance, validateUser = true) { + const res = await db.sequelize.transaction(async t => { const userOptions = { transaction: t, validate: validateUser } - return user.save(userOptions) - .then(user => { - const author = db.Author.build({ - name: user.username, - podId: null, // It is our pod - userId: user.id - }) - - return author.save({ transaction: t }) - .then(author => ({ author, user })) - }) - .then(({ author, user }) => { - const remoteVideoAuthor = author.toAddRemoteJSON() - - // Now we'll add the video channel's meta data to our friends - return addVideoAuthorToFriends(remoteVideoAuthor, t) - .then(() => ({ author, user })) - }) - .then(({ author, user }) => { - const videoChannelInfo = { - name: `Default ${user.username} channel` - } - - return createVideoChannel(videoChannelInfo, author, t) - .then(videoChannel => ({ author, user, videoChannel })) - }) + const userCreated = await user.save(userOptions) + const accountCreated = await createLocalAccount(user.username, user.id, null, t) + + const videoChannelName = `Default ${userCreated.username} channel` + const videoChannelInfo = { + name: videoChannelName + } + const videoChannel = await createVideoChannel(videoChannelInfo, accountCreated, t) + + return { account: accountCreated, videoChannel } }) + + return res +} + +async function createLocalAccount (name: string, userId: number, applicationId: number, t: Sequelize.Transaction) { + const { publicKey, privateKey } = await createPrivateAndPublicKeys() + const url = getActivityPubUrl('account', name) + + const accountInstance = db.Account.build({ + name, + url, + publicKey, + privateKey, + followersCount: 0, + followingCount: 0, + inboxUrl: url + '/inbox', + outboxUrl: url + '/outbox', + sharedInboxUrl: CONFIG.WEBSERVER.URL + '/inbox', + followersUrl: url + '/followers', + followingUrl: url + '/following', + userId, + applicationId, + serverId: null // It is our server + }) + + return accountInstance.save({ transaction: t }) } // --------------------------------------------------------------------------- export { - createUserAuthorAndChannel + createUserAccountAndChannel, + createLocalAccount }