X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Finitializers%2Finstaller.ts;h=7e321fb76e8c9f30c3e34eed1db3ab10b5ba3009;hb=c3edc5b074aa4bb1861ed0a94d3713808e87170f;hp=5452743b64865fd399d4fb2601a1b8312765cc1c;hpb=3fd3ab2d34d512b160a5e6084d7609be7b4f4452;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/initializers/installer.ts b/server/initializers/installer.ts index 5452743b6..7e321fb76 100644 --- a/server/initializers/installer.ts +++ b/server/initializers/installer.ts @@ -1,25 +1,36 @@ -import * as passwordGenerator from 'password-generator' -import { UserRole } from '../../shared' -import { createPrivateAndPublicKeys, logger, mkdirpPromise, rimrafPromise } from '../helpers' -import { createLocalAccountWithoutKeys, createUserAccountAndChannel } from '../lib' -import { UserModel } from '../models/account/user' +import { ensureDir, remove } from 'fs-extra' +import passwordGenerator from 'password-generator' +import { UserRole } from '@shared/models' +import { logger } from '../helpers/logger' +import { createApplicationActor, createUserAccountAndChannelAndPlaylist } from '../lib/user' import { ApplicationModel } from '../models/application/application' import { OAuthClientModel } from '../models/oauth/oauth-client' -import { applicationExist, clientsExist, usersExist } from './checker' -import { CACHE, CONFIG, LAST_MIGRATION_VERSION, SERVER_ACCOUNT_NAME } from './constants' +import { UserModel } from '../models/user/user' +import { applicationExist, clientsExist, usersExist } from './checker-after-init' +import { CONFIG } from './config' +import { FILES_CACHE, HLS_STREAMING_PLAYLIST_DIRECTORY, LAST_MIGRATION_VERSION, RESUMABLE_UPLOAD_DIRECTORY } from './constants' import { sequelizeTypescript } from './database' async function installApplication () { try { - await sequelizeTypescript.sync() - await removeCacheDirectories() - await createDirectoriesIfNotExist() - await createApplicationIfNotExist() - await createOAuthClientIfNotExist() - await createOAuthAdminIfNotExist() + await Promise.all([ + // Database related + sequelizeTypescript.sync() + .then(() => { + return Promise.all([ + createApplicationIfNotExist(), + createOAuthClientIfNotExist(), + createOAuthAdminIfNotExist() + ]) + }), + + // Directories + removeCacheAndTmpDirectories() + .then(() => createDirectoriesIfNotExist()) + ]) } catch (err) { - logger.error('Cannot install application.', err) - throw err + logger.error('Cannot install application.', { err }) + process.exit(-1) } } @@ -31,36 +42,46 @@ export { // --------------------------------------------------------------------------- -function removeCacheDirectories () { - const cacheDirectories = CACHE.DIRECTORIES +function removeCacheAndTmpDirectories () { + const cacheDirectories = Object.keys(FILES_CACHE) + .map(k => FILES_CACHE[k].DIRECTORY) const tasks: Promise[] = [] // Cache directories for (const key of Object.keys(cacheDirectories)) { const dir = cacheDirectories[key] - tasks.push(rimrafPromise(dir)) + tasks.push(remove(dir)) } + tasks.push(remove(CONFIG.STORAGE.TMP_DIR)) + return Promise.all(tasks) } function createDirectoriesIfNotExist () { const storage = CONFIG.STORAGE - const cacheDirectories = CACHE.DIRECTORIES + const cacheDirectories = Object.keys(FILES_CACHE) + .map(k => FILES_CACHE[k].DIRECTORY) - const tasks = [] + const tasks: Promise[] = [] for (const key of Object.keys(storage)) { const dir = storage[key] - tasks.push(mkdirpPromise(dir)) + tasks.push(ensureDir(dir)) } // Cache directories for (const key of Object.keys(cacheDirectories)) { const dir = cacheDirectories[key] - tasks.push(mkdirpPromise(dir)) + tasks.push(ensureDir(dir)) } + // Playlist directories + tasks.push(ensureDir(HLS_STREAMING_PLAYLIST_DIRECTORY)) + + // Resumable upload directory + tasks.push(ensureDir(RESUMABLE_UPLOAD_DIRECTORY)) + return Promise.all(tasks) } @@ -110,8 +131,10 @@ async function createOAuthAdminIfNotExist () { // Our password is weak so do not validate it validatePassword = false + } else if (process.env.PT_INITIAL_ROOT_PASSWORD) { + password = process.env.PT_INITIAL_ROOT_PASSWORD } else { - password = passwordGenerator(8, true) + password = passwordGenerator(16, true) } const userData = { @@ -119,11 +142,15 @@ async function createOAuthAdminIfNotExist () { email, password, role, - videoQuota: -1 + verified: true, + nsfwPolicy: CONFIG.INSTANCE.DEFAULT_NSFW_POLICY, + p2pEnabled: CONFIG.DEFAULTS.P2P.WEBAPP.ENABLED, + videoQuota: -1, + videoQuotaDaily: -1 } const user = new UserModel(userData) - await createUserAccountAndChannel(user, validatePassword) + await createUserAccountAndChannelAndPlaylist({ userToCreate: user, channelNames: undefined, validateUser: validatePassword }) logger.info('Username: ' + username) logger.info('User password: ' + password) } @@ -133,16 +160,11 @@ async function createApplicationIfNotExist () { // Nothing to do, application already exist if (exist === true) return undefined - logger.info('Creating Application table.') - const applicationInstance = await ApplicationModel.create({ migrationVersion: LAST_MIGRATION_VERSION }) - logger.info('Creating application account.') - const accountCreated = await createLocalAccountWithoutKeys(SERVER_ACCOUNT_NAME, null, applicationInstance.id, undefined) - - const { publicKey, privateKey } = await createPrivateAndPublicKeys() - accountCreated.set('publicKey', publicKey) - accountCreated.set('privateKey', privateKey) + const application = await ApplicationModel.create({ + migrationVersion: LAST_MIGRATION_VERSION + }) - return accountCreated.save() + return createApplicationActor(application.id) }