@@ -347,10 +347,6 @@ parse_uri(Uri) ->
347
347
Err -> Err
348
348
end .
349
349
350
- parse_usertoken (U ) ->
351
- [User , Pass ] = string :tokens (U , " :" ),
352
- {plain , to_binary (User ), to_binary (Pass )}.
353
-
354
350
parse_result ({Scheme , UserInfo , Host , Port , " /" , Query0 }) ->
355
351
Query = lists :foldl (fun (W , Acc ) ->
356
352
[K , V ] = string :tokens (W , " =" ),
@@ -389,6 +385,12 @@ parse_result({Scheme, UserInfo, Host, Port, "/", Query0}) ->
389
385
Ret0 #{tls_opts => {secure_port , TlsOpts }}
390
386
end .
391
387
388
+ parse_usertoken (U ) ->
389
+ [User , Pass ] = string :tokens (U , " :" ),
390
+ {plain ,
391
+ to_binary (http_uri :decode (User )),
392
+ to_binary (http_uri :decode (Pass ))}.
393
+
392
394
393
395
safe_substr (Str , Start ) when length (Str ) >= Start ->
394
396
string :substr (Str , Start );
@@ -454,6 +456,12 @@ parse_uri_test_() ->
454
456
sasl => {plain , <<" fred" >>, <<" passw" >>}}},
455
457
parse_uri (" amqps://fred:passw@my_proxy:9876?sasl=plain&" ++
456
458
" hostname=my_host&max_frame_size=512&idle_time_out=60000" )),
459
+ % % ensure URI encoded usernames and passwords are decodeded
460
+ ? _assertEqual ({ok , #{address => " my_proxy" ,
461
+ port => 9876 ,
462
+ hostname => <<" my_proxy" >>,
463
+ sasl => {plain , <<" fr/ed" >>, <<" pa/ssw" >>}}},
464
+ parse_uri (" amqp://fr%2Fed:pa%2Fssw@my_proxy:9876" )),
457
465
% % make sasl plain implicit when username and password is present
458
466
? _assertEqual ({ok , #{address => " my_proxy" ,
459
467
port => 9876 ,
0 commit comments