installer.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import { SupportedAction } from '~/interfaces/activity';
  2. import loggerFactory from '~/utils/logger';
  3. import { InstallerService, FailedToCreateAdminUserError } from '../service/installer';
  4. const logger = loggerFactory('growi:routes:installer');
  5. module.exports = function(crowi) {
  6. const actions = {};
  7. const activityEvent = crowi.event('activity');
  8. actions.index = function(req, res) {
  9. return res.render('installer');
  10. };
  11. actions.install = async function(req, res, next) {
  12. const registerForm = req.body.registerForm || {};
  13. if (!req.form.isValid) {
  14. return res.render('installer');
  15. }
  16. const name = registerForm.name;
  17. const username = registerForm.username;
  18. const email = registerForm.email;
  19. const password = registerForm.password;
  20. const language = registerForm['app:globalLang'] || 'en_US';
  21. const installerService = new InstallerService(crowi);
  22. let adminUser;
  23. try {
  24. adminUser = await installerService.install({
  25. name,
  26. username,
  27. email,
  28. password,
  29. }, language);
  30. }
  31. catch (err) {
  32. if (err instanceof FailedToCreateAdminUserError) {
  33. req.form.errors.push(req.t('message.failed_to_create_admin_user', { errMessage: err.message }));
  34. }
  35. return res.render('installer');
  36. }
  37. const appService = crowi.appService;
  38. appService.setupAfterInstall();
  39. // login with passport
  40. req.logIn(adminUser, (err) => {
  41. if (err) {
  42. req.flash('successMessage', req.t('message.complete_to_install1'));
  43. req.session.redirectTo = '/';
  44. return res.redirect('/login');
  45. }
  46. req.flash('successMessage', req.t('message.complete_to_install2'));
  47. const parameters = { action: SupportedAction.ACTION_USER_REGISTRATION_SUCCESS };
  48. activityEvent.emit('update', res.locals.activity._id, parameters);
  49. return res.redirect('/');
  50. });
  51. };
  52. return actions;
  53. };