Changeset 16:bb9f1fb34a32

Show
Ignore:
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:
2 modified

Legend:

Unmodified
Added
Removed
  • trac_captcha/controller.py

    r9 r16  
    2424 
    2525from genshi import HTML 
     26from genshi.builder import tag 
    2627from trac.config import ExtensionOption, Option 
    2728from trac.core import Component, implements 
     
    6465        return False 
    6566     
    66     def genshi_stream(self, req): 
    67         return HTML(self.captcha.genshi_stream(req)) 
    68      
    6967    def check_captcha_solution(self, req): 
    7068        if self.should_skip_captcha(req): 
     
    7775        self.add_token_for_request(req) 
    7876        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) 
    7994     
    8095    # --- private API ---------------------------------------------------------- 
  • trac_captcha/ticket.py

    r10 r16  
    2323# THE SOFTWARE. 
    2424 
    25 from genshi.builder import tag 
    2625from genshi.filters.transform import Transformer 
    2726from trac.core import Component, implements 
     
    2928from trac.web.api import ITemplateStreamFilter 
    3029 
    31 from trac_captcha.controller import initialize_captcha_data, TracCaptchaController 
     30from trac_captcha.controller import TracCaptchaController 
    3231 
    3332__all__ = ['TicketCaptcha'] 
     
    4140        if filename != 'ticket.html': 
    4241            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) 
    5244     
    5345    # --- ITicketManipulator --------------------------------------------------- 
     
    6153        return ((None, error_message),) 
    6254     
    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) 
    6955 
    7056