17
17
18
18
var assert = require ( 'assert' ) ;
19
19
var http = require ( 'http' ) ;
20
+ var url = require ( 'url' ) ;
20
21
21
22
var HttpClient = require ( '../../http' ) . HttpClient ;
22
23
var HttpRequest = require ( '../../_base' ) . require ( 'webdriver.http.Request' ) ;
@@ -25,7 +26,7 @@ var promise = require('../..').promise;
25
26
var test = require ( '../../lib/test' ) ;
26
27
27
28
describe ( 'HttpClient' , function ( ) {
28
- this . timeout ( 4 * 1000 ) ;
29
+ this . timeout ( 4 * 1000 ) ;
29
30
30
31
var server = new Server ( function ( req , res ) {
31
32
if ( req . method == 'GET' && req . url == '/echo' ) {
@@ -44,6 +45,30 @@ describe('HttpClient', function() {
44
45
res . writeHead ( 303 , { } ) ;
45
46
res . end ( ) ;
46
47
48
+ } else if ( req . method == 'GET' && req . url == '/protected' ) {
49
+ var denyAccess = function ( ) {
50
+ res . writeHead ( 401 , { 'WWW-Authenticate' : 'Basic realm="test"' } ) ;
51
+ res . end ( 'Access denied' ) ;
52
+ } ;
53
+
54
+ var basicAuthRegExp = / ^ \s * b a s i c \s + ( [ a - z 0 - 9 \- \. _ ~ \+ \/ ] + ) = * \s * $ / i
55
+ var auth = req . headers . authorization ;
56
+ var match = basicAuthRegExp . exec ( auth || '' ) ;
57
+ if ( ! match ) {
58
+ denyAccess ( ) ;
59
+ return ;
60
+ }
61
+
62
+ var userNameAndPass = new Buffer ( match [ 1 ] , 'base64' ) . toString ( ) ;
63
+ var parts = userNameAndPass . split ( ':' , 2 ) ;
64
+ if ( parts [ 0 ] !== 'genie' && parts [ 1 ] !== 'bottle' ) {
65
+ denyAccess ( ) ;
66
+ return ;
67
+ }
68
+
69
+ res . writeHead ( 200 , { 'content-type' : 'text/plain' } ) ;
70
+ res . end ( 'Access granted!' ) ;
71
+
47
72
} else if ( req . method == 'GET' && req . url == '/proxy' ) {
48
73
res . writeHead ( 200 , req . headers ) ;
49
74
res . end ( ) ;
@@ -86,6 +111,30 @@ describe('HttpClient', function() {
86
111
} ) ;
87
112
} ) ;
88
113
114
+ test . it ( 'can use basic auth' , function ( ) {
115
+ var parsed = url . parse ( server . url ( ) ) ;
116
+ parsed . auth = 'genie:bottle' ;
117
+
118
+ var client = new HttpClient ( url . format ( parsed ) ) ;
119
+ var request = new HttpRequest ( 'GET' , '/protected' ) ;
120
+ return promise . checkedNodeCall ( client . send . bind ( client , request ) )
121
+ . then ( function ( response ) {
122
+ assert . equal ( 200 , response . status ) ;
123
+ assert . equal ( 'text/plain' , response . headers [ 'content-type' ] ) ;
124
+ assert . equal ( 'Access granted!' , response . body ) ;
125
+ } ) ;
126
+ } ) ;
127
+
128
+ test . it ( 'fails requests missing required basic auth' , function ( ) {
129
+ var client = new HttpClient ( server . url ( ) ) ;
130
+ var request = new HttpRequest ( 'GET' , '/protected' ) ;
131
+ return promise . checkedNodeCall ( client . send . bind ( client , request ) )
132
+ . then ( function ( response ) {
133
+ assert . equal ( 401 , response . status ) ;
134
+ assert . equal ( 'Access denied' , response . body ) ;
135
+ } ) ;
136
+ } ) ;
137
+
89
138
test . it ( 'automatically follows redirects' , function ( ) {
90
139
var request = new HttpRequest ( 'GET' , '/redirect' ) ;
91
140
var client = new HttpClient ( server . url ( ) ) ;
0 commit comments