From 05337261ffb4abfb0fbbb9c775ccad0e28645692 Mon Sep 17 00:00:00 2001 From: Ben Burwell Date: Wed, 22 Oct 2014 08:35:44 -0400 Subject: Begin rewrite for new API --- lib/Agency.js | 45 ++++++++++++++++++++++++++++++++++++++++ lib/Device.js | 12 +++++++++++ lib/active911.js | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ lib/util.js | 3 +++ 4 files changed, 123 insertions(+) create mode 100644 lib/Agency.js create mode 100644 lib/Device.js create mode 100644 lib/active911.js create mode 100644 lib/util.js (limited to 'lib') diff --git a/lib/Agency.js b/lib/Agency.js new file mode 100644 index 0000000..c22a141 --- /dev/null +++ b/lib/Agency.js @@ -0,0 +1,45 @@ +var _util = require('./util'); + +module.exports.Agency = function(options) { + this._id = options.id; + this._name = options.name; + this._address = options.address; + this._city = options.city; + this._state = options.state; + this._latitude = options.latitude; + this._longitude = options.longitude; + this._devices = options.devices; + this._uri = options.uri || _util.API_BASE + '/agency/' + options.id; +}; + +module.exports.Agency.prototype.getId = function() { + return this._id; +}; + +module.exports.Agency.prototype.getName = function() { + return this._name; +}; + +module.exports.Agency.prototype.getAddress = function() { + return this._address; +}; + +module.exports.Agency.prototype.getCity = function() { + return this._city; +}; + +module.exports.Agency.prototype.getState = function() { + return this._state; +}; + +module.exports.Agency.prototype.getLatitude = function() { + return this._latitude; +}; + +module.exports.Agency.prototype.getLongitude = function() { + return this._longitude; +}; + +module.exports.Agency.prototype.getDevices = function() { + return this._devices; +}; diff --git a/lib/Device.js b/lib/Device.js new file mode 100644 index 0000000..bfc4d34 --- /dev/null +++ b/lib/Device.js @@ -0,0 +1,12 @@ +var _util = require('./util'); + +module.exports.Device = function(options) { + this._id = options.id; + this._name = options.name; + this._latitude = options.latitude; + this._longitude = options.longitude; + this._position_accuracy = options.position_accuracy; + this._position_timestamp = options.position_timestamp; + this._agencies = options.agencies; + this._uri = options.uri || _util.API_BASE + '/devices/' + options.id; +}; diff --git a/lib/active911.js b/lib/active911.js new file mode 100644 index 0000000..e75eaca --- /dev/null +++ b/lib/active911.js @@ -0,0 +1,63 @@ +var OAuth2 = require('oauth').OAuth2; +var http = require('http'); +var events = require('events'); +var querystring = require('querystring'); +var url = require('url'); +var Agency = require('./Agency.js').Agency; +var Device = require('./Device.js').Device; +var _util = require('./util'); + +module.exports.Agency = Agency; +module.exports.Device = Device; + +// Constructor +module.exports.Active911 = function(client_id, client_secret, scope) { + this._client_id = client_id; + this._client_secret = client_secret; + this._scope = scope; + this._oauth_complete = false; + this._emitter = new events.EventEmitter(); + + // Create the HTTP server that will receive the OAuth code after the user + // has authenticated to Active911. + this._http_server = new http.Server(); + + // The request handler + this._http_server.on('request', function(req, res) { + + // The only thing we care about is the /?code=xxx + var qs = url.parse(req.url).query; + + // If a code has been sent, and we don't already have one, we are good + // to go. + if (qs.split('=')[0] === 'code' && !this._oauth_complete) { + this._oauth_code = qs.split('=')[1]; + this._oauth_complete = true; + emitter.emit('oauth_complete'); + } + + res.writeHead(200, {'Content-Type': 'text/plain'}); + res.end(); + }); + + // Once the server is listening, store its port number for use in auth uri + this._http_server.listen(0, function() { + + }); +}; + +module.exports.Active911.prototype.getAuthorizationUri = function() { + + var qs = querystring.stringify({ + client_id: this._client_id, + response_type: 'code', + redirection_uri: 'http://localhost:' + this._oauth_server_port, + scope: this._scope + }); + + return _util.API_BASE_NAME + '/open_api/authorize_agency.php' + qs; +}; + +module.exports.Active911.prototype.ready = function(func) { + emitter.on('oauth_complete', func); +}; diff --git a/lib/util.js b/lib/util.js new file mode 100644 index 0000000..08efbfb --- /dev/null +++ b/lib/util.js @@ -0,0 +1,3 @@ +module.exports.API_BASE_NAME = 'https://access.active911.com'; +module.exports.API_BASE_PATH = '/interface/open_api/api'; +module.exports.API_BASE = exports.API_BASE_NAME + exports.API_BASE_PATH; -- cgit v1.2.3