From 1f20622f2b087eaf8738d60fae00a44b9c558ca3 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Fri, 7 Jun 2019 16:59:53 +0200 Subject: Improve registration * Add ability to set the user display name * Use display name to guess the username/channel name * Add explanations about what is the purpose of a username/channel name * Add a loader at the "done" step --- server/lib/user.ts | 41 +++++++++++++++++++++++++++++++---------- 1 file changed, 31 insertions(+), 10 deletions(-) (limited to 'server/lib') diff --git a/server/lib/user.ts b/server/lib/user.ts index d9fd89e15..b50b09d72 100644 --- a/server/lib/user.ts +++ b/server/lib/user.ts @@ -1,4 +1,3 @@ -import * as Sequelize from 'sequelize' import * as uuidv4 from 'uuid/v4' import { ActivityPubActorType } from '../../shared/models/activitypub' import { SERVER_ACTOR_NAME } from '../initializers/constants' @@ -12,9 +11,17 @@ import { UserNotificationSettingModel } from '../models/account/user-notificatio import { UserNotificationSetting, UserNotificationSettingValue } from '../../shared/models/users' import { createWatchLaterPlaylist } from './video-playlist' import { sequelizeTypescript } from '../initializers/database' +import { Transaction } from 'sequelize/types' type ChannelNames = { name: string, displayName: string } -async function createUserAccountAndChannelAndPlaylist (userToCreate: UserModel, channelNames?: ChannelNames, validateUser = true) { +async function createUserAccountAndChannelAndPlaylist (parameters: { + userToCreate: UserModel, + userDisplayName?: string, + channelNames?: ChannelNames, + validateUser?: boolean +}) { + const { userToCreate, userDisplayName, channelNames, validateUser = true } = parameters + const { user, account, videoChannel } = await sequelizeTypescript.transaction(async t => { const userOptions = { transaction: t, @@ -24,7 +31,13 @@ async function createUserAccountAndChannelAndPlaylist (userToCreate: UserModel, const userCreated = await userToCreate.save(userOptions) userCreated.NotificationSetting = await createDefaultUserNotificationSettings(userCreated, t) - const accountCreated = await createLocalAccountWithoutKeys(userCreated.username, userCreated.id, null, t) + const accountCreated = await createLocalAccountWithoutKeys({ + name: userCreated.username, + displayName: userDisplayName, + userId: userCreated.id, + applicationId: null, + t: t + }) userCreated.Account = accountCreated const channelAttributes = await buildChannelAttributes(userCreated, channelNames) @@ -46,20 +59,22 @@ async function createUserAccountAndChannelAndPlaylist (userToCreate: UserModel, return { user, account, videoChannel } as { user: UserModel, account: AccountModel, videoChannel: VideoChannelModel } } -async function createLocalAccountWithoutKeys ( +async function createLocalAccountWithoutKeys (parameters: { name: string, + displayName?: string, userId: number | null, applicationId: number | null, - t: Sequelize.Transaction | undefined, - type: ActivityPubActorType= 'Person' -) { + t: Transaction | undefined, + type?: ActivityPubActorType +}) { + const { name, displayName, userId, applicationId, t, type = 'Person' } = parameters const url = getAccountActivityPubUrl(name) const actorInstance = buildActorInstance(type, url, name) const actorInstanceCreated = await actorInstance.save({ transaction: t }) const accountInstance = new AccountModel({ - name, + name: displayName || name, userId, applicationId, actorId: actorInstanceCreated.id @@ -72,7 +87,13 @@ async function createLocalAccountWithoutKeys ( } async function createApplicationActor (applicationId: number) { - const accountCreated = await createLocalAccountWithoutKeys(SERVER_ACTOR_NAME, null, applicationId, undefined, 'Application') + const accountCreated = await createLocalAccountWithoutKeys({ + name: SERVER_ACTOR_NAME, + userId: null, + applicationId: applicationId, + t: undefined, + type: 'Application' + }) accountCreated.Actor = await setAsyncActorKeys(accountCreated.Actor) @@ -89,7 +110,7 @@ export { // --------------------------------------------------------------------------- -function createDefaultUserNotificationSettings (user: UserModel, t: Sequelize.Transaction | undefined) { +function createDefaultUserNotificationSettings (user: UserModel, t: Transaction | undefined) { const values: UserNotificationSetting & { userId: number } = { userId: user.id, newVideoFromSubscription: UserNotificationSettingValue.WEB, -- cgit v1.2.3