@frangoteam/fuxa
Version:
Web-based Process Visualization (SCADA/HMI/Dashboard) software
82 lines (75 loc) • 3.32 kB
JavaScript
/**
* 'api/resources': Diagnose API to GET resources: images
*/
const fs = require('fs');
const path = require('path');
var express = require("express");
const authJwt = require('../jwt-helper');
var runtime;
var secureFnc;
var checkGroupsFnc;
module.exports = {
init: function (_runtime, _secureFnc, _checkGroupsFnc) {
runtime = _runtime;
secureFnc = _secureFnc;
checkGroupsFnc = _checkGroupsFnc;
},
app: function () {
var resourcesApp = express();
resourcesApp.use(function (req, res, next) {
if (!runtime.project) {
res.status(404).end();
} else {
next();
}
});
/**
* GET Server logs folder content
*/
resourcesApp.get('/api/resources/images', secureFnc, function (req, res) {
var groups = checkGroupsFnc(req);
if (res.statusCode === 403) {
runtime.logger.error("api get resources/images: Tocken Expired");
} else if (authJwt.adminGroups.indexOf(groups) === -1) {
res.status(401).json({ error: "unauthorized_error", message: "Unauthorized!" });
runtime.logger.error("api get resources/images: Unauthorized!");
} else {
try {
var result = {...req.query, ...{ groups: [] }};
var resourcesDirs = getDirectories(runtime.settings.imagesFileDir);
for (var i = 0; i < resourcesDirs.length; i++) {
var group = { name: resourcesDirs[i], items: [] };
var dirPath = path.resolve(runtime.settings.imagesFileDir, resourcesDirs[i]);
var wwwSubDir = path.join('_images', resourcesDirs[i]);
var files = getFiles(dirPath, ['.jpg','.jpeg', '.png', '.gif', '.svg']);
for (var x = 0; x < files.length; x++) {
var filename = files[x].replace(/\.[^\/.]+$/, '');
group.items.push({ path: path.join(wwwSubDir, files[x]).split(path.sep).join(path.posix.sep), name: filename });
}
result.groups.push(group);
}
res.json(result);
} catch (err) {
if (err.code) {
res.status(400).json({ error: err.code, message: err.message });
} else {
res.status(400).json({ error: "unexpected_error", message: err.toString() });
}
runtime.logger.error("api get resources/images: " + err.message);
}
}
});
return resourcesApp;
}
}
function getDirectories (pathDir) {
const directoriesInDIrectory = fs.readdirSync(pathDir, { withFileTypes: true })
.filter((item) => item.isDirectory())
.map((item) => item.name);
return directoriesInDIrectory;
}
function getFiles (pathDir, extensions) {
const filesInDIrectory = fs.readdirSync(pathDir)
.filter((item) => extensions.indexOf(path.extname(item).toLowerCase()) !== -1);
return filesInDIrectory;
}