| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- module.exports = function(crowi, app) {
- const logger = require('@alias/logger')('growi:routes:installer');
- const path = require('path');
- const fs = require('graceful-fs');
- const models = crowi.models;
- const { appService } = crowi;
- const User = models.User;
- const Page = models.Page;
- const actions = {};
- async function initSearchIndex() {
- const search = crowi.getSearcher();
- if (search == null) {
- return;
- }
- await search.deleteIndex();
- await search.buildIndex();
- await search.addAllPages();
- }
- async function createInitialPages(owner, lang) {
- const promises = [];
- // create portal page for '/'
- const welcomeMarkdownPath = path.join(crowi.localeDir, lang, 'welcome.md');
- const welcomeMarkdown = fs.readFileSync(welcomeMarkdownPath);
- promises.push(Page.create('/', welcomeMarkdown, owner, {}));
- // create /Sandbox
- const sandboxMarkdownPath = path.join(crowi.localeDir, lang, 'sandbox.md');
- const sandboxMarkdown = fs.readFileSync(sandboxMarkdownPath);
- promises.push(Page.create('/Sandbox', sandboxMarkdown, owner, {}));
- // create /Sandbox/Bootstrap3
- const bs3MarkdownPath = path.join(crowi.localeDir, 'en-US', 'sandbox-bootstrap3.md');
- const bs3Markdown = fs.readFileSync(bs3MarkdownPath);
- promises.push(Page.create('/Sandbox/Bootstrap3', bs3Markdown, owner, {}));
- await Promise.all(promises);
- try {
- await initSearchIndex();
- }
- catch (err) {
- logger.error('Failed to build Elasticsearch Indices', err);
- }
- }
- actions.index = function(req, res) {
- return res.render('installer');
- };
- actions.install = async function(req, res, next) {
- const registerForm = req.body.registerForm || {};
- if (!req.form.isValid) {
- return res.render('installer');
- }
- const name = registerForm.name;
- const username = registerForm.username;
- const email = registerForm.email;
- const password = registerForm.password;
- const language = registerForm['app:globalLang'] || 'en-US';
- await appService.initDB(language);
- // create first admin user
- let adminUser;
- try {
- adminUser = await User.createUser(name, username, email, password, language);
- await adminUser.asyncMakeAdmin();
- }
- catch (err) {
- req.form.errors.push(`管理ユーザーの作成に失敗しました。${err.message}`);
- return res.render('installer');
- }
- // create initial pages
- await createInitialPages(adminUser, language);
- // login with passport
- req.logIn(adminUser, (err) => {
- if (err) { return next() }
- req.flash('successMessage', 'GROWI のインストールが完了しました!はじめに、このページで各種設定を確認してください。');
- return res.redirect('/admin/app');
- });
- };
- return actions;
- };
|