2021-03-23 21:04:17 +01:00
|
|
|
|
|
|
|
const pingbackReceiver = require('./receive')
|
2021-04-05 17:44:27 +02:00
|
|
|
const log = require('pino')()
|
2021-03-23 21:04:17 +01:00
|
|
|
|
|
|
|
function success(msg) {
|
|
|
|
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
|
|
<methodResponse>
|
|
|
|
<params>
|
|
|
|
<param>
|
|
|
|
<value>
|
|
|
|
<string>
|
|
|
|
${msg}
|
|
|
|
</string>
|
|
|
|
</value>
|
|
|
|
</param>
|
|
|
|
</params>
|
|
|
|
</methodResponse>
|
|
|
|
`
|
|
|
|
}
|
|
|
|
|
|
|
|
function err(e) {
|
2021-04-05 17:44:27 +02:00
|
|
|
log.error(e, 'pingback receive went wrong')
|
2021-03-23 21:04:17 +01:00
|
|
|
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
|
|
<methodResponse>
|
|
|
|
<fault>
|
|
|
|
<value>
|
|
|
|
<struct>
|
|
|
|
<member>
|
|
|
|
<name>
|
|
|
|
faultCode
|
|
|
|
</name>
|
|
|
|
<value>
|
|
|
|
<int>
|
|
|
|
0
|
|
|
|
</int>
|
|
|
|
</value>
|
|
|
|
</member>
|
|
|
|
<member>
|
|
|
|
<name>
|
|
|
|
faultString
|
|
|
|
</name>
|
|
|
|
<value>
|
|
|
|
<string>
|
2021-03-24 15:57:40 +01:00
|
|
|
Sorry pal. Malformed request? Or something else, who knows...
|
2021-03-23 21:04:17 +01:00
|
|
|
</string>
|
|
|
|
</value>
|
|
|
|
</member>
|
|
|
|
</struct>
|
|
|
|
</value>
|
|
|
|
</fault>
|
|
|
|
</methodResponse>`
|
|
|
|
}
|
|
|
|
|
|
|
|
function route(router) {
|
|
|
|
router.post("pingback receive endpoint", "/pingback", async (ctx) => {
|
|
|
|
try {
|
|
|
|
if(!pingbackReceiver.validate(ctx.request.body)) {
|
|
|
|
throw "malformed pingback request"
|
|
|
|
}
|
|
|
|
|
|
|
|
// we do NOT await this on purpose.
|
|
|
|
pingbackReceiver.receive(ctx.request.body)
|
|
|
|
|
|
|
|
ctx.status = 200
|
|
|
|
ctx.body = success("Thanks, bro. Will process this pingback soon, pinky swear!")
|
|
|
|
} catch(e) {
|
|
|
|
ctx.status = 200
|
|
|
|
ctx.body = err(e)
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = {
|
|
|
|
route
|
|
|
|
}
|