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); | ||
|  |     }); | ||
|  | }); | ||
|  | 
 |