aboutsummaryrefslogtreecommitdiff
path: root/lib/active911.js
blob: e75eacafde64a21507f3cb04c2d7fb807fb3da52 (plain)
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
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);
};