#!/usr/local/bin/python
#$Id: NaviHTTP.py,v 1.2 1995/12/27 04:05:33 connolly Exp $

import os, posix
import string
import BaseHTTPServer
import EditServer

NaviDir = 'application/x-navidir'
NaviBrowse = 'application/x-navibrowse'

class NaviRequestHandler(EditServer.EditRequestHandler):

    server_version = "NaviServer/1.01b"

    extensions_map = {
	'': 'text/plain',	# Default, *must* be present
	'.html': 'text/html',
	'.htm': 'text/html',
	'.gif': 'image/gif',
	'.stl' : 'application/x-navistyle',
	'.nvd' : 'application/x-naviwad',
	'.nvm' : 'application/x-navimap'
	}


    def do_BROWSE(self):
	if not self.check_auth('BROWSE'): return

	path = self.translate_path(self.path, find_welcome=0)

	list = []

	if os.path.isdir(path):
	    names = posix.listdir(path)
	    names.sort()
	    for name in names:
		if os.path.isdir(os.path.join(path, name)):
		    t = NaviDir
		else:
		    t = self.guess_type(name)
		list.append((t, name))

	    self.send_navibrowse(path, list)

	else:
	    self.send_error(400, \
			    'BROWSE must be used on a directory')


    def send_navibrowse(self, path, items):
	content = ''
	for ty, name in items:
	    content = content + ty + ' ' + name + "\r\n"
	self.send_response(200)
	self.send_header('Content-Type', NaviBrowse)
	self.send_header('Content-Length', len(content))
	self.about(path)
	self.end_headers()
	self.wfile.write(content)


def main(argv):
    if argv[1:]:
	port = string.atoi(argv[1])
    else:
	port = 8000
    server_address = ('', port)

    httpd = BaseHTTPServer.HTTPServer(server_address, NaviRequestHandler)

    print "Serving HTTP on port", port, "..."

    httpd.serve_forever()

if __name__ == '__main__':
    import sys
    main(sys.argv)
