| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 | /* global wiki */const _ = require('lodash')const passport = require('passport')const fs = require('fs-extra')const path = require('path')module.exports = {  strategies: {},  init() {    this.passport = passport    // Serialization user methods    passport.serializeUser(function (user, done) {      done(null, user._id)    })    passport.deserializeUser(function (id, done) {      wiki.db.User.findById(id).then((user) => {        if (user) {          done(null, user)        } else {          done(new Error(wiki.lang.t('auth:errors:usernotfound')), null)        }        return true      }).catch((err) => {        done(err, null)      })    })    // Load authentication strategies    wiki.config.auth.strategies.local = {}    _.forOwn(wiki.config.auth.strategies, (strategyConfig, strategyKey) => {      strategyConfig.callbackURL = `${wiki.config.site.host}${wiki.config.site.path}/login/${strategyKey}/callback`      let strategy = require(`../authentication/${strategyKey}`)      strategy.init(passport, strategyConfig)      fs.readFile(path.join(wiki.ROOTPATH, `assets/svg/auth-icon-${strategyKey}.svg`), 'utf8').then(iconData => {        strategy.icon = iconData      }).catch(err => {        if (err.code === 'ENOENT') {          strategy.icon = '[missing icon]'        } else {          wiki.logger.error(err)        }      })      this.strategies[strategy.key] = strategy      wiki.logger.info(`Authentication Provider ${strategyKey}: OK`)    })    // Create Guest account for first-time    wiki.db.User.findOne({      where: {        provider: 'local',        email: 'guest@example.com'      }    }).then((c) => {      if (c < 1) {        return wiki.db.User.create({          provider: 'local',          email: 'guest@example.com',          name: 'Guest',          password: '',          role: 'guest'        }).then(() => {          wiki.logger.info('[AUTH] Guest account created successfully!')          return true        }).catch((err) => {          wiki.logger.error('[AUTH] An error occured while creating guest account:')          wiki.logger.error(err)          return err        })      }    })    // .then(() => {    //   if (process.env.WIKI_JS_HEROKU) {    //     return wiki.db.User.findOne({ provider: 'local', email: process.env.WIKI_ADMIN_EMAIL }).then((c) => {    //       if (c < 1) {    //         // Create root admin account (HEROKU ONLY)    //         return wiki.db.User.create({    //           provider: 'local',    //           email: process.env.WIKI_ADMIN_EMAIL,    //           name: 'Administrator',    //           password: '$2a$04$MAHRw785Xe/Jd5kcKzr3D.VRZDeomFZu2lius4gGpZZ9cJw7B7Mna', // admin123 (default)    //           role: 'admin'    //         }).then(() => {    //           wiki.logger.info('[AUTH] Root admin account created successfully!')    //           return true    //         }).catch((err) => {    //           wiki.logger.error('[AUTH] An error occured while creating root admin account:')    //           wiki.logger.error(err)    //           return err    //         })    //       } else { return true }    //     })    //   } else { return true }    // })    return this  }}
 |