Implemented HTTP authentication for connection requests
This commit is contained in:
1 parent
a279fb70d3
commit
7fb00c8a31
3 files changed
+42
-10
No files matched your search
+35
-10
@@ -3,24 +3,26 @@ db = require './db'
|
||||
http = require 'http'
|
||||
common = require './common'
|
||||
util = require 'util'
|
||||
URL = require 'url'
|
||||
auth = require './auth'
|
||||
|
||||
|
||||
connectionRequest = (deviceId, callback) ->
|
||||
db.devicesCollection.findOne({_id : deviceId}, {'InternetGatewayDevice.ManagementServer.ConnectionRequestURL._value' : 1}, (err, device)->
|
||||
if err
|
||||
callback(err)
|
||||
return
|
||||
connectionRequestUrl = device.InternetGatewayDevice.ManagementServer.ConnectionRequestURL._value
|
||||
# for testing
|
||||
#connectionRequestUrl = connectionRequestUrl.replace(/^(http:\/\/)([0-9\.]+)(\:[0-9]+\/[a-zA-Z0-9]+\/?$)/, '$110.1.1.254$3')
|
||||
request = http.get(connectionRequestUrl, (res) ->
|
||||
callback()
|
||||
conReq = (url, authString, callback) ->
|
||||
if authString
|
||||
url = URL.parse(url)
|
||||
url.headers = {'Authorization' : authString}
|
||||
|
||||
request = http.get(url, (res) ->
|
||||
if res.statusCode == 401
|
||||
authHeader = auth.parseAuthHeader(res.headers['www-authenticate'])
|
||||
callback(res.statusCode, authHeader)
|
||||
)
|
||||
|
||||
request.on('error', (err) ->
|
||||
# error event when request is aborted
|
||||
request.abort()
|
||||
callback(err)
|
||||
callback(0)
|
||||
)
|
||||
|
||||
request.on('socket', (socket) ->
|
||||
@@ -29,6 +31,29 @@ connectionRequest = (deviceId, callback) ->
|
||||
request.abort()
|
||||
)
|
||||
)
|
||||
|
||||
db.devicesCollection.findOne({_id : deviceId}, {'InternetGatewayDevice.ManagementServer.ConnectionRequestURL._value' : 1}, (err, device)->
|
||||
if err
|
||||
callback(err)
|
||||
return
|
||||
connectionRequestUrl = device.InternetGatewayDevice.ManagementServer.ConnectionRequestURL._value
|
||||
# for testing
|
||||
#connectionRequestUrl = connectionRequestUrl.replace(/^(http:\/\/)([0-9\.]+)(\:[0-9]+\/[a-zA-Z0-9]+\/?$)/, '$110.1.1.254$3')
|
||||
conReq(connectionRequestUrl, null, (statusCode, authHeader) ->
|
||||
if statusCode == 401
|
||||
[username, password] = config.auth.connectionRequest(deviceId)
|
||||
if authHeader.method is 'Basic'
|
||||
authString = auth.basic(username, password)
|
||||
else if authHeader.method is 'Digest'
|
||||
uri = URL.parse(connectionRequestUrl)
|
||||
authString = auth.digest(username, password, uri.path, 'GET', null, authHeader)
|
||||
|
||||
conReq(connectionRequestUrl, authString, (statusCode, authHeader) ->
|
||||
callback()
|
||||
)
|
||||
else
|
||||
callback()
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -36,3 +36,6 @@ for k, v of parameters
|
||||
|
||||
exports.PARAMETERS = parameters
|
||||
exports.ALIASES = aliases
|
||||
|
||||
# load authentication scripts
|
||||
exports.auth = require('./config/auth')
|
||||
@@ -0,0 +1,4 @@
|
||||
exports.connectionRequest = function(deviceId) {
|
||||
// return username/password pair for a given device
|
||||
return ["", ""];
|
||||
}
|
||||
Reference in new issue
Block a user