Skip to content

Commit e9e18dc

Browse files
authored
Merge pull request #7 from joeytwiddle/master
Ensure '@'s in passwords are parsed correctly; and some docs
2 parents ae8e34d + 9f45099 commit e9e18dc

File tree

6 files changed

+172
-6
lines changed

6 files changed

+172
-6
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,8 @@ yarn run gulp
5555
yarn run test
5656
```
5757

58-
### TypeScript Linting
58+
### Linting (tslint and commit formatting)
5959

6060
```
61-
yarn run gulp tslint
61+
yarn run precommit
6262
```

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
"jasmine": "^3.1.0",
3131
"run-sequence": "^2.2.0",
3232
"tslib": "^1.8.0",
33+
"tslint": "^5.12.1",
3334
"typescript": "^2.5.3"
3435
},
3536
"dependencies": {

shadowsocks_config.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

shadowsocks_config.spec.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,13 @@ describe('shadowsocks_config', () => {
254254
expect(config.extra.foo!).toEqual('1');
255255
});
256256

257+
it('can parse a valid SIP002 URI with the at symbol and other symbols in the password', () => {
258+
const input =
259+
'ss://YmYtY2ZiOnRlc3QvIUAjOi5fLV4nIiRAJUAxOTIuMTY4LjEwMC4xOjg4ODg#[email protected]';
260+
const config = SHADOWSOCKS_URI.parse(input);
261+
expect(config.password.data).toEqual('test/!@#:._-^\'"$@%');
262+
});
263+
257264
it('can parse a valid SIP002 URI with a plugin param', () => {
258265
const input = 'ss://[email protected]:8888/?plugin=obfs-local%3Bobfs%3Dhttp';
259266
const config = SHADOWSOCKS_URI.parse(input);

shadowsocks_config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ export const LEGACY_BASE64_URI = {
234234
const tag = new Tag(decodeURIComponent(uri.substring(tagStartIndex)));
235235
const b64EncodedData = uri.substring('ss://'.length, b64EndIndex);
236236
const b64DecodedData = b64Decode(b64EncodedData);
237-
const atSignIndex = b64DecodedData.indexOf('@');
237+
const atSignIndex = b64DecodedData.lastIndexOf('@');
238238
if (atSignIndex === -1) {
239239
throw new InvalidUri(`Missing "@"`);
240240
}

yarn.lock

Lines changed: 159 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,10 +107,24 @@ ansi-styles@^2.2.1:
107107
version "2.2.1"
108108
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
109109

110+
ansi-styles@^3.2.1:
111+
version "3.2.1"
112+
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
113+
integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
114+
dependencies:
115+
color-convert "^1.9.0"
116+
110117
archy@^1.0.0:
111118
version "1.0.0"
112119
resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40"
113120

121+
argparse@^1.0.7:
122+
version "1.0.10"
123+
resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
124+
integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
125+
dependencies:
126+
sprintf-js "~1.0.2"
127+
114128
arr-diff@^2.0.0:
115129
version "2.0.0"
116130
resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
@@ -149,6 +163,15 @@ atob@~1.1.0:
149163
version "1.1.3"
150164
resolved "https://registry.yarnpkg.com/atob/-/atob-1.1.3.tgz#95f13629b12c3a51a5d215abdce2aa9f32f80773"
151165

166+
babel-code-frame@^6.22.0:
167+
version "6.26.0"
168+
resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
169+
integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=
170+
dependencies:
171+
chalk "^1.1.3"
172+
esutils "^2.0.2"
173+
js-tokens "^3.0.2"
174+
152175
balanced-match@^1.0.0:
153176
version "1.0.0"
154177
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
@@ -186,6 +209,11 @@ braces@^1.8.2:
186209
preserve "^0.2.0"
187210
repeat-element "^1.1.2"
188211

212+
builtin-modules@^1.1.1:
213+
version "1.1.1"
214+
resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
215+
integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=
216+
189217
camelcase@^2.0.1:
190218
version "2.1.1"
191219
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
@@ -200,6 +228,15 @@ chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3:
200228
strip-ansi "^3.0.0"
201229
supports-color "^2.0.0"
202230

231+
chalk@^2.3.0:
232+
version "2.4.2"
233+
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
234+
integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
235+
dependencies:
236+
ansi-styles "^3.2.1"
237+
escape-string-regexp "^1.0.5"
238+
supports-color "^5.3.0"
239+
203240
ci-info@^1.0.0:
204241
version "1.1.2"
205242
resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.2.tgz#03561259db48d0474c8bdc90f5b47b068b6bbfb4"
@@ -236,6 +273,23 @@ code-point-at@^1.0.0:
236273
version "1.1.0"
237274
resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
238275

276+
color-convert@^1.9.0:
277+
version "1.9.3"
278+
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
279+
integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
280+
dependencies:
281+
color-name "1.1.3"
282+
283+
284+
version "1.1.3"
285+
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
286+
integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
287+
288+
commander@^2.12.1:
289+
version "2.19.0"
290+
resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a"
291+
integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==
292+
239293
240294
version "0.0.1"
241295
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
@@ -312,6 +366,11 @@ [email protected]:
312366
version "2.1.0"
313367
resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2"
314368

369+
diff@^3.2.0:
370+
version "3.5.0"
371+
resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12"
372+
integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==
373+
315374
316375
version "0.0.2"
317376
resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db"
@@ -377,10 +436,20 @@ es6-weak-map@^2.0.2:
377436
es6-iterator "^2.0.1"
378437
es6-symbol "^3.1.1"
379438

380-
escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.3:
439+
escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.3, escape-string-regexp@^1.0.5:
381440
version "1.0.5"
382441
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
383442

443+
esprima@^4.0.0:
444+
version "4.0.1"
445+
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
446+
integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
447+
448+
esutils@^2.0.2:
449+
version "2.0.2"
450+
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
451+
integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=
452+
384453
event-emitter@^0.3.5:
385454
version "0.3.5"
386455
resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39"
@@ -606,6 +675,18 @@ glob@^7.0.0, glob@^7.0.6:
606675
once "^1.3.0"
607676
path-is-absolute "^1.0.0"
608677

678+
glob@^7.1.1:
679+
version "7.1.3"
680+
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1"
681+
integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==
682+
dependencies:
683+
fs.realpath "^1.0.0"
684+
inflight "^1.0.4"
685+
inherits "2"
686+
minimatch "^3.0.4"
687+
once "^1.3.0"
688+
path-is-absolute "^1.0.0"
689+
609690
glob@~3.1.21:
610691
version "3.1.21"
611692
resolved "https://registry.yarnpkg.com/glob/-/glob-3.1.21.tgz#d29e0a055dea5138f4d07ed40e8982e83c2066cd"
@@ -808,6 +889,11 @@ has-ansi@^2.0.0:
808889
dependencies:
809890
ansi-regex "^2.0.0"
810891

892+
has-flag@^3.0.0:
893+
version "3.0.0"
894+
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
895+
integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
896+
811897
has-gulplog@^0.1.0:
812898
version "0.1.0"
813899
resolved "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz#6414c82913697da51590397dafb12f22967811ce"
@@ -1026,6 +1112,19 @@ jasmine@^3.1.0:
10261112
glob "^7.0.6"
10271113
jasmine-core "~3.1.0"
10281114

1115+
js-tokens@^3.0.2:
1116+
version "3.0.2"
1117+
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
1118+
integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls=
1119+
1120+
js-yaml@^3.7.0:
1121+
version "3.12.1"
1122+
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.1.tgz#295c8632a18a23e054cf5c9d3cecafe678167600"
1123+
integrity sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==
1124+
dependencies:
1125+
argparse "^1.0.7"
1126+
esprima "^4.0.0"
1127+
10291128
json-stable-stringify@^1.0.0:
10301129
version "1.0.1"
10311130
resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
@@ -1419,6 +1518,11 @@ path-parse@^1.0.5:
14191518
version "1.0.5"
14201519
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1"
14211520

1521+
path-parse@^1.0.6:
1522+
version "1.0.6"
1523+
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
1524+
integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
1525+
14221526
path-root-regex@^0.1.0:
14231527
version "0.1.2"
14241528
resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d"
@@ -1541,6 +1645,13 @@ resolve@^1.1.6, resolve@^1.1.7:
15411645
dependencies:
15421646
path-parse "^1.0.5"
15431647

1648+
resolve@^1.3.2:
1649+
version "1.9.0"
1650+
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.9.0.tgz#a14c6fdfa8f92a7df1d996cb7105fa744658ea06"
1651+
integrity sha512-TZNye00tI67lwYvzxCxHGjwTNlUV70io54/Ed4j6PscB8xVfuBJpRenI/o6dVk0cY0PYTY27AgCoGGxRnYuItQ==
1652+
dependencies:
1653+
path-parse "^1.0.6"
1654+
15441655
resolve@~1.1.6:
15451656
version "1.1.7"
15461657
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
@@ -1566,6 +1677,11 @@ semver@^4.1.0:
15661677
version "4.3.6"
15671678
resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da"
15681679

1680+
semver@^5.3.0:
1681+
version "5.6.0"
1682+
resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004"
1683+
integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==
1684+
15691685
sequencify@~0.0.7:
15701686
version "0.0.7"
15711687
resolved "https://registry.yarnpkg.com/sequencify/-/sequencify-0.0.7.tgz#90cff19d02e07027fd767f5ead3e7b95d1e7380c"
@@ -1605,6 +1721,11 @@ sparkles@^1.0.0:
16051721
version "1.0.0"
16061722
resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.0.tgz#1acbbfb592436d10bbe8f785b7cc6f82815012c3"
16071723

1724+
sprintf-js@~1.0.2:
1725+
version "1.0.3"
1726+
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
1727+
integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
1728+
16081729
16091730
version "0.0.9"
16101731
resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.9.tgz#a8f6eaeca90674c333e7c43953f275b451510695"
@@ -1687,6 +1808,13 @@ supports-color@^2.0.0:
16871808
version "2.0.0"
16881809
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
16891810

1811+
supports-color@^5.3.0:
1812+
version "5.5.0"
1813+
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
1814+
integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
1815+
dependencies:
1816+
has-flag "^3.0.0"
1817+
16901818
sver-compat@^1.5.0:
16911819
version "1.5.0"
16921820
resolved "https://registry.yarnpkg.com/sver-compat/-/sver-compat-1.5.0.tgz#3cf87dfeb4d07b4a3f14827bc186b3fd0c645cd8"
@@ -1746,6 +1874,36 @@ tslib@^1.8.0:
17461874
version "1.8.0"
17471875
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.8.0.tgz#dc604ebad64bcbf696d613da6c954aa0e7ea1eb6"
17481876

1877+
tslib@^1.8.1:
1878+
version "1.9.3"
1879+
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286"
1880+
integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==
1881+
1882+
tslint@^5.12.1:
1883+
version "5.12.1"
1884+
resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.12.1.tgz#8cec9d454cf8a1de9b0a26d7bdbad6de362e52c1"
1885+
integrity sha512-sfodBHOucFg6egff8d1BvuofoOQ/nOeYNfbp7LDlKBcLNrL3lmS5zoiDGyOMdT7YsEXAwWpTdAHwOGOc8eRZAw==
1886+
dependencies:
1887+
babel-code-frame "^6.22.0"
1888+
builtin-modules "^1.1.1"
1889+
chalk "^2.3.0"
1890+
commander "^2.12.1"
1891+
diff "^3.2.0"
1892+
glob "^7.1.1"
1893+
js-yaml "^3.7.0"
1894+
minimatch "^3.0.4"
1895+
resolve "^1.3.2"
1896+
semver "^5.3.0"
1897+
tslib "^1.8.0"
1898+
tsutils "^2.27.2"
1899+
1900+
tsutils@^2.27.2:
1901+
version "2.29.0"
1902+
resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99"
1903+
integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==
1904+
dependencies:
1905+
tslib "^1.8.1"
1906+
17491907
typescript@^2.5.3:
17501908
version "2.5.3"
17511909
resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.5.3.tgz#df3dcdc38f3beb800d4bc322646b04a3f6ca7f0d"

0 commit comments

Comments
 (0)