-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathapp.js
137 lines (116 loc) · 4.03 KB
/
app.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
// jshint esversion: 6
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var arplogger_config = require('./config');
var routes = require('./routes/index');
var rp = require('request-promise');
var MongoClient = require("mongodb").MongoClient;
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');
// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(express.static(path.join(__dirname, 'node_modules/bootstrap/dist')));
app.use(express.static(path.join(__dirname, 'node_modules/jquery/dist')));
app.use(express.static(path.join(__dirname, 'node_modules/angular')));
app.use(express.static(path.join(__dirname, 'node_modules/angular-aria')));
app.use(express.static(path.join(__dirname, 'node_modules/angular-animate')));
app.use(express.static(path.join(__dirname, 'node_modules/angular-material')));
app.use('/', routes);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
// error handlers
// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: err
});
});
}
// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: {}
});
});
// kick off the polling notifier thing
var moment = require('moment');
if(arplogger_config.arpListener){
console.log('monitoring arp');
const arpMonitor = require("arp-monitor")();
// once per minute an ARP ping gets sent out
// 50 seconds after every ARP ping, the active clients table is reported
// via this update event, so it may take a couple of minutes for
// a new device to be detected or an absent device to drop off
// you won't get the first report until 50 seconds after the app starts
arpMonitor.on("update", function(activeClients) {
var macs = Object.keys(activeClients);
var obj = {
timestamp: moment().format(),
macCount: macs.length,
macs: macs
};
if(arplogger_config.localMongo_enabled) {
var insertDocument = (db, doc, callback) => {
console.log("Inserting document");
var collection = db.collection('arp_reports');
collection.insert(doc, (err, result) => {
console.log("Document Inserted");
callback(result);
});
};
var url = 'mongodb://localhost:27017/arplogger';
console.log("Connecting to Database");
MongoClient.connect(url, (err, db) => {
console.log("Connected to Database");
insertDocument(db, obj, () => {
console.log("Closing Database Connection");
db.close();
});
});
}
if(arplogger_config.remoteServer_enabled) {
let options = {
method: 'POST',
uri: arplogger_config.remoteServer_url,
body: obj,
json: true // Automatically stringifies the body to JSON
};
rp(options)
.then(function (parsedBody) {
console.log('posted to remote server');
})
.catch(function (err) {
console.log('failed to post to remote server', err.message, err.stack);
});
}
// right now log the object to the console
// ultimately append it to a file or something
console.log(obj);
// activeclients is an object with
// keys that are mac addesses and
// values that are ip addresses
});
}
module.exports = app;