Mercurial > hg > CAPTCHAmiddleware
diff captchamiddleware/middleware.py @ 3:b0ef5452a740
beginning of captcha checking
author | k0s <k0scist@gmail.com> |
---|---|
date | Tue, 23 Feb 2010 20:08:22 -0500 |
parents | c861518b2a44 |
children | ce757057961c |
line wrap: on
line diff
--- a/captchamiddleware/middleware.py Tue Feb 23 19:50:23 2010 -0500 +++ b/captchamiddleware/middleware.py Tue Feb 23 20:08:22 2010 -0500 @@ -43,17 +43,29 @@ # characters skimpygimpy doesnt know about forbidden_characters = set(["'"]) - self.words = [ i.strip() for i in f.readlines() + self.words = [ i.strip().lower() for i in f.readlines() if (len(i.strip()) > self.minimum_length) and not forbidden_characters.intersection(i) ] random.shuffle(self.words) + def check_captcha(self, request): + captcha = request.POST.get('captcha', '').lower() + key = request.POST.get('key') + if not key: return False + try: + key = int(key) + except ValueError: + return False + try: + value = self.words[key] + except IndexError: + raise # TODO: better error handling + return value == captcha def __call__(self, environ, start_response): request = Request(environ) if request.method == 'POST' and not request.remote_user: - import pdb; pdb.set_trace() - pass # TODO: check CAPTCHA + return self.app(environ, start_response) return LXMLMiddleware.__call__(self, environ, start_response) @@ -70,7 +82,7 @@ key = random.Random().randint(0, len(self.words)) word = self.words[key] captcha = skimpyAPI.Pre(word).data() - string = '<div class="captcha">%s<input type="hidden" value="%s"/><input type="text" name="captcha"/></div>' % (captcha, key) + string = '<div class="captcha">%s<input type="hidden" name="key" value="%s"/><input type="text" name="captcha"/></div>' % (captcha, key) addition = etree.fromstring(string) insertion_point = element.find('.' + self.path) insertion_point.addprevious(addition)