diff --git a/software/app.js b/software/app.js index 7e0d674..bd0d59f 100644 --- a/software/app.js +++ b/software/app.js @@ -2,23 +2,80 @@ var config = require('./config'); var logger = require('./logger'); var parser = require('./utils/ProtocolParser'); +var defines = require('./utils/defines'); +var cardAuth = require('./auth/cardAuth'); +var encoder = require('./utils/ProtocolBinarify'); var server = net.createServer(function(c) { //'connection' listener + var client = c.remoteAddress + ':' + c.remotePort; logger({ event: 'Client connected', - client: c.remoteAddress + ':' + c.remotePort, + client: client, reason: 'System', }); c.on('end', function() { logger({ event: 'Client disconnected', - client: c.remoteAddress + ':' + c.remotePort, + client: client, reason: 'System', }); }).on('error', function(){ c.end(); }); + c.pipe((new parser).on('packet', function(p){ - console.log(p); + switch(p.type){ + case defines.event: + logger({ + event: defines.events.map[p.data.type], + client: client, + reason: 'Client', + }); + break; + case defines.request: + switch(p.data.type){ + case defines.requests.auth: + logger({ + event: 'Authenticating Card', + client: client, + reason: 'Client', + data: p.data.type.data, + }); + cardAuth(p.data.type.data, function(err, pass){ + if(err){ + logger({ + event: 'Error', + client: client, + reason: 'System', + err: err, + }); + c.write(encoder.response(defines.responses.natural)); + }else{ + if(pass !== null){ + logger({ + event: 'Auth Pass', + reason: pass, + }); + c.write(encoder.response(defines.responses.positive)); + }else{ + logger({ + event: 'Auth Deny', + reason: 'System', + identity: p.data.type.data, + }); + c.write(encoder.response(defines.responses.negative)); + } + } + }); + break; + default: + //What the hell? + break; + } + break; + default: + //What the hell? + break; + } })); }); diff --git a/software/auth/cardAuth.js b/software/auth/cardAuth.js new file mode 100644 index 0000000..7aa236d --- /dev/null +++ b/software/auth/cardAuth.js @@ -0,0 +1,3 @@ +module.exports = function(fingerPrint, callback){ + callback(null, null); +} \ No newline at end of file diff --git a/software/config.js b/software/config.js index 2ea2d41..f60211a 100644 --- a/software/config.js +++ b/software/config.js @@ -2,6 +2,6 @@ bindAddress: "0.0.0.0", bindPort : 57005, logFile : "./access.log", - sockFile : "/tmp/card9.sock" - accounts9 : "https://accounts.net9.org" + sockFile : "/tmp/card9.sock", + accounts9 : "https://accounts.net9.org", }; \ No newline at end of file diff --git a/software/logger.js b/software/logger.js index 7bc8a12..8ccacb9 100644 --- a/software/logger.js +++ b/software/logger.js @@ -22,7 +22,7 @@ toWriteBeforeOpen.push(jsonObj); } if(callback !== undefined){ - logStream.once('drain', callback) + logStream.once('drain', callback); } }; diff --git a/software/test.packet b/software/test.packet index ba15d3c..bbd11a5 100644 --- a/software/test.packet +++ b/software/test.packet Binary files differ diff --git a/software/utils/ProtocolBinarify.js b/software/utils/ProtocolBinarify.js index c6424bb..52eb21b 100644 --- a/software/utils/ProtocolBinarify.js +++ b/software/utils/ProtocolBinarify.js @@ -1,8 +1,8 @@ module.exports = { command: function(type){ return new Buffer([0xA1, 0x01, 0x01, 0x00, type]); - } + }, response: function(type){ return new Buffer([0xA1, 0x03, 0x01, 0x00, type]); - } + }, }; \ No newline at end of file diff --git a/software/utils/defines.js b/software/utils/defines.js index 5c93dfb..0c8a608 100644 --- a/software/utils/defines.js +++ b/software/utils/defines.js @@ -12,18 +12,42 @@ alarmDidOff: 5, doorWillOpen: 6, alarmWillOff: 7, + map: [ + "cardDidScan", + "doorDidOpen", + "doorDidClose", + "doorReleaseDidTriggered", + "alarmDidOn", + "alarmDidOff", + "doorWillOpen", + "alarmWillOff", + ], }, commands: { doDoorOpen: 0, doAlarmOn: 1, doAlarmOff: 2, + map: [ + "doDoorOpen", + "doAlarmOn", + "doAlarmOff", + ], }, requests: { auth: 0, + map: [ + "auth", + ], }, responses: { negative: 0, positive: 1, natural: 2, + map: [ + "negative", + "positive", + "natural", + ], }, + map: ['event', 'command', 'request', 'response'], } \ No newline at end of file