blob: 4b3529ee5bac584500f095399ce65c7f2ad25c96 [file] [log] [blame]
#!/usr/bin/env python
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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.
#
""" Buggy standalone server for testing out pySTeVe """
portno = 8080
import BaseHTTPServer
import CGIHTTPServer
from SocketServer import ThreadingMixIn
import cgitb
import base64
import os
import sys, traceback
cgitb.enable()
server = BaseHTTPServer.HTTPServer
handler = CGIHTTPServer.CGIHTTPRequestHandler
server_address = ("", portno)
handler.cgi_directories = ["/www/cgi-bin"]
handler.cgi_info = {}
path = os.path.abspath(os.getcwd())
# EDIT THIS OR SOME SUCH!!!!
karma = {
'admin': 'demo'
}
def doTraceBack():
exc_type, exc_value, exc_traceback = sys.exc_info()
traceback.print_tb(exc_traceback, limit=1, file=sys.stdout)
traceback.print_exception(exc_type, exc_value, exc_traceback,
limit=2, file=sys.stdout)
traceback.print_exc()
class pysteveHTTPHandler(handler):
cgi_directories = ["/www/cgi-bin"]
def do_AUTHHEAD(self):
print "send header"
self.send_response(401)
self.send_header('WWW-Authenticate', 'Basic realm=\"STeVe Administration\"')
self.send_header('Content-type', 'text/html')
self.end_headers()
def do_GET(self):
try:
print(self.path)
if self.path.startswith("/steve/admin"):
if self.headers.getheader('Authorization') == None:
self.do_AUTHHEAD()
self.wfile.write('no auth header received')
return
else:
authed = False
auth = self.headers.getheader('Authorization')[6:]
arr = base64.decodestring(auth).split(":", 2)
if len(arr) == 2:
name = arr[0]
password= arr[1]
if karma.get(name) and karma[name] == password:
authed = True
if not authed:
self.do_AUTHHEAD()
self.wfile.write('Wrong user or pass received')
return
path_info = self.path.replace("/steve/admin", "", 1)
os.chdir(path + "/www/cgi-bin")
self.cgi_info = ("/", "rest_admin.py" + path_info)
self.run_cgi()
return
elif self.path.startswith("/steve/voter"):
path_info = self.path.replace("/steve/voter", "", 1)
os.chdir(path + "/www/cgi-bin")
self.cgi_info = ("/", "rest_voter.py" + path_info)
self.run_cgi()
return
else:
os.chdir(path)
self.path = "/www/htdocs" + self.path
print(self.path)
handler.do_GET(self)
except Exception as err:
doTraceBack()
def do_POST(self):
self.do_GET() #Same diff, eh...
class ThreadedHTTPServer(ThreadingMixIn, server):
"""Moomins live here"""
if __name__ == '__main__':
server = ThreadedHTTPServer(('', portno), pysteveHTTPHandler)
print("Running at http://youriphere:%u/ ..." % portno)
server.serve_forever()