51 lines
1.3 KiB
JavaScript
51 lines
1.3 KiB
JavaScript
const express = require('express')
|
|
const bodyParser = require('body-parser')
|
|
const hooks = require('./hooks')
|
|
|
|
console.log('Initialize express server')
|
|
|
|
const app = express()
|
|
|
|
app.use(bodyParser.json())
|
|
|
|
const port = process.env.SERVER_PORT || 8080
|
|
|
|
app.get('/', (req, res) => {
|
|
res.status(200).send('OK')
|
|
})
|
|
|
|
app.post('/webhook', async (req, res) => {
|
|
const selectedHooks = []
|
|
if(req.query['hooks']) {
|
|
req.query.hooks.split(',').forEach(hookName => {
|
|
const hook = hooks[hookName.trim()]
|
|
if(!hook) {
|
|
console.warn(`Hook ${hookName} does not exist! from=${req.ip}`)
|
|
return
|
|
}
|
|
selectedHooks.push(hook)
|
|
})
|
|
}else {
|
|
selectedHooks.push(...Object.values(hooks))
|
|
}
|
|
|
|
const errors = {}
|
|
const promises = selectedHooks.map(async hook => {
|
|
console.log(`Execute hook ${hook.name} from=${req.ip}`)
|
|
const error = await hook.exec(req)
|
|
if(error) {
|
|
errors[hook.name] = error
|
|
}
|
|
})
|
|
await Promise.all(promises)
|
|
if(Object.keys(errors).length) {
|
|
console.error('Errors while executing webhook', errors)
|
|
res.status(400).json(errors)
|
|
return
|
|
}
|
|
res.status(200).send()
|
|
})
|
|
|
|
app.listen(port)
|
|
console.log(`Started express server on port ${port}`)
|