gitea-bot/src/server.js

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}`)