christmas/index.js

106 lines
3.1 KiB
JavaScript
Raw Normal View History

2020-10-29 20:50:36 -07:00
global._CC = { require }
2020-11-08 16:01:41 -08:00
_CC.package = require('./package.json')
2020-11-08 13:54:08 -08:00
const PouchSession = require('session-pouchdb-store')
const LocalStrategy = require('passport-local').Strategy
const session = require('express-session')
const bcrypt = require('bcrypt-nodejs')
const flash = require('connect-flash')
const passport = require('passport')
2020-11-08 16:01:41 -08:00
const fetch = require('node-fetch')
2020-11-08 13:54:08 -08:00
const express = require('express')
2021-09-14 23:41:44 -07:00
_CC._ = require('lodash')
2020-11-08 13:54:08 -08:00
const config = require('./config')
2020-10-29 11:14:38 -07:00
_CC.config = config
2018-11-20 11:19:58 -08:00
2020-11-03 17:16:23 -08:00
if (!config.dbPrefix.startsWith('http')) {
const mkdirp = require('mkdirp').sync
mkdirp(config.dbPrefix)
}
2020-11-08 13:54:08 -08:00
const PouchDB = require('pouchdb').defaults({ prefix: config.dbPrefix })
2020-11-03 17:16:23 -08:00
2020-11-08 13:54:08 -08:00
const logger = require('./logger')
2018-11-20 11:19:58 -08:00
2020-11-08 13:54:08 -08:00
const app = express()
2020-10-29 11:14:38 -07:00
app.set('base', config.base)
2020-11-02 14:22:07 -08:00
app.set('trust proxy', config.trustProxy)
2018-11-20 11:19:58 -08:00
2020-11-08 13:54:08 -08:00
const db = new PouchDB('users')
2018-11-20 11:19:58 -08:00
passport.use('local', new LocalStrategy(
(username, password, done) => {
2020-11-08 13:54:08 -08:00
username = username.trim()
2018-11-20 11:19:58 -08:00
db.get(username)
.then(doc => {
bcrypt.compare(password, doc.password, (err, correct) => {
2020-11-08 13:54:08 -08:00
if (err) return done(err)
if (!correct) return done(null, false, { message: 'Incorrect password' })
if (correct) return done(null, doc)
})
2018-11-20 11:19:58 -08:00
})
.catch(err => {
2020-11-08 13:54:08 -08:00
if (err.message === 'missing') return done(null, false, { message: 'Incorrect username.' })
return done(err)
})
2018-11-20 11:19:58 -08:00
}
2020-11-08 13:54:08 -08:00
))
2018-11-20 11:19:58 -08:00
2020-11-08 13:54:08 -08:00
passport.serializeUser((user, callback) => callback(null, user._id))
2018-11-20 11:19:58 -08:00
passport.deserializeUser((user, callback) => {
db.get(user)
.then(dbUser => callback(null, dbUser))
2020-11-08 13:54:08 -08:00
.catch(() => callback(null, null))
})
2018-11-22 15:42:19 -08:00
2020-11-08 13:54:08 -08:00
app.use(require('body-parser').urlencoded({ extended: true }))
2018-11-22 15:42:19 -08:00
app.use(session({
secret: config.secret,
resave: false,
saveUninitialized: true,
2020-11-03 19:01:52 -08:00
store: new PouchSession(new PouchDB('sessions')),
2018-11-22 16:07:42 -08:00
cookie: {
maxAge: config.sessionMaxAge
2020-10-29 11:14:38 -07:00
},
name: 'christmas_community.connect.sid'
2020-11-08 13:54:08 -08:00
}))
app.use(flash())
app.use(passport.initialize())
app.use(passport.session())
2018-11-20 11:19:58 -08:00
2020-11-08 13:54:08 -08:00
app.use(require('./middlewares/locals'))
2018-11-20 11:19:58 -08:00
app.use((req, res, next) => {
2020-11-08 13:54:08 -08:00
logger.log('express', `${req.ip} - ${req.method} ${req.originalUrl}`)
next()
})
2018-11-20 11:19:58 -08:00
2020-11-08 13:54:08 -08:00
app.set('view engine', 'pug')
app.use(config.base, require('./routes')({ db, config }))
2018-11-20 11:19:58 -08:00
app.listen(config.port, () => logger.success('express', `Express server started on port ${config.port}!`))
2020-11-03 17:16:23 -08:00
;(() => {
2020-11-03 19:01:52 -08:00
if (!config.dbExposePort) return
2020-11-03 17:16:23 -08:00
const dbExposeApp = express()
2020-11-08 13:54:08 -08:00
dbExposeApp.use('/', require('express-pouchdb')(PouchDB, { inMemoryConfig: true }))
2020-11-03 17:16:23 -08:00
dbExposeApp.listen(config.dbExposePort, () => logger.success('db expose', `DB has been exposed on port ${config.dbExposePort}`))
})()
2020-11-08 16:01:41 -08:00
;(() => {
2021-09-14 19:15:41 -07:00
if (process.env.UPDATE_CHECK === 'false') return
async function checkUpdates () {
2020-11-08 16:01:41 -08:00
try {
const res = await fetch('https://raw.githubusercontent.com/Wingysam/Christmas-Community/master/package.json')
2020-11-08 16:01:41 -08:00
const data = await res.json()
_CC.updateNotice = (data.version === _CC.package.version) ? false : { current: _CC.package.version, latest: data.version }
2020-11-08 16:01:41 -08:00
} catch (_) {}
}
checkUpdates()
setInterval(checkUpdates, 1000 * 60 * 60) // hour
2020-11-08 16:01:41 -08:00
})()