167 lines
5.0 KiB
JavaScript
167 lines
5.0 KiB
JavaScript
const url = require("url");
|
|
const express = require("express");
|
|
|
|
import Arena from 'bull-arena';
|
|
import { TF_APPLY_QUEUE, TF_DESTROY_QUEUE } from './queues';
|
|
|
|
const app = express();
|
|
const routesApi = require('./routes/api')
|
|
const swaggerUi = require('swagger-ui-express');
|
|
const swaggerJsdoc = require('swagger-jsdoc');
|
|
const cookieParser = require('cookie-parser');
|
|
const bodyParser = require('body-parser');
|
|
const passport = require('./passport');
|
|
const db = require('./mongo');
|
|
const https = require('https');
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
const PORT = process.env.PORT || 3000;
|
|
const SSL_PORT = process.env.SSL_PORT || 3100;
|
|
|
|
function _getRedisConfig(redisUrl) {
|
|
const redisConfig = url.parse(redisUrl);
|
|
return {
|
|
host: redisConfig.hostname || 'localhost',
|
|
port: Number(redisConfig.port || 6379),
|
|
database: (redisConfig.pathname || '/0').substr(1) || '0',
|
|
password: redisConfig.auth ? redisConfig.auth.split(':')[1] : undefined
|
|
};
|
|
}
|
|
|
|
app.use('/arena', Arena(
|
|
{
|
|
queues: [
|
|
{
|
|
name: TF_APPLY_QUEUE,
|
|
hostId: 'Worker',
|
|
redis: _getRedisConfig(process.env.REDIS_URL)
|
|
},
|
|
{
|
|
name: TF_DESTROY_QUEUE,
|
|
hostId: 'Worker',
|
|
redis: _getRedisConfig(process.env.REDIS_URL)
|
|
}
|
|
]
|
|
},
|
|
{
|
|
basePath: '/',
|
|
disableListen: true
|
|
}
|
|
));
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Config the app, include middlewares
|
|
//-----------------------------------------------------------------------------
|
|
//app.set('views', __dirname + '/views');
|
|
//app.set('view engine', 'ejs');
|
|
app.use(cookieParser());
|
|
// parse application/json
|
|
// parse application/x-www-form-urlencoded
|
|
app.use(bodyParser.urlencoded({ extended: false }))
|
|
// parse application/json
|
|
app.use(bodyParser.json())
|
|
app.use(express.static(__dirname + '/../dist/qmi-cloud'));
|
|
|
|
passport.init(app);
|
|
|
|
app.use("/api", routesApi);
|
|
|
|
app.get('/*',(req, res, next) =>{
|
|
if (req.originalUrl.indexOf("/api-docs") !== -1 || req.originalUrl.indexOf("/arena") !== -1 ) {
|
|
return next();
|
|
} else {
|
|
res.sendFile(path.join(__dirname,'/../dist/qmi-cloud/index.html'));
|
|
}
|
|
});
|
|
|
|
app.get('/login', passport.ensureAuthenticatedDoLogin, function(req, res) {
|
|
res.redirect("/");
|
|
});
|
|
|
|
app.get('/logout', function(req, res) {
|
|
res.redirect("/");
|
|
});
|
|
|
|
/*app.get('/account', passport.ensureAuthenticatedDoLogin, function(req, res) {
|
|
res.render('account', { user: req.user });
|
|
});
|
|
|
|
app.get("/getmyprovs", passport.ensureAuthenticatedDoLogin, async function(req, res) {
|
|
var provisions = await db.provision.get({"userId": req.user._id});
|
|
var destroys = await db.destroy.get({"userId": req.user._id});
|
|
provisions.forEach(prov => {
|
|
var foundDes = destroys.filter(d=>{
|
|
return d.provId.toString() === prov._id.toString()
|
|
});
|
|
if (foundDes.length){
|
|
prov.destroyId = foundDes[0]._id.toString();
|
|
prov.statusDestroy = foundDes[0].status;
|
|
} else {
|
|
prov.destroyId = "-";
|
|
}
|
|
});
|
|
//res.json({ user: req.user, provisions: provisions, destroys: destroys });
|
|
res.render('provisions', { user: req.user, provisions: provisions, destroys: destroys });
|
|
});
|
|
|
|
app.get('/myprovisions', passport.ensureAuthenticatedDoLogin, async function(req, res) {
|
|
var provisions = await db.provision.get({"userId": req.user._id});
|
|
var destroys = await db.destroy.get({"userId": req.user._id});
|
|
provisions.forEach(prov => {
|
|
var foundDes = destroys.filter(d=>{
|
|
return d.provId.toString() === prov._id.toString()
|
|
});
|
|
if (foundDes.length){
|
|
prov.destroyId = foundDes[0]._id.toString();
|
|
prov.statusDestroy = foundDes[0].status;
|
|
} else {
|
|
prov.destroyId = "-";
|
|
}
|
|
});
|
|
res.render('layout', { user: req.user, provisions: null, destroys: null });
|
|
});
|
|
|
|
app.get('/log/:id', async function(req, res, next){
|
|
try {
|
|
const mongoJob = await db.provision.getSingle(req.params.id);
|
|
if (!mongoJob){
|
|
return res.render('logs', { logs: "Does not exist" });
|
|
}
|
|
var file = fs.readFileSync(path.resolve(__dirname, 'proc-logs', mongoJob._id +".log"));
|
|
return res.render('logs', { logs: file, id: req.params.id });
|
|
} catch (error) {
|
|
next(error);
|
|
}
|
|
|
|
});
|
|
*/
|
|
const options = {
|
|
swaggerDefinition: {
|
|
// Like the one described here: https://swagger.io/specification/#infoObject
|
|
info: {
|
|
title: 'QMI Cloud - API',
|
|
version: '1.0.0',
|
|
//description: 'Test Express API with autogenerated swagger doc',
|
|
},
|
|
basePath: "/api"
|
|
},
|
|
// List of files to be processes. You can also set globs './routes/*.js'
|
|
apis: ['server/routes/**/*.js'],
|
|
};
|
|
|
|
const specs = swaggerJsdoc(options);
|
|
app.use('/api-docs', passport.ensureAuthenticatedDoLogin, swaggerUi.serve, swaggerUi.setup(specs));
|
|
|
|
|
|
app.listen(PORT, () => {
|
|
console.log(`Server listening on port ${PORT}`)
|
|
});
|
|
|
|
https.createServer({
|
|
key: fs.readFileSync(path.resolve(__dirname, 'certs', 'fake_server.key')),
|
|
cert: fs.readFileSync(path.resolve(__dirname, 'certs', 'fake_server.cert'))
|
|
}, app).listen(SSL_PORT, function(){
|
|
console.log(`Secure server listening on port ${SSL_PORT}`);
|
|
});
|