1 | var createServer = require('http').createServer |
---|
2 | , request = require('../index') |
---|
3 | , httpSignature = require('http-signature') |
---|
4 | , assert = require('assert') |
---|
5 | ; |
---|
6 | |
---|
7 | var privateKeyPEMs = {} |
---|
8 | |
---|
9 | privateKeyPEMs['key-1'] = |
---|
10 | '-----BEGIN RSA PRIVATE KEY-----\n' + |
---|
11 | 'MIIEpAIBAAKCAQEAzWSJl+Z9Bqv00FVL5N3+JCUoqmQPjIlya1BbeqQroNQ5yG1i\n' + |
---|
12 | 'VbYTTnMRa1zQtR6r2fNvWeg94DvxivxIG9diDMnrzijAnYlTLOl84CK2vOxkj5b6\n' + |
---|
13 | '8zrLH9b/Gd6NOHsywo8IjvXvCeTfca5WUHcuVi2lT9VjygFs1ILG4RyeX1BXUumu\n' + |
---|
14 | 'Y8fzmposxLYdMxCqUTzAn0u9Saq2H2OVj5u114wS7OQPigu6G99dpn/iPHa3zBm8\n' + |
---|
15 | '7baBWDbqZWRW0BP3K6eqq8sut1+NLhNW8ADPTdnO/SO+kvXy7fqd8atSn+HlQcx6\n' + |
---|
16 | 'tW42dhXf3E9uE7K78eZtW0KvfyNGAjsI1Fft2QIDAQABAoIBAG1exe3/LEBrPLfb\n' + |
---|
17 | 'U8iRdY0lxFvHYIhDgIwohC3wUdMYb5SMurpNdEZn+7Sh/fkUVgp/GKJViu1mvh52\n' + |
---|
18 | 'bKd2r52DwG9NQBQjVgkqY/auRYSglIPpr8PpYNSZlcneunCDGeqEY9hMmXc5Ssqs\n' + |
---|
19 | 'PQYoEKKPN+IlDTg6PguDgAfLR4IUvt9KXVvmB/SSgV9tSeTy35LECt1Lq3ozbUgu\n' + |
---|
20 | '30HZI3U6/7H+X22Pxxf8vzBtzkg5rRCLgv+OeNPo16xMnqbutt4TeqEkxRv5rtOo\n' + |
---|
21 | '/A1i9khBeki0OJAFJsE82qnaSZodaRsxic59VnN8sWBwEKAt87tEu5A3K3j4XSDU\n' + |
---|
22 | '/avZxAECgYEA+pS3DvpiQLtHlaO3nAH6MxHRrREOARXWRDe5nUQuUNpS1xq9wte6\n' + |
---|
23 | 'DkFtba0UCvDLic08xvReTCbo9kH0y6zEy3zMpZuJlKbcWCkZf4S5miYPI0RTZtF8\n' + |
---|
24 | 'yps6hWqzYFSiO9hMYws9k4OJLxX0x3sLK7iNZ32ujcSrkPBSiBr0gxkCgYEA0dWl\n' + |
---|
25 | '637K41AJ/zy0FP0syq+r4eIkfqv+/t6y2aQVUBvxJYrj9ci6XHBqoxpDV8lufVYj\n' + |
---|
26 | 'fUAfeI9/MZaWvQJRbnYLre0I6PJfLuCBIL5eflO77BGso165AF7QJZ+fwtgKv3zv\n' + |
---|
27 | 'ZX75eudCSS/cFo0po9hlbcLMT4B82zEkgT8E2MECgYEAnz+3/wrdOmpLGiyL2dff\n' + |
---|
28 | '3GjsqmJ2VfY8z+niSrI0BSpbD11tT9Ct67VlCBjA7hsOH6uRfpd6/kaUMzzDiFVq\n' + |
---|
29 | 'VDAiFvV8QD6zNkwYalQ9aFvbrvwTTPrBpjl0vamMCiJ/YC0cjq1sGr2zh3sar1Ph\n' + |
---|
30 | 'S43kP+s97dcZeelhaiJHVrECgYEAsx61q/loJ/LDFeYzs1cLTVn4V7I7hQY9fkOM\n' + |
---|
31 | 'WM0AhInVqD6PqdfXfeFYpjJdGisQ7l0BnoGGW9vir+nkcyPvb2PFRIr6+B8tsU5j\n' + |
---|
32 | '7BeVgjDoUfQkcrEBK5fEBtnj/ud9BUkY8oMZZBjVNLRuI7IMwZiPvMp0rcj4zAN/\n' + |
---|
33 | 'LfUlpgECgYArBvFcBxSkNAzR3Rtteud1YDboSKluRM37Ey5plrn4BS0DD0jm++aD\n' + |
---|
34 | '0pG2Hsik000hibw92lCkzvvBVAqF8BuAcnPlAeYfsOaa97PGEjSKEN5bJVWZ9/om\n' + |
---|
35 | '9FV1axotRN2XWlwrhixZLEaagkREXhgQc540FS5O8IaI2Vpa80Atzg==\n' + |
---|
36 | '-----END RSA PRIVATE KEY-----' |
---|
37 | |
---|
38 | var publicKeyPEMs = {} |
---|
39 | |
---|
40 | publicKeyPEMs['key-1'] = |
---|
41 | '-----BEGIN PUBLIC KEY-----\n' + |
---|
42 | 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzWSJl+Z9Bqv00FVL5N3+\n' + |
---|
43 | 'JCUoqmQPjIlya1BbeqQroNQ5yG1iVbYTTnMRa1zQtR6r2fNvWeg94DvxivxIG9di\n' + |
---|
44 | 'DMnrzijAnYlTLOl84CK2vOxkj5b68zrLH9b/Gd6NOHsywo8IjvXvCeTfca5WUHcu\n' + |
---|
45 | 'Vi2lT9VjygFs1ILG4RyeX1BXUumuY8fzmposxLYdMxCqUTzAn0u9Saq2H2OVj5u1\n' + |
---|
46 | '14wS7OQPigu6G99dpn/iPHa3zBm87baBWDbqZWRW0BP3K6eqq8sut1+NLhNW8ADP\n' + |
---|
47 | 'TdnO/SO+kvXy7fqd8atSn+HlQcx6tW42dhXf3E9uE7K78eZtW0KvfyNGAjsI1Fft\n' + |
---|
48 | '2QIDAQAB\n' + |
---|
49 | '-----END PUBLIC KEY-----' |
---|
50 | |
---|
51 | publicKeyPEMs['key-2'] = |
---|
52 | '-----BEGIN PUBLIC KEY-----\n' + |
---|
53 | 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqp04VVr9OThli9b35Omz\n' + |
---|
54 | 'VqSfWbsoQuRrgyWsrNRn3XkFmbWw4FzZwQ42OgGMzQ84Ta4d9zGKKQyFriTiPjPf\n' + |
---|
55 | 'xhhrsaJnDuybcpVhcr7UNKjSZ0S59tU3hpRiEz6hO+Nc/OSSLkvalG0VKrxOln7J\n' + |
---|
56 | 'LK/h3rNS/l6wDZ5S/KqsI6CYtV2ZLpn3ahLrizvEYNY038Qcm38qMWx+VJAvZ4di\n' + |
---|
57 | 'qqmW7RLIsLT59SWmpXdhFKnkYYGhxrk1Mwl22dBTJNY5SbriU5G3gWgzYkm8pgHr\n' + |
---|
58 | '6CtrXch9ciJAcDJehPrKXNvNDOdUh8EW3fekNJerF1lWcwQg44/12v8sDPyfbaKB\n' + |
---|
59 | 'dQIDAQAB\n' + |
---|
60 | '-----END PUBLIC KEY-----' |
---|
61 | |
---|
62 | var server = createServer(function (req, res) { |
---|
63 | var parsed = httpSignature.parseRequest(req) |
---|
64 | var publicKeyPEM = publicKeyPEMs[parsed.keyId] |
---|
65 | var verified = httpSignature.verifySignature(parsed, publicKeyPEM) |
---|
66 | res.writeHead(verified ? 200 : 400) |
---|
67 | res.end() |
---|
68 | }) |
---|
69 | |
---|
70 | server.listen(8080, function () { |
---|
71 | function correctKeyTest(callback) { |
---|
72 | var options = { |
---|
73 | httpSignature: { |
---|
74 | keyId: 'key-1', |
---|
75 | key: privateKeyPEMs['key-1'] |
---|
76 | } |
---|
77 | } |
---|
78 | request('http://localhost:8080', options, function (e, r, b) { |
---|
79 | assert.equal(200, r.statusCode) |
---|
80 | callback() |
---|
81 | }) |
---|
82 | } |
---|
83 | |
---|
84 | function incorrectKeyTest(callback) { |
---|
85 | var options = { |
---|
86 | httpSignature: { |
---|
87 | keyId: 'key-2', |
---|
88 | key: privateKeyPEMs['key-1'] |
---|
89 | } |
---|
90 | } |
---|
91 | request('http://localhost:8080', options, function (e, r, b) { |
---|
92 | assert.equal(400, r.statusCode) |
---|
93 | callback() |
---|
94 | }) |
---|
95 | } |
---|
96 | |
---|
97 | var tests = [correctKeyTest, incorrectKeyTest] |
---|
98 | var todo = tests.length; |
---|
99 | for(var i = 0; i < tests.length; ++i) { |
---|
100 | tests[i](function() { |
---|
101 | if(!--todo) { |
---|
102 | server.close() |
---|
103 | } |
---|
104 | }) |
---|
105 | } |
---|
106 | }) |
---|