|
1 /* Any copyright is dedicated to the Public Domain. |
|
2 * http://creativecommons.org/publicdomain/zero/1.0/ */ |
|
3 |
|
4 Cu.import("resource://services-crypto/utils.js"); |
|
5 Cu.import("resource://services-common/async.js"); |
|
6 Cu.import("resource://services-common/rest.js"); |
|
7 Cu.import("resource://services-common/utils.js"); |
|
8 |
|
9 function run_test() { |
|
10 initTestLogging("Trace"); |
|
11 run_next_test(); |
|
12 } |
|
13 |
|
14 add_test(function test_authenticated_request() { |
|
15 _("Ensure that sending a MAC authenticated GET request works as expected."); |
|
16 |
|
17 let message = "Great Success!"; |
|
18 |
|
19 // TODO: We use a preset key here, but use getTokenFromBrowserIDAssertion() |
|
20 // from TokenServerClient to get a real one when possible. (Bug 745800) |
|
21 let id = "eyJleHBpcmVzIjogMTM2NTAxMDg5OC4x"; |
|
22 let key = "qTZf4ZFpAMpMoeSsX3zVRjiqmNs="; |
|
23 let method = "GET"; |
|
24 |
|
25 let nonce = btoa(CryptoUtils.generateRandomBytes(16)); |
|
26 let ts = Math.floor(Date.now() / 1000); |
|
27 let extra = {ts: ts, nonce: nonce}; |
|
28 |
|
29 let auth; |
|
30 |
|
31 let server = httpd_setup({"/foo": function(request, response) { |
|
32 do_check_true(request.hasHeader("Authorization")); |
|
33 do_check_eq(auth, request.getHeader("Authorization")); |
|
34 |
|
35 response.setStatusLine(request.httpVersion, 200, "OK"); |
|
36 response.bodyOutputStream.write(message, message.length); |
|
37 } |
|
38 }); |
|
39 let uri = CommonUtils.makeURI(server.baseURI + "/foo"); |
|
40 let sig = CryptoUtils.computeHTTPMACSHA1(id, key, method, uri, extra); |
|
41 auth = sig.getHeader(); |
|
42 |
|
43 let req = new TokenAuthenticatedRESTRequest(uri, {id: id, key: key}, extra); |
|
44 let cb = Async.makeSpinningCallback(); |
|
45 req.get(cb); |
|
46 let result = cb.wait(); |
|
47 |
|
48 do_check_eq(null, result); |
|
49 do_check_eq(message, req.response.body); |
|
50 |
|
51 server.stop(run_next_test); |
|
52 }); |