blob: 583e3ce86d4edc933b02220e8bb1c79080be5182 [file] [log] [blame]
# Copyright 2015 The Bazel Authors. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""An HTTP server to use for external repository integration tests."""
import base64
from BaseHTTPServer import BaseHTTPRequestHandler
import getopt
import os
import SocketServer
import sys
auth = None
class Handler(BaseHTTPRequestHandler):
"""Handlers for testing HTTP server."""
def do_HEAD(self): # pylint: disable=invalid-name
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
def do_AUTHHEAD(self): # pylint: disable=invalid-name
self.send_response(401)
self.send_header('WWW-Authenticate', 'Basic realm=\"Bazel\"')
self.send_header('Content-type', 'text/html')
self.end_headers()
def do_GET(self): # pylint: disable=invalid-name
if auth is None:
self.do_HEAD()
self.serve_file()
return
foo_bar = base64.b64encode('foo:bar')
if self.headers.getheader('Authorization') is None:
self.do_AUTHHEAD()
self.wfile.write('Login required.')
elif self.headers.getheader('Authorization') == 'Basic %s' % foo_bar:
self.do_HEAD()
try:
self.wfile.write(self.headers.getheader('Authorization'))
self.serve_file()
except IOError:
self.wfile.write('Authorized.')
else:
self.do_AUTHHEAD()
self.wfile.write(self.headers.getheader('Authorization'))
self.wfile.write('not authenticated')
def serve_file(self):
with open(str(os.getcwd()) + self.path) as file_to_serve:
self.wfile.write(file_to_serve.read())
if __name__ == '__main__':
try:
opts, args = getopt.getopt(sys.argv[1:], 'p:a:', ['port=', 'auth='])
except getopt.GetoptError:
print 'Error parsing args'
sys.exit(1)
port = 12345
for o, a in opts:
if o in ('-p', '--port'):
port = int(a)
if o in ('-a', '--auth'):
auth = a
httpd = SocketServer.TCPServer(('', port), Handler)
try:
print 'Serving forever on %d.' % port
httpd.serve_forever()
except: # pylint: disable=bare-except
print 'Goodbye.'