]> jfr.im git - irc/quakenet/qwebirc.git/blame - qwebirc/feedbackengine.py
Use utf-8 for emails.
[irc/quakenet/qwebirc.git] / qwebirc / feedbackengine.py
CommitLineData
391f51ff
CP
1from twisted.web import resource, server, static
2from twisted.mail.smtp import SMTPSenderFactory, ESMTPSenderFactory
3from twisted.internet import defer, reactor
4from StringIO import StringIO
6d66b5de 5from email.mime.text import MIMEText
391f51ff
CP
6import config
7
8class FeedbackException(Exception):
9 pass
10
11class FeedbackEngine(resource.Resource):
12 isLeaf = True
13
14 def __init__(self, prefix):
15 self.prefix = prefix
16
17 def render_POST(self, request):
18 text = request.args.get("feedback")
19 if text is None:
6d66b5de 20 raise FeedbackException("No text.")
391f51ff 21 if len(text) > 50000:
6d66b5de 22 raise FeedbackException("Too much text.")
391f51ff
CP
23
24 text = text[0]
25
26 # basic checksum to stop really lame kiddies spamming, see feedback.js for js version
27 checksum = 0;
6d66b5de 28 text = text.decode("utf-8", "ignore")
391f51ff 29 for x in text:
6d66b5de 30 checksum = ((checksum + 1) % 256) ^ (ord(x) % 256);
391f51ff 31
6d66b5de
CP
32 sentchecksum = int(request.args.get("c", [0])[0])
33 if checksum != sentchecksum:
34 raise FeedbackException("Bad checksum: %d vs. %d" % (sentchecksum, checksum))
35
36 msg = MIMEText(text.encode("utf-8"), _charset="utf-8")
37 msg["Subject"] = "qwebirc feedback from %s" % (request.client[1])
38 msg["From"] = config.FEEDBACK_FROM
39 msg["To"] = config.FEEDBACK_TO
40 email = StringIO(msg.as_string())
391f51ff
CP
41 email.seek(0, 0)
42
43 factorytype = SMTPSenderFactory
44 factory = factorytype(fromEmail=config.FEEDBACK_FROM, toEmail=config.FEEDBACK_TO, file=email, deferred=defer.Deferred())
45 reactor.connectTCP(config.FEEDBACK_SMTP_HOST, config.FEEDBACK_SMTP_PORT, factory)
46 return "1"