| // Load modules |
| |
| var Http = require('http'); |
| var Request = require('request'); |
| var Hawk = require('../lib'); |
| |
| |
| // Declare internals |
| |
| var internals = { |
| credentials: { |
| dh37fgj492je: { |
| id: 'dh37fgj492je', // Required by Hawk.client.header |
| key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', |
| algorithm: 'sha256', |
| user: 'Steve' |
| } |
| } |
| }; |
| |
| |
| // Credentials lookup function |
| |
| var credentialsFunc = function (id, callback) { |
| |
| return callback(null, internals.credentials[id]); |
| }; |
| |
| |
| // Create HTTP server |
| |
| var handler = function (req, res) { |
| |
| Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { |
| |
| var payload = (!err ? 'Hello ' + credentials.user + ' ' + artifacts.ext : 'Shoosh!'); |
| var headers = { |
| 'Content-Type': 'text/plain', |
| 'Server-Authorization': Hawk.server.header(credentials, artifacts, { payload: payload, contentType: 'text/plain' }) |
| }; |
| |
| res.writeHead(!err ? 200 : 401, headers); |
| res.end(payload); |
| }); |
| }; |
| |
| Http.createServer(handler).listen(8000, '127.0.0.1'); |
| |
| |
| // Send unauthenticated request |
| |
| Request('http://127.0.0.1:8000/resource/1?b=1&a=2', function (error, response, body) { |
| |
| console.log(response.statusCode + ': ' + body); |
| }); |
| |
| |
| // Send authenticated request |
| |
| credentialsFunc('dh37fgj492je', function (err, credentials) { |
| |
| var header = Hawk.client.header('http://127.0.0.1:8000/resource/1?b=1&a=2', 'GET', { credentials: credentials, ext: 'and welcome!' }); |
| var options = { |
| uri: 'http://127.0.0.1:8000/resource/1?b=1&a=2', |
| method: 'GET', |
| headers: { |
| authorization: header.field |
| } |
| }; |
| |
| Request(options, function (error, response, body) { |
| |
| var isValid = Hawk.client.authenticate(response, credentials, header.artifacts, { payload: body }); |
| console.log(response.statusCode + ': ' + body + (isValid ? ' (valid)' : ' (invalid)')); |
| process.exit(0); |
| }); |
| }); |
| |