#!/usr/bin/python

import sys, os, getopt

def destructurl(url):
    if "://" in url:
        p = url.index("://")
        scheme, url = url[:p], url[p + 3]
        if "/" in url:
            p = url.index("/")
            host, url = url[:p], url[p + 1:]
        else:
            host, url = url, ""
    else:
        scheme = None
        host = None
    return scheme, host, url

def usage(out):
    out.write("usage: htredir [-hp] TARGET METHOD URL REST\n")

status = "302 Found"
opts, args = getopt.getopt(sys.argv[1:], "hp")
for o, a in opts:
    if o == "-h":
        usage(sys.stdout)
        sys.exit(0)
    elif o == "-p":
        status = "301 Moved Permanently"
if len(args) != 4:
    usage(sys.stderr)
    sys.exit(1)
target, method, url, rest = args
scheme = os.getenv("REQ_X_ASH_PROTOCOL")
host = os.getenv("REQ_HOST")
me = url
if me[-len(rest):] == rest:
    me = me[:-len(rest)]
tscheme, thost, target = destructurl(target)
if tscheme: scheme = tscheme
if thost: host = thost
if len(target) > 0 and target[0] == "/":
    pass
else:
    if "/" in me:
        p = me.rindex("/")
        target = me[:p + 1] + target
if len(target) > 0 and target[0] == "/":
    target = target[1:]
if scheme and host:
    target = "%s://%s/%s" % (scheme, host, target)
else:
    # Illegal, but the only option (the premises are illegal anyway)
    pass

try:
    sys.stdout.write("HTTP/1.1 %s\n" % status)
    sys.stdout.write("Location: %s\n" % target)
    sys.stdout.write("Content-Length: 0\n")
    sys.stdout.write("\n")
except IOError:
    sys.exit(1)
