UNPKG

@admin-bro/hapi

Version:

This is an official AdminBro plugin which integrates it to hapijs framework.

63 lines (54 loc) 1.78 kB
const Hapi = require('hapi') const mongoose = require('mongoose') const Bcrypt = require('bcrypt') const AdminBro = require('admin-bro') const AdminBroMongoose = require('@admin-bro/mongoose') const AdminModel = require('./mongoose/admin-model') const AdminBroPlugin = require('../index') AdminBro.registerAdapter(AdminBroMongoose) /** * Creates first admin test@example.com:password when there are no * admins in the database * @ignore */ const createAdminIfNone = async () => { const existingAdmin = await AdminModel.countDocuments() > 0 if (!existingAdmin) { const password = await Bcrypt.hash('password', 10) const admin = new AdminModel({ email: 'test@example.com', password }) await admin.save() } } const start = async () => { try { const server = Hapi.server({ port: process.env.PORT || 8080 }) const connection = await mongoose.connect(process.env.MONGO_URL) await createAdminIfNone() const adminBroOptions = { databases: [connection], branding: { companyName: 'Amazing c.o.', }, rootPath: '/admin', auth: { authenticate: async (email, password) => { const admin = await AdminModel.findOne({ email }) const isValid = admin && await Bcrypt.compare(password, admin.password) return isValid && admin }, cookiePassword: process.env.ADMIN_COOKIE_SECRET || 'yoursupersecretcookiepassword-veryveryverylong', isSecure: false, // allows you to test the app with http }, } await server.register({ plugin: AdminBroPlugin, options: adminBroOptions, }) await server.start() console.log('Server running at:', server.info.uri) } catch (error) { console.log(error) process.exit(1) } } start()