utils.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. const _ = require('lodash');
  2. const exec = require('child_process').exec;
  3. const execFile = require('child_process').execFile;
  4. const { Liquid } = require('liquidjs');
  5. const logger = require('../logger').global;
  6. module.exports = {
  7. /**
  8. * @param {String} cmd
  9. * @returns {Promise}
  10. */
  11. exec: function (cmd) {
  12. return new Promise((resolve, reject) => {
  13. exec(cmd, function (err, stdout, /*stderr*/) {
  14. if (err && typeof err === 'object') {
  15. reject(err);
  16. } else {
  17. resolve(stdout.trim());
  18. }
  19. });
  20. });
  21. },
  22. /**
  23. * @param {String} cmd
  24. * @param {Array} args
  25. * @returns {Promise}
  26. */
  27. execFile: function (cmd, args) {
  28. logger.debug('CMD: ' + cmd + ' ' + (args ? args.join(' ') : ''));
  29. return new Promise((resolve, reject) => {
  30. execFile(cmd, args, function (err, stdout, /*stderr*/) {
  31. if (err && typeof err === 'object') {
  32. reject(err);
  33. } else {
  34. resolve(stdout.trim());
  35. }
  36. });
  37. });
  38. },
  39. /**
  40. * Used in objection query builder
  41. *
  42. * @param {Array} omissions
  43. * @returns {Function}
  44. */
  45. omitRow: function (omissions) {
  46. /**
  47. * @param {Object} row
  48. * @returns {Object}
  49. */
  50. return (row) => {
  51. return _.omit(row, omissions);
  52. };
  53. },
  54. /**
  55. * Used in objection query builder
  56. *
  57. * @param {Array} omissions
  58. * @returns {Function}
  59. */
  60. omitRows: function (omissions) {
  61. /**
  62. * @param {Array} rows
  63. * @returns {Object}
  64. */
  65. return (rows) => {
  66. rows.forEach((row, idx) => {
  67. rows[idx] = _.omit(row, omissions);
  68. });
  69. return rows;
  70. };
  71. },
  72. /**
  73. * @returns {Object} Liquid render engine
  74. */
  75. getRenderEngine: function () {
  76. const renderEngine = new Liquid({
  77. root: __dirname + '/../templates/'
  78. });
  79. /**
  80. * nginxAccessRule expects the object given to have 2 properties:
  81. *
  82. * directive string
  83. * address string
  84. */
  85. renderEngine.registerFilter('nginxAccessRule', (v) => {
  86. if (typeof v.directive !== 'undefined' && typeof v.address !== 'undefined' && v.directive && v.address) {
  87. return `${v.directive} ${v.address};`;
  88. }
  89. return '';
  90. });
  91. return renderEngine;
  92. }
  93. };