78 lines
2.1 KiB
JavaScript
Executable file
78 lines
2.1 KiB
JavaScript
Executable file
// 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);
|
|
});
|
|
});
|
|
|