]> gerrit.simantics Code Review - simantics/district.git/blob - org.simantics.maps.server/node/node-v4.8.0-win-x64/node_modules/npm/node_modules/request/node_modules/hawk/test/client.js
Adding integrated tile server
[simantics/district.git] / org.simantics.maps.server / node / node-v4.8.0-win-x64 / node_modules / npm / node_modules / request / node_modules / hawk / test / client.js
1 // Load modules
2
3 var Url = require('url');
4 var Code = require('code');
5 var Hawk = require('../lib');
6 var Lab = require('lab');
7
8
9 // Declare internals
10
11 var internals = {};
12
13
14 // Test shortcuts
15
16 var lab = exports.lab = Lab.script();
17 var describe = lab.experiment;
18 var it = lab.test;
19 var expect = Code.expect;
20
21
22 describe('Client', function () {
23
24     describe('header()', function () {
25
26         it('returns a valid authorization header (sha1)', function (done) {
27
28             var credentials = {
29                 id: '123456',
30                 key: '2983d45yun89q',
31                 algorithm: 'sha1'
32             };
33
34             var header = Hawk.client.header('http://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, ext: 'Bazinga!', timestamp: 1353809207, nonce: 'Ygvqdz', payload: 'something to write about' }).field;
35             expect(header).to.equal('Hawk id="123456", ts="1353809207", nonce="Ygvqdz", hash="bsvY3IfUllw6V5rvk4tStEvpBhE=", ext="Bazinga!", mac="qbf1ZPG/r/e06F4ht+T77LXi5vw="');
36             done();
37         });
38
39         it('returns a valid authorization header (sha256)', function (done) {
40
41             var credentials = {
42                 id: '123456',
43                 key: '2983d45yun89q',
44                 algorithm: 'sha256'
45             };
46
47             var header = Hawk.client.header('https://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, ext: 'Bazinga!', timestamp: 1353809207, nonce: 'Ygvqdz', payload: 'something to write about', contentType: 'text/plain' }).field;
48             expect(header).to.equal('Hawk id="123456", ts="1353809207", nonce="Ygvqdz", hash="2QfCt3GuY9HQnHWyWD3wX68ZOKbynqlfYmuO2ZBRqtY=", ext="Bazinga!", mac="q1CwFoSHzPZSkbIvl0oYlD+91rBUEvFk763nMjMndj8="');
49             done();
50         });
51
52         it('returns a valid authorization header (no ext)', function (done) {
53
54             var credentials = {
55                 id: '123456',
56                 key: '2983d45yun89q',
57                 algorithm: 'sha256'
58             };
59
60             var header = Hawk.client.header('https://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, timestamp: 1353809207, nonce: 'Ygvqdz', payload: 'something to write about', contentType: 'text/plain' }).field;
61             expect(header).to.equal('Hawk id="123456", ts="1353809207", nonce="Ygvqdz", hash="2QfCt3GuY9HQnHWyWD3wX68ZOKbynqlfYmuO2ZBRqtY=", mac="HTgtd0jPI6E4izx8e4OHdO36q00xFCU0FolNq3RiCYs="');
62             done();
63         });
64
65         it('returns a valid authorization header (null ext)', function (done) {
66
67             var credentials = {
68                 id: '123456',
69                 key: '2983d45yun89q',
70                 algorithm: 'sha256'
71             };
72
73             var header = Hawk.client.header('https://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, timestamp: 1353809207, nonce: 'Ygvqdz', payload: 'something to write about', contentType: 'text/plain', ext: null }).field;
74             expect(header).to.equal('Hawk id="123456", ts="1353809207", nonce="Ygvqdz", hash="2QfCt3GuY9HQnHWyWD3wX68ZOKbynqlfYmuO2ZBRqtY=", mac="HTgtd0jPI6E4izx8e4OHdO36q00xFCU0FolNq3RiCYs="');
75             done();
76         });
77
78         it('returns a valid authorization header (empty payload)', function (done) {
79
80             var credentials = {
81                 id: '123456',
82                 key: '2983d45yun89q',
83                 algorithm: 'sha256'
84             };
85
86             var header = Hawk.client.header('https://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, timestamp: 1353809207, nonce: 'Ygvqdz', payload: '', contentType: 'text/plain' }).field;
87             expect(header).to.equal('Hawk id=\"123456\", ts=\"1353809207\", nonce=\"Ygvqdz\", hash=\"q/t+NNAkQZNlq/aAD6PlexImwQTxwgT2MahfTa9XRLA=\", mac=\"U5k16YEzn3UnBHKeBzsDXn067Gu3R4YaY6xOt9PYRZM=\"');
88             done();
89         });
90
91         it('returns a valid authorization header (pre hashed payload)', function (done) {
92
93             var credentials = {
94                 id: '123456',
95                 key: '2983d45yun89q',
96                 algorithm: 'sha256'
97             };
98
99             var options = { credentials: credentials, timestamp: 1353809207, nonce: 'Ygvqdz', payload: 'something to write about', contentType: 'text/plain' };
100             options.hash = Hawk.crypto.calculatePayloadHash(options.payload, credentials.algorithm, options.contentType);
101             var header = Hawk.client.header('https://example.net/somewhere/over/the/rainbow', 'POST', options).field;
102             expect(header).to.equal('Hawk id="123456", ts="1353809207", nonce="Ygvqdz", hash="2QfCt3GuY9HQnHWyWD3wX68ZOKbynqlfYmuO2ZBRqtY=", mac="HTgtd0jPI6E4izx8e4OHdO36q00xFCU0FolNq3RiCYs="');
103             done();
104         });
105
106         it('errors on missing uri', function (done) {
107
108             var header = Hawk.client.header('', 'POST');
109             expect(header.field).to.equal('');
110             expect(header.err).to.equal('Invalid argument type');
111             done();
112         });
113
114         it('errors on invalid uri', function (done) {
115
116             var header = Hawk.client.header(4, 'POST');
117             expect(header.field).to.equal('');
118             expect(header.err).to.equal('Invalid argument type');
119             done();
120         });
121
122         it('errors on missing method', function (done) {
123
124             var header = Hawk.client.header('https://example.net/somewhere/over/the/rainbow', '');
125             expect(header.field).to.equal('');
126             expect(header.err).to.equal('Invalid argument type');
127             done();
128         });
129
130         it('errors on invalid method', function (done) {
131
132             var header = Hawk.client.header('https://example.net/somewhere/over/the/rainbow', 5);
133             expect(header.field).to.equal('');
134             expect(header.err).to.equal('Invalid argument type');
135             done();
136         });
137
138         it('errors on missing options', function (done) {
139
140             var header = Hawk.client.header('https://example.net/somewhere/over/the/rainbow', 'POST');
141             expect(header.field).to.equal('');
142             expect(header.err).to.equal('Invalid argument type');
143             done();
144         });
145
146         it('errors on invalid credentials (id)', function (done) {
147
148             var credentials = {
149                 key: '2983d45yun89q',
150                 algorithm: 'sha256'
151             };
152
153             var header = Hawk.client.header('https://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, ext: 'Bazinga!', timestamp: 1353809207 });
154             expect(header.field).to.equal('');
155             expect(header.err).to.equal('Invalid credential object');
156             done();
157         });
158
159         it('errors on missing credentials', function (done) {
160
161             var header = Hawk.client.header('https://example.net/somewhere/over/the/rainbow', 'POST', { ext: 'Bazinga!', timestamp: 1353809207 });
162             expect(header.field).to.equal('');
163             expect(header.err).to.equal('Invalid credential object');
164             done();
165         });
166
167         it('errors on invalid credentials', function (done) {
168
169             var credentials = {
170                 id: '123456',
171                 algorithm: 'sha256'
172             };
173
174             var header = Hawk.client.header('https://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, ext: 'Bazinga!', timestamp: 1353809207 });
175             expect(header.field).to.equal('');
176             expect(header.err).to.equal('Invalid credential object');
177             done();
178         });
179
180         it('errors on invalid algorithm', function (done) {
181
182             var credentials = {
183                 id: '123456',
184                 key: '2983d45yun89q',
185                 algorithm: 'hmac-sha-0'
186             };
187
188             var header = Hawk.client.header('https://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, payload: 'something, anything!', ext: 'Bazinga!', timestamp: 1353809207 });
189             expect(header.field).to.equal('');
190             expect(header.err).to.equal('Unknown algorithm');
191             done();
192         });
193     });
194
195     describe('authenticate()', function () {
196
197         it('returns false on invalid header', function (done) {
198
199             var res = {
200                 headers: {
201                     'server-authorization': 'Hawk mac="abc", bad="xyz"'
202                 }
203             };
204
205             expect(Hawk.client.authenticate(res, {})).to.equal(false);
206             done();
207         });
208
209         it('returns false on invalid mac', function (done) {
210
211             var res = {
212                 headers: {
213                     'content-type': 'text/plain',
214                     'server-authorization': 'Hawk mac="_IJRsMl/4oL+nn+vKoeVZPdCHXB4yJkNnBbTbHFZUYE=", hash="f9cDF/TDm7TkYRLnGwRMfeDzT6LixQVLvrIKhh0vgmM=", ext="response-specific"'
215                 }
216             };
217
218             var artifacts = {
219                 method: 'POST',
220                 host: 'example.com',
221                 port: '8080',
222                 resource: '/resource/4?filter=a',
223                 ts: '1362336900',
224                 nonce: 'eb5S_L',
225                 hash: 'nJjkVtBE5Y/Bk38Aiokwn0jiJxt/0S2WRSUwWLCf5xk=',
226                 ext: 'some-app-data',
227                 app: undefined,
228                 dlg: undefined,
229                 mac: 'BlmSe8K+pbKIb6YsZCnt4E1GrYvY1AaYayNR82dGpIk=',
230                 id: '123456'
231             };
232
233             var credentials = {
234                 id: '123456',
235                 key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn',
236                 algorithm: 'sha256',
237                 user: 'steve'
238             };
239
240             expect(Hawk.client.authenticate(res, credentials, artifacts)).to.equal(false);
241             done();
242         });
243
244         it('returns true on ignoring hash', function (done) {
245
246             var res = {
247                 headers: {
248                     'content-type': 'text/plain',
249                     'server-authorization': 'Hawk mac="XIJRsMl/4oL+nn+vKoeVZPdCHXB4yJkNnBbTbHFZUYE=", hash="f9cDF/TDm7TkYRLnGwRMfeDzT6LixQVLvrIKhh0vgmM=", ext="response-specific"'
250                 }
251             };
252
253             var artifacts = {
254                 method: 'POST',
255                 host: 'example.com',
256                 port: '8080',
257                 resource: '/resource/4?filter=a',
258                 ts: '1362336900',
259                 nonce: 'eb5S_L',
260                 hash: 'nJjkVtBE5Y/Bk38Aiokwn0jiJxt/0S2WRSUwWLCf5xk=',
261                 ext: 'some-app-data',
262                 app: undefined,
263                 dlg: undefined,
264                 mac: 'BlmSe8K+pbKIb6YsZCnt4E1GrYvY1AaYayNR82dGpIk=',
265                 id: '123456'
266             };
267
268             var credentials = {
269                 id: '123456',
270                 key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn',
271                 algorithm: 'sha256',
272                 user: 'steve'
273             };
274
275             expect(Hawk.client.authenticate(res, credentials, artifacts)).to.equal(true);
276             done();
277         });
278
279         it('fails on invalid WWW-Authenticate header format', function (done) {
280
281             var header = 'Hawk ts="1362346425875", tsm="PhwayS28vtnn3qbv0mqRBYSXebN/zggEtucfeZ620Zo=", x="Stale timestamp"';
282             expect(Hawk.client.authenticate({ headers: { 'www-authenticate': header } }, {})).to.equal(false);
283             done();
284         });
285
286         it('fails on invalid WWW-Authenticate header format', function (done) {
287
288             var credentials = {
289                 id: '123456',
290                 key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn',
291                 algorithm: 'sha256',
292                 user: 'steve'
293             };
294
295             var header = 'Hawk ts="1362346425875", tsm="hwayS28vtnn3qbv0mqRBYSXebN/zggEtucfeZ620Zo=", error="Stale timestamp"';
296             expect(Hawk.client.authenticate({ headers: { 'www-authenticate': header } }, credentials)).to.equal(false);
297             done();
298         });
299
300         it('skips tsm validation when missing ts', function (done) {
301
302             var header = 'Hawk error="Stale timestamp"';
303             expect(Hawk.client.authenticate({ headers: { 'www-authenticate': header } }, {})).to.equal(true);
304             done();
305         });
306     });
307
308     describe('message()', function () {
309
310         it('generates authorization', function (done) {
311
312             var credentials = {
313                 id: '123456',
314                 key: '2983d45yun89q',
315                 algorithm: 'sha1'
316             };
317
318             var auth = Hawk.client.message('example.com', 80, 'I am the boodyman', { credentials: credentials, timestamp: 1353809207, nonce: 'abc123' });
319             expect(auth).to.exist();
320             expect(auth.ts).to.equal(1353809207);
321             expect(auth.nonce).to.equal('abc123');
322             done();
323         });
324
325         it('errors on invalid host', function (done) {
326
327             var credentials = {
328                 id: '123456',
329                 key: '2983d45yun89q',
330                 algorithm: 'sha1'
331             };
332
333             var auth = Hawk.client.message(5, 80, 'I am the boodyman', { credentials: credentials, timestamp: 1353809207, nonce: 'abc123' });
334             expect(auth).to.not.exist();
335             done();
336         });
337
338         it('errors on invalid port', function (done) {
339
340             var credentials = {
341                 id: '123456',
342                 key: '2983d45yun89q',
343                 algorithm: 'sha1'
344             };
345
346             var auth = Hawk.client.message('example.com', '80', 'I am the boodyman', { credentials: credentials, timestamp: 1353809207, nonce: 'abc123' });
347             expect(auth).to.not.exist();
348             done();
349         });
350
351         it('errors on missing host', function (done) {
352
353             var credentials = {
354                 id: '123456',
355                 key: '2983d45yun89q',
356                 algorithm: 'sha1'
357             };
358
359             var auth = Hawk.client.message('example.com', 0, 'I am the boodyman', { credentials: credentials, timestamp: 1353809207, nonce: 'abc123' });
360             expect(auth).to.not.exist();
361             done();
362         });
363
364         it('errors on null message', function (done) {
365
366             var credentials = {
367                 id: '123456',
368                 key: '2983d45yun89q',
369                 algorithm: 'sha1'
370             };
371
372             var auth = Hawk.client.message('example.com', 80, null, { credentials: credentials, timestamp: 1353809207, nonce: 'abc123' });
373             expect(auth).to.not.exist();
374             done();
375         });
376
377         it('errors on missing message', function (done) {
378
379             var credentials = {
380                 id: '123456',
381                 key: '2983d45yun89q',
382                 algorithm: 'sha1'
383             };
384
385             var auth = Hawk.client.message('example.com', 80, undefined, { credentials: credentials, timestamp: 1353809207, nonce: 'abc123' });
386             expect(auth).to.not.exist();
387             done();
388         });
389
390         it('errors on invalid message', function (done) {
391
392             var credentials = {
393                 id: '123456',
394                 key: '2983d45yun89q',
395                 algorithm: 'sha1'
396             };
397
398             var auth = Hawk.client.message('example.com', 80, 5, { credentials: credentials, timestamp: 1353809207, nonce: 'abc123' });
399             expect(auth).to.not.exist();
400             done();
401         });
402
403         it('errors on missing options', function (done) {
404
405             var credentials = {
406                 id: '123456',
407                 key: '2983d45yun89q',
408                 algorithm: 'sha1'
409             };
410
411             var auth = Hawk.client.message('example.com', 80, 'I am the boodyman');
412             expect(auth).to.not.exist();
413             done();
414         });
415
416         it('errors on invalid credentials (id)', function (done) {
417
418             var credentials = {
419                 key: '2983d45yun89q',
420                 algorithm: 'sha1'
421             };
422
423             var auth = Hawk.client.message('example.com', 80, 'I am the boodyman', { credentials: credentials, timestamp: 1353809207, nonce: 'abc123' });
424             expect(auth).to.not.exist();
425             done();
426         });
427
428         it('errors on invalid credentials (key)', function (done) {
429
430             var credentials = {
431                 id: '123456',
432                 algorithm: 'sha1'
433             };
434
435             var auth = Hawk.client.message('example.com', 80, 'I am the boodyman', { credentials: credentials, timestamp: 1353809207, nonce: 'abc123' });
436             expect(auth).to.not.exist();
437             done();
438         });
439     });
440 });