Hi everyone, 

So far, It seems ns_base64encode generates a different hash key, and the colon 
is the problem somehow. 


A valid request from Postman or CURL, has the following Authorization block 
within it :

Authorization {Basic 
HGTRFHTYhththtyhotyhtyjotjytjojg956456346n64ui5n4436346nu4y4iuyn4iutGRENDM3OWQwNmFkMWsFmNg==}

Meaning the authorization hash is:

HGTRFHTYhththtyhotyhtyjotjytjojg956456346n64ui5n4436346nu4y4iuyn4iutGRENDM3OWQwNmFkMWsFmNg==




While the Authorization block generated by [ns_base64encode] is: 

Authorization {Basic 
HGTRFHTYhththtyhotyhtyjotjytjojg956456346n64ui5n4436346nu4y4} 

So, it’s only the first part. 
HGTRFHTYhththtyhotyhtyjotjytjojg956456346n64ui5n4436346nu4y4


and the last part, after ":” has been missing (i.e. password) 
iuyn4iutGRENDM3OWQwNmFkMWsFmNg==



However, the same credentials were used to generate the 64 bits hash key 
encoded. 
set req_headers [ns_set create]
ns_set update $req_headers Authorization "Basic [ns_base64encode 
Afrewf564DFSFSF54jgnfhgGDGdfRGRT43:7584fjhfjhf84jkrugrefAFFD9449474]"


My guess is that [ns_base64encode] breaks in the colon char, and encodes only 
the first part as a 64 bits hash key.

How would the entire string  be encode as a 64 bits hash then?

How would the proc ns_base64encode support colon “:" (if the colon is the 
problem actually)?


p.s. logs are attached bellow.


Best wishes,
I





A valid request from Postman or CURL, contains the entire 64 bits hash key 
encoded 

[23/Feb/2021:15:59:08][23531.7efbf356f700][-conn:qonteo:default:1:0-] Notice: 
HEADER 
:     t0
[23/Feb/2021:15:59:08][23531.7efbf356f700][-conn:qonteo:default:1:0-] Notice: 
HEADERS 11
[23/Feb/2021:15:59:08][23531.7efbf356f700][-conn:qonteo:default:1:0-] Notice: 
Host dashboard.qonteo.com X-Real-IP 187.127.207.76 Connection close 
Content-Length 454 Authorization {Basic 
HGTRFHTYhththtyhotyhtyjotjytjojg956456346n64ui5n4436346nu4y4iuyn4iutGRENDM3OWQwNmFkMWsFmNg==
  User-Agent PostmanRuntime/7.26.8 Accept */* Cache-Control no-cache 
Postman-Token 6bd5b753-bc8e-4447-bc85-155f517d6c72 Content-Type 
{multipart/form-data; 
boundary=--------------------------494740493183890794196511} Cookie 
{ad_locale="es_ES"; 
ad_session_id="34040084%2c0%2c0%2c1614106611%20{362%201614107811%201133CEC432ACA1B0529F80D7603EFD5D38289E85}”}





The request from Naviserver, contains a different Authorization 64 bits hash 
key encoded. The has key is only correspondent to the first part of the 
authorization (i.e. username).
 
[23/Feb/2021:15:58:01][1207.7efbb67fc700][-conn:qonteo:default:3:3251-] Notice: 
HEADER 
:     t0
[23/Feb/2021:15:58:01][1207.7efbb67fc700][-conn:qonteo:default:3:3251-] Notice: 
HEADERS 6
[23/Feb/2021:15:58:01][1207.7efbb67fc700][-conn:qonteo:default:3:3251-] Notice: 
Host dashboard.qonteo.com X-Real-IP 192.199.241.132 Connection close 
Content-Length 178 Authorization {Basic 
HGTRFHTYhththtyhotyhtyjotjytjojg956456346n64ui5n4436346nu4y4}  User-Agent 
NaviServer/4.99.19







> On Raj. 11, 1442 AH, at 16:08, Iuri de Araujo Sampaio <i...@iurix.com> wrote:
> 
> So far, I've found a previous post, from myself :-), regarding quite the same 
> problem.
> 
> https://www.mail-archive.com/naviserver-devel@lists.sourceforge.net/msg03818.html
>  
> <https://www.mail-archive.com/naviserver-devel@lists.sourceforge.net/msg03818.html>
> 
> > 
> > Ok, now add some Authorization. As defined by RFC 7617, one has to add an
> > Authorization request header field with user:id:password encoded in base64.
> >   % set h [ns_set create]
> >   % ns_set update $h Authorization "Basic [ns_base64encode guest:guest]"
> >   % ns_http run -headers $h https://jigsaw.w3.org/HTTP/Basic/ 
> > <https://jigsaw.w3.org/HTTP/Basic/> 
> > <https://jigsaw.w3.org/HTTP/Basic/ <https://jigsaw.w3.org/HTTP/Basic/>>
> 
> 
> However, I’m still having a hard time to figure out what would be the 
> replacement of the following NodeJS sample for a Basic Auth header on 
> Naviserver, proc
>  ns_http 
> 
> 
> NodeJS sample
> 
> ...
>  axios
>         .post(url, new URLSearchParams(messageBody), {
>             auth: {
>                 username: authSID,
>                 password: authToken
>             }
>         })
> 
> ...
> 
> 
> 
> TCL Sample
> 
> ...
> set req_headers [ns_set create]
> ns_set update $req_headers Authorization "Basic [ns_base64encode 
> ${username}:${token}]"
> 
> set data [list]
> lappend "[ns_urlencode To]=[ns_urlencode whatsapp:+55454545571]"
> lappend "[ns_urlencode From]=[ns_urlencode whatsapp:+14155238886]"
> lappend "[ns_urlencode Body]=[ns_urlencode \"Your Yummy Cupcakes Company 
> order of 1 dozen frosted cupcakes has shipped and should be delivered\"]"
> 
> 
> set res [ns_http run -method POST -headers $req_headers -body $data $url]
> ns_log Notice "RES2 $res"
> 
> 
> 
> Based on this TCL sample, it returns 401 , meaning authentication step had 
> failure.
> 
> 
> 22/Feb/2021:16:07:21][1207.7efbb6ffd700][-conn:qonteo:default:2:1647-] 
> Notice: RES2 status 401 time 0:203450 headers d5 body {{"code": 20003, 
> "detail": "", "message": "Authenticate", "more_info": 
> "https://www.twilio.com/docs/errors/20003 
> <https://www.twilio.com/docs/errors/20003>", "status": 401}} https 
> {sslversion TLSv1.2 cipher ECDHE-RSA-AES128-GCM-SHA256}
> 
> 
> 
> 
> Best wishes,
> I
> 
> 
> 
> 
>> On Raj. 10, 1442 AH, at 20:14, Iuri de Araujo Sampaio <i...@iurix.com 
>> <mailto:i...@iurix.com>> wrote:
>> 
>> Hello there,
>> I’m trying to rewrite a CURL request to Naviserver. 
>> 
>> curl 
>> 'https://api.twilio.com/2010-04-01/Accounts/ACe13c882f57e87c4b4db37/Messages.json
>>  
>> <https://api.twilio.com/2010-04-01/Accounts/ACe13c882f57e87c4b4db37/Messages.json>'
>>  -X POST \
>> --data-urlencode 'To=whatsapp:+5511998865465' \
>> --data-urlencode 'From=whatsapp:+14155238886' \
>> --data-urlencode 'Body=Your Yummy Cupcakes Company order of 1 dozen frosted 
>> cupcakes has shipped and should be delivered on July 10, 2019. Details: 
>> http://www.yummycupcakes.com/' <http://www.yummycupcakes.com/'> \
>> -u [Authkey]:[AuthToken]
>> 
>> 
>> man url 
>>  -u, --user <user:password>
>>               Specify the user name and password to use for server 
>> authentication. Overrides -n, --netrc and --netrc-optional.
>> 
>>               If you simply specify the user name, curl will prompt for a 
>> password.
>> …
>> 
>> 
>> 
>> So basically, data-urlencode becomes posta_data. How could -u argument can 
>> be rewritten to [ns_http run …] arguments
>> 
>> 
>> set post_data [list]
>> lappend "[ns_urlencode to]=[ns_urlencode whatsapp:+5511998865465]"
>> lappend "[ns_urlencode From]=[ns_urlencode whatsapp:+14155238886]"
>> lappend "[ns_urlencode Body]=[ns_urlencode \"Your Yummy Cupcakes Company 
>> order of 1 dozen frosted cupcakes has shipped and should be deli\
>> vered\"]"
>> 
>> set url 
>> "https://api.twilio.com/2010-04-01/Accounts/ACe13c431f82f57e87c4b4db37/Messages.json
>>  
>> <https://api.twilio.com/2010-04-01/Accounts/ACe13c431f82f57e87c4b4db37/Messages.json>"
>> 
>> set res [ns_http run -method POST -headers $req_headers -body $post_data 
>> $url]
>> ns_log Notice "RES2 $res"
>> 
>> 
>> 
>> I was looking for references in the documentation, however I haven’t found 
>> any matches. What's the replacement of curl -u in ns_http?
>> 
>> References: 
>> https://naviserver.sourceforge.io/n/naviserver/files/ns_http.html 
>> <https://naviserver.sourceforge.io/n/naviserver/files/ns_http.html>
>> 
>> 
>> Best wishes,
>> I
> 
> _______________________________________________
> naviserver-devel mailing list
> naviserver-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/naviserver-devel

_______________________________________________
naviserver-devel mailing list
naviserver-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/naviserver-devel

Reply via email to