You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					79 lines
				
				2.1 KiB
			
		
		
			
		
	
	
					79 lines
				
				2.1 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								// 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);
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 |