DockerERTFF/lib/setup/database.js

37 lines
1.3 KiB
JavaScript

// allow Wappler to run queries on the server
const crypto = require('crypto');
const App = require("../core/app");
const config = require('./config');
module.exports = function (app) {
app.post('/_db_', async (req, res) => {
const time = req.get('auth-time');
const hash = req.get('auth-hash');
if (!time || !hash || isNaN(time)) return res.status(400).json({ error: 'Auth headers missing' });
const diff = Math.abs(Date.now() - time) / 1000;
if (diff > 60) return res.status(400).json({ error: 'Auth time diff to high' });
if (hash !== crypto.createHmac('sha256', config.secret).update(req.rawBody).digest('hex')) return res.status(400).json({ error: 'Auth hash invalid' });
const sc = new App(req, res);
const db = sc.getDbConnection(req.body.name);
let results = [];
try {
results = await db.raw(req.body.query);
} catch (error) {
return res.json({ error: error.sqlMessage });
}
if (db.client.config.client == 'mysql' || db.client.config.client == 'mysql2') {
results = results[0];
} else if (db.client.config.client == 'postgres' || db.client.config.client == 'redshift') {
results = results.rows;
}
res.json({ results });
});
}