From 2ab919e1cf8ede1fdc71f024fdda4b7d742d273f Mon Sep 17 00:00:00 2001 From: str4d Date: Sat, 15 Sep 2012 04:54:16 +0000 Subject: [PATCH] Added the 'i2pconv' template filter to convert I2P urls to clearnet as required --- i2p2www/__init__.py | 42 ++++++++++++++++++++++++++++++++---------- 1 file changed, 32 insertions(+), 10 deletions(-) diff --git a/i2p2www/__init__.py b/i2p2www/__init__.py index f85648b8..d0655a0c 100644 --- a/i2p2www/__init__.py +++ b/i2p2www/__init__.py @@ -69,15 +69,6 @@ def detect_theme(): return resp -############################ -# Hooks - request processing - -@app.template_filter('restructuredtext') -def restructuredtext(value): - parts = publish_parts(source=value, writer_name="html") - return parts['html_body'] - - ####################### # Hooks - after request @@ -88,7 +79,38 @@ def call_after_request_callbacks(response): return response -############### +################## +# Template filters + +@app.template_filter('restructuredtext') +def restructuredtext(value): + parts = publish_parts(source=value, writer_name="html") + return parts['html_body'] + +# Convert an I2P url to an equivalent clearnet one +i2ptoclear = { + 'www.i2p2.i2p': 'www.i2p2.de', + 'forum.i2p': 'forum.i2p2.de', + 'trac.i2p2.i2p': 'trac.i2p2.de', + } +@app.template_filter('i2pconv') +def convert_url_to_clearnet(value): + if not value.endswith('.i2p'): + # The url being passed in isn't an I2P url, so just return it + return value + if request.headers.get('X-I2P-Desthash') and not request.headers.get('X-Forwarded-Server'): + # The request is from within I2P, so use I2P url + return value + # The request is either directly from clearnet or through an inproxy + try: + # Return the known clearnet url corresponding to the I2P url + return i2ptoclear[value] + except KeyError: + # The I2P site has no known clearnet address, so use an inproxy + return value + '.to' + + +################ # Error handlers @app.errorhandler(404)