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'
|
http = require 'http'
|
||||||
common = require './common'
|
common = require './common'
|
||||||
util = require 'util'
|
util = require 'util'
|
||||||
|
URL = require 'url'
|
||||||
|
auth = require './auth'
|
||||||
|
|
||||||
|
|
||||||
connectionRequest = (deviceId, callback) ->
|
connectionRequest = (deviceId, callback) ->
|
||||||
db.devicesCollection.findOne({_id : deviceId}, {'InternetGatewayDevice.ManagementServer.ConnectionRequestURL._value' : 1}, (err, device)->
|
conReq = (url, authString, callback) ->
|
||||||
if err
|
if authString
|
||||||
callback(err)
|
url = URL.parse(url)
|
||||||
return
|
url.headers = {'Authorization' : authString}
|
||||||
connectionRequestUrl = device.InternetGatewayDevice.ManagementServer.ConnectionRequestURL._value
|
|
||||||
# for testing
|
request = http.get(url, (res) ->
|
||||||
#connectionRequestUrl = connectionRequestUrl.replace(/^(http:\/\/)([0-9\.]+)(\:[0-9]+\/[a-zA-Z0-9]+\/?$)/, '$110.1.1.254$3')
|
if res.statusCode == 401
|
||||||
request = http.get(connectionRequestUrl, (res) ->
|
authHeader = auth.parseAuthHeader(res.headers['www-authenticate'])
|
||||||
callback()
|
callback(res.statusCode, authHeader)
|
||||||
)
|
)
|
||||||
|
|
||||||
request.on('error', (err) ->
|
request.on('error', (err) ->
|
||||||
# error event when request is aborted
|
# error event when request is aborted
|
||||||
request.abort()
|
request.abort()
|
||||||
callback(err)
|
callback(0)
|
||||||
)
|
)
|
||||||
|
|
||||||
request.on('socket', (socket) ->
|
request.on('socket', (socket) ->
|
||||||
@@ -29,6 +31,29 @@ connectionRequest = (deviceId, callback) ->
|
|||||||
request.abort()
|
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.PARAMETERS = parameters
|
||||||
exports.ALIASES = aliases
|
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