from mod_python import apache
from mx.DateTime import DateTime, DateFrom, utc, DateTimeDelta

try:
    import threading
    _lock = threading.Lock()
except (ImportError, AttributeError):
    class DummyLock:
        def acquire(self):
            pass
        def release(self):
            pass
    _lock = DummyLock()

from popen2 import popen2

class Service:
    def send(self, from_msg, subject, content):

        if len(content) > 1000:
            return 'sorry - your message was over 1,000 chars long!'
        if not from_msg:
            return 'please specify a from address!'
        if not subject:
            return 'please specify a subject!'
        if not content:
            return 'please actually put in a message!'

        #ip = self.req.get_remote_host()
        ip = self.req.connection.remote_ip

        _lock.acquire()
        try:
            f = open("/var/cache/mailsender/%s" % ip, "r")
        except:
            f = None

        newdate = utc()

        if f:
            date = DateFrom(f.read())
            f.close()
            if int(newdate - date) < 60:
                return """\
Sorry: a message from your IP address, %s,
was already tried at %s.
Only one message per 60 seconds can be attempted.
""" % (ip, date)

        msg = str(newdate)
        f = open("/var/cache/mailsender/%s" % ip, "w")
        f.write(str(newdate))
        f.close()

        _lock.release()

        msg = """
Message claiming to be from: %s
The Subject: %s

%s
""" % (from_msg, subject, content)

        try:
            r,w = popen2(["/usr/bin/mailx", "-s", 'Web site: %s'% subject,
                         'lkcl@lkcl.net'])
            w.write(msg)
            w.close()
            #reply = r.read()
            r.close()

            #reply.strip()
            return "Ok - your message succeeded.  hooray, this is good."
        except:
            pass

        return "sorry - there was an error.  can't tell you what it was :)"

