X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Finitializers%2Finstaller.ts;h=818bb04a254ddbe5cc74e3191a9b17a1e7791265;hb=d9eaee3939bf2e93e5d775d32bce77842201faba;hp=4c04290fc455542728504eae71322883b8d529a9;hpb=f5028693a896a3076dd286ac0030e3d8f78f5ebf;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/initializers/installer.ts b/server/initializers/installer.ts index 4c04290fc..818bb04a2 100644 --- a/server/initializers/installer.ts +++ b/server/initializers/installer.ts @@ -1,19 +1,27 @@ import * as passwordGenerator from 'password-generator' -import * as Bluebird from 'bluebird' - -import { database as db } from './database' -import { USER_ROLES, CONFIG, LAST_MIGRATION_VERSION, CACHE } from './constants' -import { clientsExist, usersExist } from './checker' -import { logger, createCertsIfNotExist, mkdirpPromise, rimrafPromise } from '../helpers' -import { createUserAuthorAndChannel } from '../lib' +import { UserRole } from '../../shared' +import { logger } from '../helpers/logger' +import { createApplicationActor, createUserAccountAndChannel } from '../lib/user' +import { UserModel } from '../models/account/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 } from './constants' +import { sequelizeTypescript } from './database' +import { remove, ensureDir } from 'fs-extra' async function installApplication () { - await db.sequelize.sync() - await removeCacheDirectories() - await createDirectoriesIfNotExist() - await createCertsIfNotExist() - await createOAuthClientIfNotExist() - await createOAuthAdminIfNotExist() + try { + await sequelizeTypescript.sync() + await removeCacheDirectories() + await createDirectoriesIfNotExist() + await createApplicationIfNotExist() + await createOAuthClientIfNotExist() + await createOAuthAdminIfNotExist() + } catch (err) { + logger.error('Cannot install application.', { err }) + process.exit(-1) + } } // --------------------------------------------------------------------------- @@ -25,14 +33,15 @@ export { // --------------------------------------------------------------------------- function removeCacheDirectories () { - const cacheDirectories = CACHE.DIRECTORIES + const cacheDirectories = Object.keys(CACHE) + .map(k => CACHE[k].DIRECTORY) - const tasks: Bluebird[] = [] + const tasks: Promise[] = [] // Cache directories for (const key of Object.keys(cacheDirectories)) { const dir = cacheDirectories[key] - tasks.push(rimrafPromise(dir)) + tasks.push(remove(dir)) } return Promise.all(tasks) @@ -40,25 +49,26 @@ function removeCacheDirectories () { function createDirectoriesIfNotExist () { const storage = CONFIG.STORAGE - const cacheDirectories = CACHE.DIRECTORIES + const cacheDirectories = Object.keys(CACHE) + .map(k => 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)) } return Promise.all(tasks) } async function createOAuthClientIfNotExist () { - const exist = await clientsExist(db.OAuthClient) + const exist = await clientsExist() // Nothing to do, clients already exist if (exist === true) return undefined @@ -66,7 +76,7 @@ async function createOAuthClientIfNotExist () { const id = passwordGenerator(32, false, /[a-z0-9]/) const secret = passwordGenerator(32, false, /[a-zA-Z0-9]/) - const client = db.OAuthClient.build({ + const client = new OAuthClientModel({ clientId: id, clientSecret: secret, grants: [ 'password', 'refresh_token' ], @@ -81,14 +91,14 @@ async function createOAuthClientIfNotExist () { } async function createOAuthAdminIfNotExist () { - const exist = await usersExist(db.User) + const exist = await usersExist() // Nothing to do, users already exist if (exist === true) return undefined logger.info('Creating the administrator.') const username = 'root' - const role = USER_ROLES.ADMIN + const role = UserRole.ADMINISTRATOR const email = CONFIG.ADMIN.EMAIL let validatePassword = true let password = '' @@ -104,7 +114,7 @@ async function createOAuthAdminIfNotExist () { // Our password is weak so do not validate it validatePassword = false } else { - password = passwordGenerator(8, true) + password = passwordGenerator(16, true) } const userData = { @@ -112,14 +122,28 @@ async function createOAuthAdminIfNotExist () { email, password, role, - videoQuota: -1 + verified: true, + nsfwPolicy: CONFIG.INSTANCE.DEFAULT_NSFW_POLICY, + videoQuota: -1, + videoQuotaDaily: -1 } - const user = db.User.build(userData) + const user = new UserModel(userData) - await createUserAuthorAndChannel(user, validatePassword) + await createUserAccountAndChannel(user, validatePassword) logger.info('Username: ' + username) logger.info('User password: ' + password) +} + +async function createApplicationIfNotExist () { + const exist = await applicationExist() + // Nothing to do, application already exist + if (exist === true) return undefined + + logger.info('Creating application account.') + + const application = await ApplicationModel.create({ + migrationVersion: LAST_MIGRATION_VERSION + }) - logger.info('Creating Application table.') - await db.Application.create({ migrationVersion: LAST_MIGRATION_VERSION }) + return createApplicationActor(application.id) }