aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/Agency.js45
-rw-r--r--lib/Device.js12
-rw-r--r--lib/active911.js63
-rw-r--r--lib/util.js3
4 files changed, 123 insertions, 0 deletions
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;