#!/usr/bin/env python

import sys
import os
import MySQLdb

db = 0

#=============================================================================
# Load the configuration and override the variables above.
#=============================================================================
try:
  execfile('/etc/mw/maxwell.conf')
except IOError:
  pass

#=============================================================================
# Set up errors to go to the log file.
#=============================================================================
def openlog(filename):
  if not os.isatty(2):
    try:
      log = open(filename,"a+")
      os.dup2(log.fileno(), sys.stderr.fileno())
      log.close()
    except:
      pass

#=============================================================================
# Log a message.
#=============================================================================
def log(msg):
  if (os.isatty(2)):
    print msg
  else:
    sys.stderr.write(msg + "\n")

#=============================================================================
# Create database connection.
#=============================================================================
def db_connect():
  try:
    db = MySQLdb.connect(host=mysql_host, user=mysql_user, passwd=mysql_password, db=mysql_db)
    return db
  except:
    log("Exception in db_connect")

#=============================================================================
# MySQL helpers
#=============================================================================
def mysql(c,cmd):
  try:
    count = c.execute(cmd)
    return c.fetchall()
  except MySQLdb.MySQLError, (num, expl):
    log("%s.  SQL was: %s" % (expl,cmd))
    return ()
  except:
    log("Some other MySQL exception.")
    return ()

def mysql_act(c,cmd):
  try:
    count = c.execute(cmd)
    return ""
  except MySQLdb.MySQLError, (num, expl):
    return expl

#=============================================================================
# Main program
#=============================================================================

openlog("/var/log/mw/filexfer-xlate.log")
log("Starting up.")

while 1:
  try:
    line = sys.stdin.readline()
    if line == "":
      break

    line = line.strip()
    i = line.find("/")
    id = line[0:i]
    uri = line[i:]

    db = db_connect()
    c = db.cursor()
    #arr = mysql(c,"""SELECT viewperm.sessnum,viewuser,hostname,dispnum
    #                 FROM viewperm join display
    #                 ON viewperm.sessnum = display.sessnum
    #                 WHERE viewperm.viewtoken='%s'""" % id)
    arr = mysql(c,"""SELECT fileperm.sessnum,fileuser,hostname,dispnum
                     FROM fileperm join display
                     ON fileperm.sessnum = display.sessnum
                     WHERE fileperm.cookie='%s'""" % id)
    db.close()

    trans = "NULL"

    if len(arr) != 1:
      log("No database entry found for ID %s." % id)
    else:
      sess = arr[0][0]
      user = arr[0][1]
      host = arr[0][2]
      disp = arr[0][3]
      port = disp + 9000
      trans = "http://" + host + ":" + str(port) + uri
      log("Translation is %s" % trans)

    sys.stdout.write(trans + "\n")
    sys.stdout.flush()

  except:
    log("Exception: " + str(sys.exc_info()[0]))
    sys.stdout.write("\n")
    sys.stdout.flush()

# If the while loop finishes for some reason...
sys.exit(0)

