index.js
3.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
try {
var url = require('is-url');
} catch (e) {
var url = require('..');
}
var assert = require('assert');
describe('is-url', function () {
describe('valid', function () {
it('http://google.com', function () {
assert(url('http://google.com'));
});
it('https://google.com', function () {
assert(url('https://google.com'));
});
it('ftp://google.com', function () {
assert(url('ftp://google.com'));
});
it('http://www.google.com', function () {
assert(url('http://www.google.com'));
});
it('http://google.com/something', function () {
assert(url('http://google.com/something'));
});
it('http://google.com?q=query', function () {
assert(url('http://google.com?q=query'));
});
it('http://google.com#hash', function () {
assert(url('http://google.com#hash'));
});
it('http://google.com/something?q=query#hash', function () {
assert(url('http://google.com/something?q=query#hash'));
});
it('http://google.co.uk', function () {
assert(url('http://google.co.uk'));
});
it('http://www.google.co.uk', function () {
assert(url('http://www.google.co.uk'));
});
it('http://google.cat', function () {
assert(url('http://google.cat'));
});
it('https://d1f4470da51b49289906b3d6cbd65074@app.getsentry.com/13176', function () {
assert(url('https://d1f4470da51b49289906b3d6cbd65074@app.getsentry.com/13176'));
});
it('http://0.0.0.0', function () {
assert(url('http://0.0.0.0'));
});
it('http://localhost', function () {
assert(url('http://localhost'));
});
it('postgres://u:p@example.com:5702/db', function () {
assert(url('postgres://u:p@example.com:5702/db'));
});
it('redis://:123@174.129.42.52:13271', function () {
assert(url('redis://:123@174.129.42.52:13271'));
});
it('mongodb://u:p@example.com:10064/db', function () {
assert(url('mongodb://u:p@example.com:10064/db'));
});
it('ws://chat.example.com/games', function () {
assert(url('ws://chat.example.com/games'));
});
it('wss://secure.example.com/biz', function () {
assert(url('wss://secure.example.com/biz'));
});
it('http://localhost:4000', function () {
assert(url('http://localhost:4000'));
});
it('http://localhost:342/a/path', function () {
assert(url('http://localhost:342/a/path'));
});
it('//google.com', function () {
assert(url('//google.com'));
});
});
describe('invalid', function () {
it('http://', function () {
assert(!url('http://'));
});
it('http://google', function () {
assert(!url('http://google'));
});
it('http://google.', function () {
assert(!url('http://google.'));
});
it('google', function () {
assert(!url('google'));
});
it('google.com', function () {
assert(!url('google.com'));
});
it('empty', function () {
assert(!url(''));
});
it('undef', function () {
assert(!url(undefined));
});
it('object', function () {
assert(!url({}));
});
it('re', function () {
assert(!url(/abc/));
});
});
describe('redos', function () {
it('redos exploit', function () {
// Invalid. This should be discovered in under 1 second.
var attackString = 'a://localhost' + '9'.repeat(100000) + '\t';
var before = process.hrtime();
assert(!url(attackString), 'attackString was valid');
var elapsed = process.hrtime(before);
assert(elapsed[0] < 1, 'attackString took ' + elapsed[0] + ' > 1 seconds');
});
});
});