Skip to content

Commit 53d4d6d

Browse files
committedAug 23, 2021
[fix] Handle the username and password properties
Update the value of the `auth` property when the `username` or `password` property is set. Refs: #213 (comment)
1 parent 0be9572 commit 53d4d6d

File tree

2 files changed

+63
-4
lines changed

2 files changed

+63
-4
lines changed
 

‎index.js

+7-4
Original file line numberDiff line numberDiff line change
@@ -459,15 +459,16 @@ function set(part, value, fn) {
459459
}
460460
break;
461461

462+
case 'username':
463+
case 'password':
464+
url[part] = encodeURIComponent(value);
465+
break;
466+
462467
case 'auth':
463468
var splits = value.split(':');
464469
url.username = splits[0];
465470
url.password = splits.length === 2 ? splits[1] : '';
466471
url[part] = value;
467-
break;
468-
469-
default:
470-
url[part] = value;
471472
}
472473

473474
for (var i = 0; i < rules.length; i++) {
@@ -476,6 +477,8 @@ function set(part, value, fn) {
476477
if (ins[4]) url[ins[1]] = url[ins[1]].toLowerCase();
477478
}
478479

480+
url.auth = url.password ? url.username +':'+ url.password : url.username;
481+
479482
url.origin = url.protocol !== 'file:' && isSpecial(url.protocol) && url.host
480483
? url.protocol +'//'+ url.host
481484
: 'null';

‎test/test.js

+56
Original file line numberDiff line numberDiff line change
@@ -1046,6 +1046,62 @@ describe('url-parse', function () {
10461046
assume(data.href).equals('mailto:alice@atlanta.com');
10471047
});
10481048

1049+
it('updates auth when updating username', function() {
1050+
var data = parse('https://example.com');
1051+
1052+
assume(data.set('username', 'foo')).equals(data);
1053+
assume(data.username).equals('foo');
1054+
assume(data.auth).equals('foo')
1055+
assume(data.href).equals('https://foo@example.com/');
1056+
1057+
data.set('username', '');
1058+
1059+
assume(data.username).equals('');
1060+
assume(data.auth).equals('')
1061+
assume(data.href).equals('https://example.com/');
1062+
1063+
data.set('username', 'foo:');
1064+
1065+
assume(data.username).equals('foo%3A');
1066+
assume(data.auth).equals('foo%3A')
1067+
assume(data.href).equals('https://foo%3A@example.com/');
1068+
1069+
data = parse('https://foo:bar@example.com')
1070+
data.set('username', 'baz');
1071+
1072+
assume(data.username).equals('baz');
1073+
assume(data.auth).equals('baz:bar')
1074+
assume(data.href).equals('https://baz:bar@example.com/');
1075+
});
1076+
1077+
it('updates auth when updating password', function() {
1078+
var data = parse('https://example.com');
1079+
1080+
assume(data.set('password', 'foo')).equals(data);
1081+
assume(data.password).equals('foo');
1082+
assume(data.auth).equals(':foo')
1083+
assume(data.href).equals('https://:foo@example.com/');
1084+
1085+
data.set('password', '');
1086+
1087+
assume(data.password).equals('');
1088+
assume(data.auth).equals('')
1089+
assume(data.href).equals('https://example.com/');
1090+
1091+
data.set('password', ':foo@');
1092+
1093+
assume(data.password).equals('%3Afoo%40');
1094+
assume(data.auth).equals(':%3Afoo%40')
1095+
assume(data.href).equals('https://:%3Afoo%40@example.com/');
1096+
1097+
data = parse('https://foo:bar@example.com')
1098+
data.set('password', 'baz');
1099+
1100+
assume(data.password).equals('baz');
1101+
assume(data.auth).equals('foo:baz')
1102+
assume(data.href).equals('https://foo:baz@example.com/');
1103+
});
1104+
10491105
it('updates username and password when updating auth', function() {
10501106
var data = parse('https://example.com');
10511107

0 commit comments

Comments
 (0)
Please sign in to comment.