diff --git a/app.js b/app.js index b1a4d81..de300dd 100644 --- a/app.js +++ b/app.js @@ -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)); diff --git a/lib/authorize.js b/lib/authorize.js new file mode 100644 index 0000000..b290e43 --- /dev/null +++ b/lib/authorize.js @@ -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); + } + } +}; + diff --git a/routes/dhcp_config.js b/routes/dhcp_config.js index 8081a0c..6812727 100644 --- a/routes/dhcp_config.js +++ b/routes/dhcp_config.js @@ -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 = ""; diff --git a/routes/dhcp_config_save.js b/routes/dhcp_config_save.js index 568860b..d75e44a 100644 --- a/routes/dhcp_config_save.js +++ b/routes/dhcp_config_save.js @@ -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; diff --git a/routes/dhcp_config_snapshot_view.js b/routes/dhcp_config_snapshot_view.js index 4556c44..218744e 100644 --- a/routes/dhcp_config_snapshot_view.js +++ b/routes/dhcp_config_snapshot_view.js @@ -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')); }); diff --git a/routes/dhcp_config_snapshots.js b/routes/dhcp_config_snapshots.js index c16cafe..1960394 100644 --- a/routes/dhcp_config_snapshots.js +++ b/routes/dhcp_config_snapshots.js @@ -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 = ""; diff --git a/routes/dhcp_start_stop_restart.js b/routes/dhcp_start_stop_restart.js index 28e9196..e77b079 100644 --- a/routes/dhcp_start_stop_restart.js +++ b/routes/dhcp_start_stop_restart.js @@ -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; diff --git a/routes/glass_alert_settings_save.js b/routes/glass_alert_settings_save.js index 6668c1a..232f629 100644 --- a/routes/glass_alert_settings_save.js +++ b/routes/glass_alert_settings_save.js @@ -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'); diff --git a/routes/glass_alerts.js b/routes/glass_alerts.js index fcc5cf5..99813e1 100644 --- a/routes/glass_alerts.js +++ b/routes/glass_alerts.js @@ -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"); diff --git a/routes/glass_settings.js b/routes/glass_settings.js index c0a1571..ff3988b 100644 --- a/routes/glass_settings.js +++ b/routes/glass_settings.js @@ -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"); diff --git a/routes/glass_settings_save.js b/routes/glass_settings_save.js index 61b7e40..0aa6fd4 100644 --- a/routes/glass_settings_save.js +++ b/routes/glass_settings_save.js @@ -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');