Changeset 16:bb9f1fb34a32
- Timestamp:
- 06/29/10 23:38:00 (23 months ago)
- Author:
- fs
- Branch:
- default
- Message:
-
moved code for captcha injection in the controller so it can be shared
- Location:
- trac_captcha
- Files:
-
Legend:
- Unmodified
- Added
- Removed
-
|
r9
|
r16
|
|
| 24 | 24 | |
| 25 | 25 | from genshi import HTML |
| | 26 | from genshi.builder import tag |
| 26 | 27 | from trac.config import ExtensionOption, Option |
| 27 | 28 | from trac.core import Component, implements |
| … |
… |
|
| 64 | 65 | return False |
| 65 | 66 | |
| 66 | | def genshi_stream(self, req): |
| 67 | | return HTML(self.captcha.genshi_stream(req)) |
| 68 | | |
| 69 | 67 | def check_captcha_solution(self, req): |
| 70 | 68 | if self.should_skip_captcha(req): |
| … |
… |
|
| 77 | 75 | self.add_token_for_request(req) |
| 78 | 76 | return None |
| | 77 | |
| | 78 | # Captcha generation / Genshi stream manipulation |
| | 79 | def captcha_html(self, req): |
| | 80 | return HTML(self.captcha.genshi_stream(req)) |
| | 81 | |
| | 82 | def inject_captcha_into_stream(self, req, stream, transformer): |
| | 83 | initialize_captcha_data(req) |
| | 84 | if 'token' in req.captcha_data: |
| | 85 | return stream | transformer.before(self.captcha_token_tag(req)) |
| | 86 | if self.should_skip_captcha(req): |
| | 87 | return stream |
| | 88 | |
| | 89 | return stream | transformer.before(self.captcha_html(req)) |
| | 90 | |
| | 91 | def captcha_token_tag(self, req): |
| | 92 | token = req.captcha_data['token'] |
| | 93 | return tag.input(type='hidden', name='__captcha_token', value=token) |
| 79 | 94 | |
| 80 | 95 | # --- private API ---------------------------------------------------------- |
-
|
r10
|
r16
|
|
| 23 | 23 | # THE SOFTWARE. |
| 24 | 24 | |
| 25 | | from genshi.builder import tag |
| 26 | 25 | from genshi.filters.transform import Transformer |
| 27 | 26 | from trac.core import Component, implements |
| … |
… |
|
| 29 | 28 | from trac.web.api import ITemplateStreamFilter |
| 30 | 29 | |
| 31 | | from trac_captcha.controller import initialize_captcha_data, TracCaptchaController |
| | 30 | from trac_captcha.controller import TracCaptchaController |
| 32 | 31 | |
| 33 | 32 | __all__ = ['TicketCaptcha'] |
| … |
… |
|
| 41 | 40 | if filename != 'ticket.html': |
| 42 | 41 | return stream |
| 43 | | initialize_captcha_data(req) |
| 44 | | controller = TracCaptchaController(self.env) |
| 45 | | if 'token' in req.captcha_data: |
| 46 | | return stream | self.captcha_token_tag(req) |
| 47 | | if controller.should_skip_captcha(req): |
| 48 | | return stream |
| 49 | | |
| 50 | | captcha = controller.genshi_stream(req) |
| 51 | | return stream | Transformer('//div[@class="buttons"]').before(captcha) |
| | 42 | transformer = Transformer('//div[@class="buttons"]') |
| | 43 | return TracCaptchaController(self.env).inject_captcha_into_stream(req, stream, transformer) |
| 52 | 44 | |
| 53 | 45 | # --- ITicketManipulator --------------------------------------------------- |
| … |
… |
|
| 61 | 53 | return ((None, error_message),) |
| 62 | 54 | |
| 63 | | # --- private API ---------------------------------------------------------- |
| 64 | | |
| 65 | | def captcha_token_tag(self, req): |
| 66 | | token = req.captcha_data['token'] |
| 67 | | input_tag = tag.input(type='hidden', name='__captcha_token', value=token) |
| 68 | | return Transformer('//div[@class="buttons"]').before(input_tag) |
| 69 | 55 | |
| 70 | 56 | |