| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 | const bcrypt = require('bcryptjs-then')/* global WIKI */// ------------------------------------// Local Account// ------------------------------------const LocalStrategy = require('passport-local').Strategymodule.exports = {  init (passport, conf) {    passport.use('local',      new LocalStrategy({        usernameField: 'email',        passwordField: 'password'      }, async (uEmail, uPassword, done) => {        try {          const user = await WIKI.models.users.query().findOne({            email: uEmail.toLowerCase(),            providerKey: 'local'          })          if (user) {            await user.verifyPassword(uPassword)            if (!user.isActive) {              done(new WIKI.Error.AuthAccountBanned(), null)            } else if (!user.isVerified) {              done(new WIKI.Error.AuthAccountNotVerified(), null)            } else {              done(null, user)            }          } else {            // Fake verify password to mask timing differences            await bcrypt.compare((Math.random() + 1).toString(36), '$2a$12$irXbAcQSY59pcQQfNQpY8uyhfSw48nzDikAmr60drI501nR.PuBx2')            done(new WIKI.Error.AuthLoginFailed(), null)          }        } catch (err) {          done(err, null)        }      })    )  }}
 |