Mercurial > ift6266
diff data_generation/transformations/pycaptcha/modpython_example.py @ 167:1f5937e9e530
More moves - transformations into data_generation, added "deep" folder
author | Dumitru Erhan <dumitru.erhan@gmail.com> |
---|---|
date | Fri, 26 Feb 2010 14:15:38 -0500 |
parents | pycaptcha/modpython_example.py@4775b4195b4b |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/data_generation/transformations/pycaptcha/modpython_example.py Fri Feb 26 14:15:38 2010 -0500 @@ -0,0 +1,113 @@ +# +# An example that presents CAPTCHA tests in a web environment +# and gives the user a chance to solve them. +# +# This example is for use with Apache using mod_python and its +# Publisher handler. For example, if your apache configuration +# included something like: +# +# AddHandler python-program .py +# PythonHandler mod_python.publisher +# +# You could place this script anywhere in your web space to see +# the demo. +# +# --Micah <micah@navi.cx> +# + +from Captcha.Visual import Tests +import Captcha +from mod_python import apache + + +def _getFactory(req): + return Captcha.PersistentFactory("/tmp/pycaptcha_%s" % req.interpreter) + + +def test(req, name=Tests.__all__[0]): + """Show a newly generated CAPTCHA of the given class. + Default is the first class name given in Tests.__all__ + """ + test = _getFactory(req).new(getattr(Tests, name)) + + # Make a list of tests other than the one we're using + others = [] + for t in Tests.__all__: + if t != name: + others.append('<li><a href="?name=%s">%s</a></li>' % (t,t)) + others = "\n".join(others) + + return """<html> +<head> +<title>PyCAPTCHA Example</title> +</head> +<body> +<h1>PyCAPTCHA Example (for mod_python)</h1> +<p> + <b>%s</b>: + %s +</p> + +<p><img src="image?id=%s"/></p> +<p> + <form action="solution" method="get"> + Enter the word shown: + <input type="text" name="word"/> + <input type="hidden" name="id" value="%s"/> + </form> +</p> + +<p> +Or try... +<ul> +%s +</ul> +</p> + +</body> +</html> +""" % (test.__class__.__name__, test.__doc__, test.id, test.id, others) + + +def image(req, id): + """Generate an image for the CAPTCHA with the given ID string""" + test = _getFactory(req).get(id) + if not test: + raise apache.SERVER_RETURN, apache.HTTP_NOT_FOUND + req.content_type = "image/jpeg" + test.render().save(req, "JPEG") + return apache.OK + + +def solution(req, id, word): + """Grade a CAPTCHA given a solution word""" + test = _getFactory(req).get(id) + if not test: + raise apache.SERVER_RETURN, apache.HTTP_NOT_FOUND + + if not test.valid: + # Invalid tests will always return False, to prevent + # random trial-and-error attacks. This could be confusing to a user... + result = "Test invalidated, try another test" + elif test.testSolutions([word]): + result = "Correct" + else: + result = "Incorrect" + + return """<html> +<head> +<title>PyCAPTCHA Example</title> +</head> +<body> +<h1>PyCAPTCHA Example</h1> +<h2>%s</h2> +<p><img src="image?id=%s"/></p> +<p><b>%s</b></p> +<p>You guessed: %s</p> +<p>Possible solutions: %s</p> +<p><a href="test">Try again</a></p> +</body> +</html> +""" % (test.__class__.__name__, test.id, result, word, ", ".join(test.solutions)) + +### The End ###