// 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('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);
});

});