22
33var http = require ( 'http' )
44var request = require ( '../index' )
5- var hawk = require ( 'hawk' )
5+ var hawk = require ( '../lib/ hawk' )
66var tape = require ( 'tape' )
77var assert = require ( 'assert' )
88
99var server = http . createServer ( function ( req , res ) {
10- var getCred = function ( id , callback ) {
11- assert . equal ( id , 'dh37fgj492je' )
12- var credentials = {
13- key : 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn' ,
14- algorithm : 'sha256' ,
15- user : 'Steve'
16- }
17- return callback ( null , credentials )
18- }
19-
20- hawk . server . authenticate ( req , getCred , { } , function ( err , credentials , attributes ) {
21- res . writeHead ( err ? 401 : 200 , {
22- 'Content-Type' : 'text/plain'
23- } )
24- res . end ( err ? 'Shoosh!' : 'Hello ' + credentials . user )
10+ res . writeHead ( 200 , {
11+ 'Content-Type' : 'text/plain'
2512 } )
13+ res . end ( authenticate ( req ) )
2614} )
2715
2816tape ( 'setup' , function ( t ) {
@@ -32,18 +20,124 @@ tape('setup', function (t) {
3220 } )
3321} )
3422
35- tape ( 'hawk' , function ( t ) {
36- var creds = {
37- key : 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn' ,
38- algorithm : 'sha256' ,
39- id : 'dh37fgj492je'
40- }
23+ var creds = {
24+ key : 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn' ,
25+ algorithm : 'sha256' ,
26+ id : 'dh37fgj492je'
27+ }
28+
29+ tape ( 'hawk-get' , function ( t ) {
4130 request ( server . url , {
4231 hawk : { credentials : creds }
4332 } , function ( err , res , body ) {
4433 t . equal ( err , null )
4534 t . equal ( res . statusCode , 200 )
46- t . equal ( body , 'Hello Steve' )
35+ t . equal ( body , 'OK' )
36+ t . end ( )
37+ } )
38+ } )
39+
40+ tape ( 'hawk-post' , function ( t ) {
41+ request . post ( { url : server . url , body : 'hello' , hawk : { credentials : creds , payload : 'hello' } } , function ( err , res , body ) {
42+ t . equal ( err , null )
43+ t . equal ( res . statusCode , 200 )
44+ t . equal ( body , 'OK' )
45+ t . end ( )
46+ } )
47+ } )
48+
49+ tape ( 'hawk-ext' , function ( t ) {
50+ request ( server . url , {
51+ hawk : { credentials : creds , ext : 'test' }
52+ } , function ( err , res , body ) {
53+ t . equal ( err , null )
54+ t . equal ( res . statusCode , 200 )
55+ t . equal ( body , 'OK' )
56+ t . end ( )
57+ } )
58+ } )
59+
60+ tape ( 'hawk-app' , function ( t ) {
61+ request ( server . url , {
62+ hawk : { credentials : creds , app : 'test' }
63+ } , function ( err , res , body ) {
64+ t . equal ( err , null )
65+ t . equal ( res . statusCode , 200 )
66+ t . equal ( body , 'OK' )
67+ t . end ( )
68+ } )
69+ } )
70+
71+ tape ( 'hawk-app+dlg' , function ( t ) {
72+ request ( server . url , {
73+ hawk : { credentials : creds , app : 'test' , dlg : 'asd' }
74+ } , function ( err , res , body ) {
75+ t . equal ( err , null )
76+ t . equal ( res . statusCode , 200 )
77+ t . equal ( body , 'OK' )
78+ t . end ( )
79+ } )
80+ } )
81+
82+ tape ( 'hawk-missing-creds' , function ( t ) {
83+ request ( server . url , {
84+ hawk : { }
85+ } , function ( err , res , body ) {
86+ t . equal ( err , null )
87+ t . equal ( res . statusCode , 200 )
88+ t . equal ( body , 'FAIL' )
89+ t . end ( )
90+ } )
91+ } )
92+
93+ tape ( 'hawk-missing-creds-id' , function ( t ) {
94+ request ( server . url , {
95+ hawk : {
96+ credentials : { }
97+ }
98+ } , function ( err , res , body ) {
99+ t . equal ( err , null )
100+ t . equal ( res . statusCode , 200 )
101+ t . equal ( body , 'FAIL' )
102+ t . end ( )
103+ } )
104+ } )
105+
106+ tape ( 'hawk-missing-creds-key' , function ( t ) {
107+ request ( server . url , {
108+ hawk : {
109+ credentials : { id : 'asd' }
110+ }
111+ } , function ( err , res , body ) {
112+ t . equal ( err , null )
113+ t . equal ( res . statusCode , 200 )
114+ t . equal ( body , 'FAIL' )
115+ t . end ( )
116+ } )
117+ } )
118+
119+ tape ( 'hawk-missing-creds-algo' , function ( t ) {
120+ request ( server . url , {
121+ hawk : {
122+ credentials : { key : '123' , id : '123' }
123+ }
124+ } , function ( err , res , body ) {
125+ t . equal ( err , null )
126+ t . equal ( res . statusCode , 200 )
127+ t . equal ( body , 'FAIL' )
128+ t . end ( )
129+ } )
130+ } )
131+
132+ tape ( 'hawk-invalid-creds-algo' , function ( t ) {
133+ request ( server . url , {
134+ hawk : {
135+ credentials : { key : '123' , id : '123' , algorithm : 'xx' }
136+ }
137+ } , function ( err , res , body ) {
138+ t . equal ( err , null )
139+ t . equal ( res . statusCode , 200 )
140+ t . equal ( body , 'FAIL' )
47141 t . end ( )
48142 } )
49143} )
@@ -53,3 +147,41 @@ tape('cleanup', function (t) {
53147 t . end ( )
54148 } )
55149} )
150+
151+ function authenticate ( req ) {
152+ if ( ! req . headers . authorization ) {
153+ return 'FAIL'
154+ }
155+
156+ var headerParts = req . headers . authorization . match ( / ^ ( \w + ) (?: \s + ( .* ) ) ? $ / )
157+ assert . equal ( headerParts [ 1 ] , 'Hawk' )
158+ var attributes = { }
159+ headerParts [ 2 ] . replace ( / ( \w + ) = " ( [ ^ " \\ ] * ) " \s * (?: , \s * | $ ) / g, function ( $0 , $1 , $2 ) { attributes [ $1 ] = $2 } )
160+ var hostParts = req . headers . host . split ( ':' )
161+
162+ const artifacts = {
163+ method : req . method ,
164+ host : hostParts [ 0 ] ,
165+ port : ( hostParts [ 1 ] ? hostParts [ 1 ] : ( req . connection && req . connection . encrypted ? 443 : 80 ) ) ,
166+ resource : req . url ,
167+ ts : attributes . ts ,
168+ nonce : attributes . nonce ,
169+ hash : attributes . hash ,
170+ ext : attributes . ext ,
171+ app : attributes . app ,
172+ dlg : attributes . dlg ,
173+ mac : attributes . mac ,
174+ id : attributes . id
175+ }
176+
177+ assert . equal ( attributes . id , 'dh37fgj492je' )
178+ var credentials = {
179+ key : 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn' ,
180+ algorithm : 'sha256' ,
181+ user : 'Steve'
182+ }
183+
184+ const mac = hawk . calculateMac ( credentials , artifacts )
185+ assert . equal ( mac , attributes . mac )
186+ return 'OK'
187+ }
0 commit comments