Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
81146 views
1
// Load modules
2
3
var Url = require('url');
4
var Code = require('code');
5
var Hawk = require('../lib');
6
var Hoek = require('hoek');
7
var Lab = require('lab');
8
9
10
// Declare internals
11
12
var internals = {};
13
14
15
// Test shortcuts
16
17
var lab = exports.lab = Lab.script();
18
var describe = lab.experiment;
19
var it = lab.test;
20
var expect = Code.expect;
21
22
23
describe('Hawk', function () {
24
25
var credentialsFunc = function (id, callback) {
26
27
var credentials = {
28
id: id,
29
key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn',
30
algorithm: (id === '1' ? 'sha1' : 'sha256'),
31
user: 'steve'
32
};
33
34
return callback(null, credentials);
35
};
36
37
it('should generate an authorization then successfully parse it', function (done) {
38
39
credentialsFunc('123456', function (err, credentials) {
40
41
var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials });
42
expect(auth).to.exist();
43
44
Hawk.server.authenticateMessage('example.com', 8080, 'some message', auth, credentialsFunc, {}, function (err, credentials) {
45
46
expect(err).to.not.exist();
47
expect(credentials.user).to.equal('steve');
48
done();
49
});
50
});
51
});
52
53
it('should fail authorization on mismatching host', function (done) {
54
55
credentialsFunc('123456', function (err, credentials) {
56
57
var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials });
58
expect(auth).to.exist();
59
60
Hawk.server.authenticateMessage('example1.com', 8080, 'some message', auth, credentialsFunc, {}, function (err, credentials) {
61
62
expect(err).to.exist();
63
expect(err.message).to.equal('Bad mac');
64
done();
65
});
66
});
67
});
68
69
it('should fail authorization on stale timestamp', function (done) {
70
71
credentialsFunc('123456', function (err, credentials) {
72
73
var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials });
74
expect(auth).to.exist();
75
76
Hawk.server.authenticateMessage('example.com', 8080, 'some message', auth, credentialsFunc, { localtimeOffsetMsec: 100000 }, function (err, credentials) {
77
78
expect(err).to.exist();
79
expect(err.message).to.equal('Stale timestamp');
80
done();
81
});
82
});
83
});
84
85
it('overrides timestampSkewSec', function (done) {
86
87
credentialsFunc('123456', function (err, credentials) {
88
89
var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials, localtimeOffsetMsec: 100000 });
90
expect(auth).to.exist();
91
92
Hawk.server.authenticateMessage('example.com', 8080, 'some message', auth, credentialsFunc, { timestampSkewSec: 500 }, function (err, credentials) {
93
94
expect(err).to.not.exist();
95
done();
96
});
97
});
98
});
99
100
it('should fail authorization on invalid authorization', function (done) {
101
102
credentialsFunc('123456', function (err, credentials) {
103
104
var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials });
105
expect(auth).to.exist();
106
delete auth.id;
107
108
Hawk.server.authenticateMessage('example.com', 8080, 'some message', auth, credentialsFunc, {}, function (err, credentials) {
109
110
expect(err).to.exist();
111
expect(err.message).to.equal('Invalid authorization');
112
done();
113
});
114
});
115
});
116
117
it('should fail authorization on bad hash', function (done) {
118
119
credentialsFunc('123456', function (err, credentials) {
120
121
var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials });
122
expect(auth).to.exist();
123
124
Hawk.server.authenticateMessage('example.com', 8080, 'some message1', auth, credentialsFunc, {}, function (err, credentials) {
125
126
expect(err).to.exist();
127
expect(err.message).to.equal('Bad message hash');
128
done();
129
});
130
});
131
});
132
133
it('should fail authorization on nonce error', function (done) {
134
135
credentialsFunc('123456', function (err, credentials) {
136
137
var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials });
138
expect(auth).to.exist();
139
140
Hawk.server.authenticateMessage('example.com', 8080, 'some message', auth, credentialsFunc, { nonceFunc: function (nonce, ts, callback) { callback (new Error('kaboom')); } }, function (err, credentials) {
141
142
expect(err).to.exist();
143
expect(err.message).to.equal('Invalid nonce');
144
done();
145
});
146
});
147
});
148
149
it('should fail authorization on credentials error', function (done) {
150
151
credentialsFunc('123456', function (err, credentials) {
152
153
var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials });
154
expect(auth).to.exist();
155
156
var errFunc = function (id, callback) {
157
158
callback(new Error('kablooey'));
159
};
160
161
Hawk.server.authenticateMessage('example.com', 8080, 'some message', auth, errFunc, {}, function (err, credentials) {
162
163
expect(err).to.exist();
164
expect(err.message).to.equal('kablooey');
165
done();
166
});
167
});
168
});
169
170
it('should fail authorization on missing credentials', function (done) {
171
172
credentialsFunc('123456', function (err, credentials) {
173
174
var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials });
175
expect(auth).to.exist();
176
177
var errFunc = function (id, callback) {
178
179
callback();
180
};
181
182
Hawk.server.authenticateMessage('example.com', 8080, 'some message', auth, errFunc, {}, function (err, credentials) {
183
184
expect(err).to.exist();
185
expect(err.message).to.equal('Unknown credentials');
186
done();
187
});
188
});
189
});
190
191
it('should fail authorization on invalid credentials', function (done) {
192
193
credentialsFunc('123456', function (err, credentials) {
194
195
var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials });
196
expect(auth).to.exist();
197
198
var errFunc = function (id, callback) {
199
200
callback(null, {});
201
};
202
203
Hawk.server.authenticateMessage('example.com', 8080, 'some message', auth, errFunc, {}, function (err, credentials) {
204
205
expect(err).to.exist();
206
expect(err.message).to.equal('Invalid credentials');
207
done();
208
});
209
});
210
});
211
212
it('should fail authorization on invalid credentials algorithm', function (done) {
213
214
credentialsFunc('123456', function (err, credentials) {
215
216
var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials });
217
expect(auth).to.exist();
218
219
var errFunc = function (id, callback) {
220
221
callback(null, { key: '123', algorithm: '456' });
222
};
223
224
Hawk.server.authenticateMessage('example.com', 8080, 'some message', auth, errFunc, {}, function (err, credentials) {
225
226
expect(err).to.exist();
227
expect(err.message).to.equal('Unknown algorithm');
228
done();
229
});
230
});
231
});
232
233
it('should fail on missing host', function (done) {
234
235
credentialsFunc('123456', function (err, credentials) {
236
237
var auth = Hawk.client.message(null, 8080, 'some message', { credentials: credentials });
238
expect(auth).to.not.exist();
239
done();
240
});
241
});
242
243
it('should fail on missing credentials', function (done) {
244
245
var auth = Hawk.client.message('example.com', 8080, 'some message', {});
246
expect(auth).to.not.exist();
247
done();
248
});
249
250
it('should fail on invalid algorithm', function (done) {
251
252
credentialsFunc('123456', function (err, credentials) {
253
254
var creds = Hoek.clone(credentials);
255
creds.algorithm = 'blah';
256
var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: creds });
257
expect(auth).to.not.exist();
258
done();
259
});
260
});
261
});
262
263