mirror of
https://github.com/openmhz/trunk-server.git
synced 2026-11-09 15:27:30 -05:00
156 lines
5.2 KiB
JavaScript
156 lines
5.2 KiB
JavaScript
const mongoose = require("mongoose");
|
|
const express = require("express");
|
|
const passport = require("passport");
|
|
const path = require("path");
|
|
const secrets = require("./config/secrets");
|
|
const configurePassport = require("./config/passport");
|
|
const configureExpress = require("./config/express");
|
|
const systems = require("./controllers/systems");
|
|
const groups = require("./controllers/groups");
|
|
const talkgroups = require("./controllers/talkgroups");
|
|
const Permission = require("./models/permission");
|
|
require("./models/user");
|
|
const multer = require('multer');
|
|
|
|
var upload = multer({
|
|
dest: 'uploads/'
|
|
});
|
|
// -------------------------------------------
|
|
|
|
const app = express()
|
|
|
|
// -------------------------------------------
|
|
|
|
const connect = () => {
|
|
mongoose.connect(secrets.db, (err, res) => {
|
|
if (err) {
|
|
console.log(`Error connecting to ${secrets.db}. ${err}`)
|
|
} else {
|
|
console.log(`Successfully connected to ${secrets.db}.`)
|
|
}
|
|
})
|
|
}
|
|
connect()
|
|
|
|
mongoose.connection.on("error", console.error)
|
|
mongoose.connection.on("disconnected", connect)
|
|
|
|
// -------------------------------------------
|
|
|
|
const isDev = process.env.NODE_ENV === "development"
|
|
|
|
|
|
/*
|
|
async function getRole(req) {
|
|
let promise = new Promise((resolve, reject) => {
|
|
if (req.params.shortName && req.user) {
|
|
var short_name = req.params.shortName.toLowerCase();
|
|
var userId = req.user._id;
|
|
Permission.findOne({'userId': userId, 'shortName': short_name}, function(err, permission) {
|
|
if (err) {
|
|
console.error('Error - getRole userId: ' + userId + ' shortName: ' + short_name + ' error: ' + err);
|
|
reject(-1);
|
|
}
|
|
console.log('Found - getRole userId: ' + userId + ' shortName: ' + short_name + ' role: ' + permission.role);
|
|
|
|
resolve(permission.role);
|
|
});
|
|
} else {
|
|
reject(-1);
|
|
}});
|
|
return promise;
|
|
}*/
|
|
|
|
|
|
|
|
function isOwner(req, res, next) {
|
|
if (req.params.shortName && req.user) {
|
|
var short_name = req.params.shortName.toLowerCase();
|
|
var userId = req.user._id;
|
|
Permission.findOne({'userId': userId, 'shortName': short_name}, function(err, permission) {
|
|
if (err) {
|
|
console.error('Error - getRole userId: ' + userId + ' shortName: ' + short_name + ' error: ' + err);
|
|
}
|
|
console.log('Found - getRole userId: ' + userId + ' shortName: ' + short_name + ' role: ' + permission.role);
|
|
if ( permission.role >= 15) {
|
|
return next();
|
|
} else {
|
|
res.status(401).send({
|
|
success: false,
|
|
message: "Insufficent Permission, role: " + permission.role
|
|
});
|
|
}
|
|
|
|
});
|
|
}
|
|
}
|
|
|
|
|
|
function isAdmin(req, res, next) {
|
|
if (req.params.shortName && req.user) {
|
|
var short_name = req.params.shortName.toLowerCase();
|
|
var userId = req.user._id;
|
|
Permission.findOne({'userId': userId, 'shortName': short_name}, function(err, permission) {
|
|
if (err) {
|
|
console.error('Error - getRole userId: ' + userId + ' shortName: ' + short_name + ' error: ' + err);
|
|
}
|
|
console.log('Found - getRole userId: ' + userId + ' shortName: ' + short_name + ' role: ' + permission.role);
|
|
if (permission.role >= 10) {
|
|
return next();
|
|
} else {
|
|
res.status(401).send({
|
|
success: false,
|
|
message: "Insufficent Permission, role: " + permission.role
|
|
});
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
function isLoggedIn(req, res, next) {
|
|
if (req.isAuthenticated()) return next();
|
|
res.status(401).send({
|
|
success: false,
|
|
message: "Not Authenticated."
|
|
});
|
|
};
|
|
|
|
// -------------------------------------------
|
|
|
|
configurePassport(app, passport)
|
|
configureExpress(app, passport)
|
|
|
|
// -------------------------------------------
|
|
app.use(express.static(path.join(__dirname, "public")));
|
|
app.get("")
|
|
|
|
//app.get("/permissions/:shortname", isOwner, permissions.fetchPermissions)
|
|
/*app.get("/permissions/:shortName", permissions.fetchPermissions);
|
|
app.delete("/permissions/:shortName/:permissionId", isAdmin, permissions.deletePermission);
|
|
app.post("/permissions/:shortName/:permissionId", isAdmin, permissions.updatePermission);
|
|
app.post("/permissions/:shortName", isAdmin, permissions.addPermission);*/
|
|
app.get("/talkgroups/:shortName", isLoggedIn, talkgroups.fetchTalkgroups)
|
|
app.post("/talkgroups/:shortName/import", isLoggedIn, upload.single('file'), talkgroups.importTalkgroups)
|
|
app.get("/talkgroups/:shortName/export", isLoggedIn, talkgroups.exportTalkgroups)
|
|
app.post("/groups/:shortName/reorder", isLoggedIn, groups.reorderGroups);
|
|
app.post("/groups/:shortName/:groupId?", isLoggedIn, groups.upsertGroup);
|
|
app.get("/groups/:shortName/:groupId?", isLoggedIn, groups.getGroups);
|
|
app.delete("/groups/:shortName/:groupId", isLoggedIn, groups.deleteGroup);
|
|
app.get("/systems", isLoggedIn, systems.listSystems)
|
|
app.delete("/systems/:shortName", isLoggedIn, systems.deleteSystem)
|
|
app.post("/systems/:shortName", [isLoggedIn, systems.ownSystem, systems.validateSystem, systems.updateSystem])
|
|
app.post("/systems", [isLoggedIn, systems.uniqueShortName, systems.validateSystem, systems.createSystem])
|
|
|
|
app.get("*", (req, res, next) => {
|
|
res.sendFile(__dirname + '/public/index.html');
|
|
});
|
|
|
|
// start listening to incoming requests
|
|
app.listen(app.get("port"), app.get("host"), (err) => {
|
|
if (err) {
|
|
console.err(err.stack)
|
|
} else {
|
|
console.log(`App listening on port ${app.get("port")} [${process.env.NODE_ENV} mode]`)
|
|
}
|
|
})
|