]>
jfr.im git - irc/quakenet/qwebirc.git/blob - qwebirc/engines/feedbackengine.py
1 from twisted
.web
import resource
, server
, static
2 from twisted
.mail
.smtp
import SMTPSenderFactory
, ESMTPSenderFactory
3 from twisted
.internet
import defer
, reactor
4 from StringIO
import StringIO
5 from email
.mime
.text
import MIMEText
6 import qwebirc
.util
as util
9 class FeedbackException(Exception):
12 class FeedbackEngine(resource
.Resource
):
15 def __init__(self
, prefix
):
17 self
.__hit
= util
.HitCounter()
20 def adminEngine(self
):
21 return dict(Sent
=[(self
.__hit
,)])
23 def render_POST(self
, request
):
24 text
= request
.args
.get("feedback")
26 raise FeedbackException("No text.")
28 raise FeedbackException("Too much text.")
32 # basic checksum to stop really lame kiddies spamming, see feedback.js for js version
34 text
= text
.decode("utf-8", "ignore")
36 checksum
= ((checksum
+ 1) % 256) ^
(ord(x
) % 256);
38 sentchecksum
= int(request
.args
.get("c", [0])[0])
39 if checksum
!= sentchecksum
:
40 raise FeedbackException("Bad checksum: %d vs. %d" % (sentchecksum
, checksum
))
42 msg
= MIMEText(text
.encode("utf-8"), _charset
="utf-8")
43 msg
["Subject"] = "qwebirc feedback from %s" % (request
.client
[1])
44 msg
["From"] = config
.FEEDBACK_FROM
45 msg
["To"] = config
.FEEDBACK_TO
46 email
= StringIO(msg
.as_string())
49 factorytype
= SMTPSenderFactory
50 factory
= factorytype(fromEmail
=config
.FEEDBACK_FROM
, toEmail
=config
.FEEDBACK_TO
, file=email
, deferred
=defer
.Deferred())
51 reactor
.connectTCP(config
.FEEDBACK_SMTP_HOST
, config
.FEEDBACK_SMTP_PORT
, factory
)