From 9bf4f790abf3d795448839fa4a88d9f99d8f9c6c Mon Sep 17 00:00:00 2001 From: str4d Date: Thu, 28 May 2015 21:48:16 +0000 Subject: [PATCH] Shortlinks for blog posts --- i2p2www/blog/README | 5 +++++ i2p2www/blog/shortlinks.py | 12 ++++++++++++ i2p2www/blog/views.py | 16 +++++++++++++++- i2p2www/pages/global/macros | 1 + i2p2www/urls.py | 1 + 5 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 i2p2www/blog/shortlinks.py diff --git a/i2p2www/blog/README b/i2p2www/blog/README index 3659bea7..cbe2c797 100644 --- a/i2p2www/blog/README +++ b/i2p2www/blog/README @@ -43,6 +43,11 @@ with this suffix will be visible at their post URL, but will not be shown in the blog index. To publish the draft post, change the filename to remove the '.draft' suffix. +Creating shortlinks +------------------- + +See the comments in shortlinks.py. + How to make a release notice ---------------------------- diff --git a/i2p2www/blog/shortlinks.py b/i2p2www/blog/shortlinks.py new file mode 100644 index 00000000..1ccab512 --- /dev/null +++ b/i2p2www/blog/shortlinks.py @@ -0,0 +1,12 @@ +############ +# Shortlinks +# +# To create the URL https://geti2p.net/b/ +# linking to https://geti2p.net/en/blog/post/, +# add a new line below containing +# +# '': '', + +BLOG_SHORTLINKS = { + 'toronto': '2015/05/25/Toronto-Meetup', +} diff --git a/i2p2www/blog/views.py b/i2p2www/blog/views.py index a162e76d..ba7b735a 100644 --- a/i2p2www/blog/views.py +++ b/i2p2www/blog/views.py @@ -1,8 +1,9 @@ -from flask import abort, render_template, request +from flask import abort, g, redirect, render_template, request, url_for from werkzeug.contrib.atom import AtomFeed from i2p2www import BLOG_DIR, BLOG_POSTS_PER_FEED, BLOG_POSTS_PER_PAGE, cache from i2p2www.blog.helpers import get_blog_posts, get_blog_feed_items, get_date_from_slug, get_metadata_from_meta, render_blog_post +from i2p2www.blog.shortlinks import BLOG_SHORTLINKS from i2p2www.helpers import Pagination, get_for_page @@ -38,6 +39,19 @@ def blog_post(slug): else: abort(404) +@cache.memoize(600) +def blog_post_shortlink(shortlink): + lang = 'en' + if hasattr(g, 'lang') and g.lang: + lang = g.lang + + try: + slug = BLOG_SHORTLINKS[shortlink] + except KeyError: + abort(404) + + return redirect(url_for('blog_post', lang=lang, slug=slug)) + def blog_rss(): # TODO: implement pass diff --git a/i2p2www/pages/global/macros b/i2p2www/pages/global/macros index d832ab47..3615014b 100644 --- a/i2p2www/pages/global/macros +++ b/i2p2www/pages/global/macros @@ -5,6 +5,7 @@ {%- else -%}{{ url_for('blog_index', lang=lang) }} {%- endif -%} {%- elif request.endpoint == 'blog_post' -%}{{ url_for('blog_post', lang=lang, slug=slug) }} +{%- elif request.endpoint == 'blog_post_shortlink' -%}{{ url_for('blog_post_shortlink', lang=lang, shortlink=shortlink) }} {%- elif request.endpoint == 'meetings_show' -%}{{ url_for('meetings_show', lang=lang, id=id) }} {%- elif request.endpoint == 'downloads_debian' -%}{{ url_for('downloads_debian', lang=lang) }} {%- elif request.endpoint == 'downloads_select' -%}{{ url_for('downloads_select', lang=lang, version=version, file=file) }} diff --git a/i2p2www/urls.py b/i2p2www/urls.py index 9e226447..a46a2f6c 100644 --- a/i2p2www/urls.py +++ b/i2p2www/urls.py @@ -59,6 +59,7 @@ url('//blog/post/', 'blog.views.blog_post') url('//feed/blog/rss', 'blog.views.blog_rss') url('//feed/blog/atom', 'blog.views.blog_atom') url('//feed/blog/category//atom', 'blog.views.blog_atom') +url('/b/', 'blog.views.blog_post_shortlink') url('//meetings/', 'meetings.views.meetings_index', defaults={'page': 1}) url('//meetings/page/', 'meetings.views.meetings_index')