#!/usr/local/bin/python
# cgi-frontend for the vjbox
# distributed under ALAS.
# vjbox (c) 1997 dg6vj
# vjcgi (c) 1997 dg4iad

import vjbox
import cgi
import string
import time

version="0.1"
form=cgi.FieldStorage()
print " Content-type: text/html"
print
print "<HTML>"
print "<HEAD>"
#cgi.test()
if form.has_key("call"):
  box=vjbox.vj("localhost",4711,form["call"].value)
  print "<TITLE> vjbox %s by 1409 </TITLE>" % box.boxname
  print "<BODY>"
  print "<H1> VJBOX %s  - %s </H1>" % (box.boxname,box.servername)
  if not form.has_key("cmd"):
    print "<H3> Welcome to vjbox... possible commands are: </H3>"
    print "<UL>"
    print """<LI> <A HREF="vjcgi.py?call=%s&cmd=version"> version </A>""" % form["call"].value
    print "</UL>"
  elif form["cmd"].value=="version":
    print "<h4>Information about Server:</h4>"
    print "<p>",
    for line in box.version():
      print line,"<br>"
    print "</p>" 
  elif form["cmd"].value=="dir":
    print "<h4>Available bulletin boards</h4>"
    data=box.boardlist()
    for line in data:
      [board,typ,anzahl]=string.split(line)[:3]
      if typ!="u":
        print """<A HREF="vjcgi.py?call=%s&cmd=list&board=%s&start=1&count=%d"> %-8s </A> %5s <BR>""" % (form["call"].value,board,10,board,anzahl)
  elif form["cmd"].value=="list":
    start=string.atoi(form["start"].value)
    count=string.atoi(form["count"].value)
    data=box.list(form["board"].value,start,start+count)
    for nr in range(0,len(data) / 3):
       bid=data[(nr*3)]
       [board,mbx,sender,date,size,lt,idxnr]=string.split(data[(nr*3)+1])[:7]
       numr=(nr / 3)+1
       a=string.atoi
       g=string.upper 
       dt=time.strftime("%d.%m.%y %H:%M",time.gmtime(a(date)))

       print """<PRE>%4d %-6s %s %6d  %-50s </PRE><A HREF="vjcgi.py?cmd=read&start=%s&count=1&call=%s&board=%s"> read </A><BR>""" % (a(idxnr),
                   g(sender),dt,a(size),data[(nr*3)+2],nr+1,form["call"].value,form["board"].value)  
  elif form["cmd"].value=="read":
    print "<PRE>"
    data=box.read(form["board"].value,form["start"].value)
    for line in data: print line
    print "</PRE>"
  elif form["cmd"].value=="send":
    print """<FORM METHOD=get> <p> Target: <INPUT name="target" size=8> @ <INPUT name="at" size=30></p>
       Title: <INPUT name="title" size=60> <p> <h5> your message: </h5> <textarea name="message" cols=60 rows=30></textarea>
       <INPUT TYPE=SUBMIT> <INPUT type=hidden name="call" value="%s"> <INPUT type=hidden name="cmd" value="sent"> </FORM><p>""" % form["call"].value
  elif form["cmd"].value=="sent":
    if not form.has_key("at"):
      at=string.split(box.boxname)[0]
    else : at=form["at"].value  
    if not form.has_key("title"):
      title="<no subject>"
    else : title=form["title"].value  
    if not form.has_key("target"):
      print "<STRONG> Error, target missing. </STRONG> <p>"
    else:  
      box.putmail(form["call"].value,form["target"].value,at,title,form["message"].value)
      print "<p> Message queued for %s @ %s </p>" % (form["target"].value,at)
  print "<HR> <p>"
  print """<A HREF="vjcgi.py?cmd=version&call=%s"> version </A>""" % form["call"].value
  print """<A HREF="vjcgi.py?cmd=dir&call=%s"> boards </A>""" % form["call"].value
  print """<A HREF="vjcgi.py?cmd=send&call=%s"> send </A> """ % form["call"].value
  print """<A HREF="vjcgi.py?cmd=quit&call=%s"> quit </A> </p>""" % form["call"].value
  
else:
  print "<TITLE> vjbox login </TITLE>"
  print "<BODY>"
  print """<FORM METHOD=get> <P> Your Callsign <INPUT NAME="call" size=6></p>"""
  print "<INPUT TYPE=SUBMIT>"
  print "</BODY>"

print "<HR> vjbox - the bbs without borders -<BR>"
print "</BODY>"
print "</HTML>"

    
