Implement admin level authentication

This commit is contained in:
Akkadius 2017-09-06 04:42:05 -05:00
parent ed83e014cd
commit d80c26bcd6
11 changed files with 55 additions and 13 deletions

6
app.js
View File

@ -21,7 +21,7 @@ app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
if(glass_config.ip_ranges_to_allow) {
if(glass_config.ip_ranges_to_allow != "") {
var ip_filter = require('express-ipfilter').IpFilter;
var ips = glass_config.ip_ranges_to_allow;
app.use(ip_filter(ips, {mode: 'allow'}));
@ -377,11 +377,11 @@ alert_check_timer = setInterval(function(){
console.log("[Timer] lpm: %s lpm_th: %s", leases_per_minute, glass_config.leases_per_minute_threshold);
if (leases_per_minute <= glass_config.leases_per_minute_threshold && alert_status['leases_per_minute'] == 0) {
alert_status['leases_per_minute'] = 1;
slack_message(":warning: WARNING: DHCP leases per minute have dropped below critical threshold (" + parseInt(glass_config.leases_per_minute_threshold).toLocaleString('en') + ") Current (" + parseInt(leases_per_minute).toLocaleString('en') + ")");
slack_message(":warning: WARNING: DHCP leases per minute have dropped below threshold (" + parseInt(glass_config.leases_per_minute_threshold).toLocaleString('en') + ") Current (" + parseInt(leases_per_minute).toLocaleString('en') + ")");
}
else if (leases_per_minute >= glass_config.leases_per_minute_threshold && alert_status['leases_per_minute'] == 1) {
alert_status['leases_per_minute'] = 0;
slack_message(":white_check_mark: CLEAR: DHCP leases per minute have returned to above the critical threshold (" + parseInt(glass_config.leases_per_minute_threshold).toLocaleString('en') + ") Current (" + parseInt(leases_per_minute).toLocaleString('en') + ")");
slack_message(":white_check_mark: CLEAR: DHCP leases per minute have returned to above threshold (" + parseInt(glass_config.leases_per_minute_threshold).toLocaleString('en') + ") Current (" + parseInt(leases_per_minute).toLocaleString('en') + ")");
}
}
}, (60 * 1000));

32
lib/authorize.js Normal file
View File

@ -0,0 +1,32 @@
var basic_auth = require('basic-auth');
/* Read Config */
var json_file = require('jsonfile');
var glass_config = json_file.readFileSync('config/glass_config.json');
module.exports = {
auth: function (req, res, next) {
var user = basic_auth(req);
function unauthorized(res) {
res.set('WWW-Authenticate', 'Basic realm=Authorization Required');
return res.sendStatus(401);
};
if(glass_config.admin_user == ""){
next();
return;
}
if (!user || !user.name || !user.pass) {
return unauthorized(res);
}
if (user.name === glass_config.admin_user && user.pass === glass_config.admin_password) {
next();
} else {
return unauthorized(res);
}
}
};

View File

@ -2,8 +2,9 @@ var express = require('express');
var router = express.Router();
var fs = require('fs');
var template_render = require('../lib/render_template.js');
var authorize = require('../lib/authorize.js');
router.get('/', function(req, res, next) {
router.get('/', authorize.auth, function(req, res, next) {
var content = "";

View File

@ -5,7 +5,9 @@
var express = require('express');
var router = express.Router();
router.post('/', function(req, res, next) {
var authorize = require('../lib/authorize.js');
router.post('/', authorize.auth, function(req, res, next) {
var request = req.body;

View File

@ -2,8 +2,9 @@ var express = require('express');
var router = express.Router();
var fs = require('fs');
var template_render = require('../lib/render_template.js');
var authorize = require('../lib/authorize.js');
router.post('/', function(req, res, next) {
router.post('/', authorize.auth, function(req, res, next) {
var request = req.body;
res.send(fs.readFileSync("./config_backups/" + request.snapshot, 'utf8'));
});

View File

@ -2,8 +2,9 @@ var express = require('express');
var router = express.Router();
var fs = require('fs');
var template_render = require('../lib/render_template.js');
var authorize = require('../lib/authorize.js');
router.get('/', function(req, res, next) {
router.get('/', authorize.auth, function(req, res, next) {
var content = "";

View File

@ -2,8 +2,9 @@ var express = require('express');
var router = express.Router();
var fs = require('fs');
var template_render = require('../lib/render_template.js');
var authorize = require('../lib/authorize.js');
router.get('/', function(req, res, next) {
router.get('/', authorize.auth, function(req, res, next) {
var content = "";
@ -41,7 +42,7 @@ router.get('/', function(req, res, next) {
});
});
router.post('/', function(req, res, next) {
router.post('/', authorize.auth, function(req, res, next) {
var request = req.body;
const execSync = require('child_process').execSync;

View File

@ -4,8 +4,9 @@
var express = require('express');
var router = express.Router();
var authorize = require('../lib/authorize.js');
router.post('/', function(req, res, next) {
router.post('/', authorize.auth, function(req, res, next) {
var request = req.body;
var json_file = require('jsonfile');
var glass_config = json_file.readFileSync('config/glass_config.json');

View File

@ -6,8 +6,9 @@ var express = require('express');
var router = express.Router();
var fs = require('fs');
var template_render = require('../lib/render_template.js');
var authorize = require('../lib/authorize.js');
router.get('/', function(req, res, next) {
router.get('/', authorize.auth, function(req, res, next) {
glass_settings_template = template_render.get_template("glass_alerts");

View File

@ -6,8 +6,9 @@ var express = require('express');
var router = express.Router();
var fs = require('fs');
var template_render = require('../lib/render_template.js');
var authorize = require('../lib/authorize.js');
router.get('/', function(req, res, next) {
router.get('/', authorize.auth, function(req, res, next) {
glass_settings_template = template_render.get_template("glass_settings");

View File

@ -4,8 +4,9 @@
var express = require('express');
var router = express.Router();
var authorize = require('../lib/authorize.js');
router.post('/', function(req, res, next) {
router.post('/', authorize.auth, function(req, res, next) {
var request = req.body;
var json_file = require('jsonfile');