Files
dbgate/packages/api/src/main.js
2020-11-07 11:43:31 +01:00

101 lines
3.0 KiB
JavaScript

const express = require('express');
const basicAuth = require('express-basic-auth');
const bodyParser = require('body-parser');
const fileUpload = require('express-fileupload');
const http = require('http');
const cors = require('cors');
const io = require('socket.io');
const fs = require('fs');
const findFreePort = require('find-free-port');
const childProcessChecker = require('./utility/childProcessChecker');
const useController = require('./utility/useController');
const socket = require('./utility/socket');
const connections = require('./controllers/connections');
const serverConnections = require('./controllers/serverConnections');
const databaseConnections = require('./controllers/databaseConnections');
const metadata = require('./controllers/metadata');
const sessions = require('./controllers/sessions');
const runners = require('./controllers/runners');
const jsldata = require('./controllers/jsldata');
const config = require('./controllers/config');
const files = require('./controllers/files');
const archive = require('./controllers/archive');
const uploads = require('./controllers/uploads');
const { rundir } = require('./utility/directories');
function start(argument = null) {
// console.log('process.argv', process.argv);
const app = express();
const server = http.createServer(app);
socket.set(io(server));
if (process.env.LOGIN && process.env.PASSWORD) {
app.use(
basicAuth({
users: {
[process.env.LOGIN]: process.env.PASSWORD,
},
challenge: true,
realm: 'DbGate Web App',
})
);
}
app.use(cors());
app.use(bodyParser.json({ limit: '50mb' }));
app.use(
'/uploads',
fileUpload({
limits: { fileSize: 4 * 1024 * 1024 },
})
);
useController(app, '/connections', connections);
useController(app, '/server-connections', serverConnections);
useController(app, '/database-connections', databaseConnections);
useController(app, '/metadata', metadata);
useController(app, '/sessions', sessions);
useController(app, '/runners', runners);
useController(app, '/jsldata', jsldata);
useController(app, '/config', config);
useController(app, '/files', files);
useController(app, '/archive', archive);
useController(app, '/uploads', uploads);
if (process.env.PAGES_DIRECTORY) {
app.use('/pages', express.static(process.env.PAGES_DIRECTORY));
}
app.use('/runners/data', express.static(rundir()));
if (fs.existsSync('/home/dbgate-docker/build')) {
// server static files inside docker container
app.use(express.static('/home/dbgate-docker/build'));
} else {
app.get('/', (req, res) => {
res.send('DbGate API');
});
}
if (argument == '--dynport') {
childProcessChecker();
findFreePort(53911, function (err, port) {
server.listen(port, () => {
console.log(`DbGate API listening on port ${port}`);
process.send({ msgtype: 'listening', port });
});
});
} else {
server.listen(3000);
}
}
module.exports = { start };