I'm building in node-red a central controller for various audio/video equipment.
they have a web interface, so an easy way to control them is to use the node http-request.
This works great, however some of the equipments are using authentication, and i would like to use sort of a database for the credentials. At this point the only problem i have is that the built-in http request node does not allow the credentials to be passed as an input message.
Do you know if a contributed node could do it?
Also, i'm wondering if i could build a modified http request node wich could do that (mainly as a way to learn more ).
To do so i've found the node-red core with the function i'm interessed in there:
But couldn't find this node in the.node-red/ folder on my system (mac). Do you know where it should be located?
Thanks a lot for your answer, i figured a way for Basic auth in the form of a function node (attached) which create the http get header with auth and send it in a tcp request. I didn't know it was possible to pass the header directly to the http request, thanks!
However for the digest auth, which i also need for some device seems a bit trickier to implement that way...
i found the core nodes to be stored here, if anyone wonders:
/usr/local/lib/node_modules/node-red/node_modules/@node-red/nodes
ar err = false;
//node.warn(msg.port);
if (msg.url === undefined || msg.url ==="")
{
node.error("URL error");
err = true;
}
if (msg.port === undefined || msg.port ===0)
{
node.error("port error");
err = true;
}
if (msg.host === undefined || msg.host ==="")
{
node.error("HOST error");
err = true;
}
if (err)
return;
var authorization = "";
var connection = "close";
//const timeout = 30;
//const keep_alive = true;
if (msg.timeout !== undefined && msg.timeout > 0)
{
connection = "keep-alive\r\n";
connection += "Keep-Alive: timeout="+msg.timeout+"\r\n";
}
//var connection = "keep-alive";
if(msg.name !== undefined && msg.pass !== undefined)
if(msg.name !== "" && msg.pass !== "")
{
authorization = "Authorization: Basic "+encodeB64(msg.name+':'+msg.pass)+" \r\n";
}
msg.payload="GET "+msg.url+" HTTP/1.1\r\nuser-agent: node-red\r\n"+authorization+"Host: "+msg.host+"\r\n"+"Connection: "+connection+"\r\n\r\n";
return msg;
function encodeB64(data)
{
var buf = new Buffer(data);
return buf.toString('base64');
}
function decodeB64(data)
{
var buf = new Buffer(data, 'base64');
return buf.toString('ascii');
}
thanks, it seems that i should upgrade to 3!
Yeah, i read the help, it is more that i'm not that used to http or more basically web design...
But i'm really happy to learn and grateful for the help i found for node-red!