feat(provider): endpoint is added to validate the webhook …

feat(provider):  endpoint is added to validate the webhook …
This commit is contained in:
Leifer Mendez
2022-12-20 08:56:19 +01:00
committed by GitHub
2 changed files with 49 additions and 9 deletions

View File

@@ -10,16 +10,16 @@ const URL = `https://graph.facebook.com/v15.0`
*
*
* Necesitas las siguientes tokens y valores
* { token, numberId, vendorNumber, verify_token }
* { jwtToken, numberId, vendorNumber, verifyToken }
*/
class MetaProvider extends ProviderClass {
metHook
token
jwtToken
numberId
constructor({ token, numberId, verifyToken }, _port = 3000) {
constructor({ jwtToken, numberId, verifyToken }, _port = 3000) {
super()
this.token = token
this.jwtToken = jwtToken
this.numberId = numberId
this.metHook = new MetaWebHookServer(verifyToken, _port)
this.metHook.start()
@@ -60,7 +60,7 @@ class MetaProvider extends ProviderClass {
body,
{
headers: {
Authorization: `Bearer ${this.token}`,
Authorization: `Bearer ${this.jwtToken}`,
},
}
)

View File

@@ -5,12 +5,12 @@ const { urlencoded } = require('body-parser')
class MetaWebHookServer extends EventEmitter {
metaServer
metaPort
verifyToken
constructor(_verifyToken, _metaPort) {
token
constructor(_token, _metaPort) {
super()
this.metaServer = this.buildHTTPServer()
this.metaPort = _metaPort
this.verifyToken = _verifyToken
this.token = _token
}
/**
@@ -32,14 +32,54 @@ class MetaWebHookServer extends EventEmitter {
res.end(json)
}
/**
* Valida el token
* @alpha
* @param {string} mode
* @param {string} token
* @example tokenIsValid('subscribe', 'MYTOKEN')
*/
tokenIsValid(mode, token) {
return mode === 'subscribe' && this.token === token
}
/**
* Verificación del token
* @param {*} req
* @param {*} res
*/
verifyToken = (req, res) => {
const { query } = req
const mode = query['hub.mode']
const token = query['hub.verify_token']
const challenge = query['hub.challenge']
if (!mode || !token) {
return res.sendStatus(403)
}
if (this.tokenIsValid(mode, token)) {
console.log('Webhook verified--->😎😎😎😎')
res.status(200).send(challenge)
}
if (!this.tokenIsValid(mode, token)) {
res.sendStatus(403)
}
}
/**
* Contruir HTTP Server
* @returns
*/
buildHTTPServer = () => {
polka()
.use(urlencoded({ extended: true }))
.get('/webhook', this.verifyToken)
return polka()
.use(urlencoded({ extended: true }))
.post('/meta-hook', this.incomingMsg)
.post('/webhook', this.incomingMsg)
}
/**