Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.
 
 
 

37 rindas
1.3 KiB

  1. // allow Wappler to run queries on the server
  2. const crypto = require('crypto');
  3. const App = require("../core/app");
  4. const config = require('./config');
  5. module.exports = function (app) {
  6. app.post('/_db_', async (req, res) => {
  7. const time = req.get('auth-time');
  8. const hash = req.get('auth-hash');
  9. if (!time || !hash || isNaN(time)) return res.status(400).json({ error: 'Auth headers missing' });
  10. const diff = Math.abs(Date.now() - time) / 1000;
  11. if (diff > 60) return res.status(400).json({ error: 'Auth time diff to high' });
  12. if (hash !== crypto.createHmac('sha256', config.secret).update(req.rawBody).digest('hex')) return res.status(400).json({ error: 'Auth hash invalid' });
  13. const sc = new App(req, res);
  14. const db = sc.getDbConnection(req.body.name);
  15. let results = [];
  16. try {
  17. results = await db.raw(req.body.query);
  18. } catch (error) {
  19. return res.json({ error: error.sqlMessage });
  20. }
  21. if (db.client.config.client == 'mysql' || db.client.config.client == 'mysql2') {
  22. results = results[0];
  23. } else if (db.client.config.client == 'postgres' || db.client.config.client == 'redshift') {
  24. results = results.rows;
  25. }
  26. res.json({ results });
  27. });
  28. }