From 3a952e32223a36a06b4a7dadd5070ed408fa096d Mon Sep 17 00:00:00 2001 From: str4d Date: Wed, 3 Jul 2013 11:54:53 +0000 Subject: [PATCH] /download changes: - Display mirror domain instead of an arbitrary index (which could change) - Fix showing 404 page for non-existent mirror redirection links - Move default mirror definition into downloads.py for easy changing --- i2p2www/downloads.py | 33 +++++++++++++++++------------ i2p2www/pages/downloads/list.html | 20 ++++++++--------- i2p2www/pages/downloads/mirrors | 14 ++++++------ i2p2www/pages/downloads/select.html | 4 ++-- i2p2www/pages/global/macros | 1 + i2p2www/urls.py | 4 ++-- 6 files changed, 41 insertions(+), 35 deletions(-) diff --git a/i2p2www/downloads.py b/i2p2www/downloads.py index 36590700..4313aaa0 100644 --- a/i2p2www/downloads.py +++ b/i2p2www/downloads.py @@ -1,4 +1,4 @@ -from flask import redirect, render_template +from flask import abort, redirect, render_template try: import json except ImportError: @@ -7,6 +7,12 @@ from random import randint from i2p2www import CURRENT_I2P_VERSION, MIRRORS_FILE +DEFAULT_MIRROR = { + 'protocol': 'https', + 'domain': 'i2p.googlecode.com', + 'org': 'Google Code', +} + ################### # Download handlers @@ -23,39 +29,36 @@ def read_mirrors(): obj=json.loads(line) except ValueError: continue - if 'protocol' not in obj: + if 'protocol' not in obj or 'domain' not in obj or 'path' not in obj: continue protocol=obj['protocol'] + domain=obj['domain'] + path=obj['path'] + obj['url']='%s://%s%s' % (protocol, domain, path) if protocol not in ret: - ret[protocol]=[] - ret[protocol].append(obj) + ret[protocol]={} + ret[protocol][domain]=obj return ret # List of downloads def downloads_list(): # TODO: read mirror list or list of available files - return render_template('downloads/list.html') + return render_template('downloads/list.html', def_mirror=DEFAULT_MIRROR) # Specific file downloader def downloads_select(version, file): if (file == 'debian'): return render_template('downloads/debian.html', file=file) mirrors=read_mirrors() - data = { - 'version': version, - 'file': file, - } obj=[] for protocol in mirrors.keys(): a={} a['name']=protocol a['mirrors']=mirrors[protocol] - for mirror in a['mirrors']: - mirror['url']=mirror['url'] % data obj.append(a) return render_template('downloads/select.html', mirrors=obj, version=version, file=file) -def downloads_redirect(version, protocol, file, mirror): +def downloads_redirect(version, protocol, domain, file): mirrors=read_mirrors() if not protocol in mirrors: abort(404) @@ -64,6 +67,8 @@ def downloads_redirect(version, protocol, file, mirror): 'version': version, 'file': file, } - if mirror: - return redirect(mirrors[mirror-1]['url'] % data) + if domain: + if not domain in mirrors: + abort(404) + return redirect(mirrors[domain]['url'] % data) return redirect(mirrors[randint(0, len(mirrors) - 1)]['url'] % data) diff --git a/i2p2www/pages/downloads/list.html b/i2p2www/pages/downloads/list.html index dedc4248..6f7e5510 100644 --- a/i2p2www/pages/downloads/list.html +++ b/i2p2www/pages/downloads/list.html @@ -23,12 +23,12 @@ or type java -version at your command prompt.

Windows

- i2pinstall_{{ ver() }}_windows.exe (Google Code) + i2pinstall_{{ ver() }}_windows.exe ({{ def_mirror.org }}) ({{ _('select alternate link') }})
(SHA256 bf7d11f0a36acff9cd51ad3ef89d66975b0b0de344ca72719a5576159ec965d1 - sig) + sig)
@@ -41,12 +41,12 @@ or type java -version at your command prompt.

Mac OS X

- i2pinstall_{{ ver() }}.jar (Google Code) + i2pinstall_{{ ver() }}.jar ({{ def_mirror.org }}) ({{ _('select alternate link') }})
(SHA256 2dd5b67920723dd94202a408de31671b1e9543fcd5611bbe79385cc14f93b371 - sig) + sig)
@@ -69,12 +69,12 @@ or type java -version at your command prompt.

GNU/Linux / BSD / Solaris

- i2pinstall_{{ ver() }}.jar (Google Code) + i2pinstall_{{ ver() }}.jar ({{ def_mirror.org }}) ({{ _('select alternate link') }})
(SHA256 2dd5b67920723dd94202a408de31671b1e9543fcd5611bbe79385cc14f93b371 - sig) + sig)
@@ -131,12 +131,12 @@ or type java -version at your command prompt.

{{ _('Source package') }}

- i2psource_{{ ver() }}.tar.bz2 (Google Code) + i2psource_{{ ver() }}.tar.bz2 ({{ def_mirror.org }}) ({{ _('select alternate link') }})
(SHA256 fd2aa881d68b3164c43de9d91dcb04a93a36228d416582ada14ae40031436d18 - sig) + sig)
@@ -261,12 +261,12 @@ receive the release.

{{ _('Manual updates') }}

- i2pupdate_{{ ver() }}.zip (Google Code) + i2pupdate_{{ ver() }}.zip ({{ def_mirror.org }}) ({{ _('select alternate link') }})
(SHA256 f322de7a9e3e89411d072d983a6577494981da488bb08f839c521ed340d77b92 - sig) + sig)
diff --git a/i2p2www/pages/downloads/mirrors b/i2p2www/pages/downloads/mirrors index 4d01688b..84ca04ef 100644 --- a/i2p2www/pages/downloads/mirrors +++ b/i2p2www/pages/downloads/mirrors @@ -1,7 +1,7 @@ -{"url": "http://i2p.googlecode.com/files/%(file)s", "org": "Google Code", "org_url": "http://code.google.com", "protocol": "http", "country": "us"} -{"url": "https://i2p.googlecode.com/files/%(file)s", "org": "Google Code", "org_url": "https://code.google.com", "protocol": "https", "country": "us"} -{"url": "https://launchpad.net/i2p/trunk/%(version)s/+download/%(file)s", "org": "Launchpad", "org_url": "https://launchpad.net", "protocol": "https", "country": "us"} -{"url": "http://golden.mtveurope.org/~yang/i2p_mirror/%(file)s", "org": "VServer.si", "org_url": "http://www.vserver.si", "protocol": "http", "country": "lu"} -{"url": "http://a.mirror.geti2p.net/releases/current/%(file)s", "org": "welterde", "protocol": "http", "country": "de"} -{"url": "http://download.i2p2.no/releases/current/%(file)s", "org": "meeh", "protocol": "http", "country": "no"} -{"url": "https://googledrive.com/host/0B4jHEq5G7_EPWV9UeERwdGplZXc/%(version)s/%(file)s", "org": "Google Drive", "protocol": "https", "country": "us"} +{"protocol": "http", "domain": "i2p.googlecode.com", "path": "/files/%(file)s", "org": "Google Code", "org_url": "http://code.google.com", "country": "us"} +{"protocol": "https", "domain": "i2p.googlecode.com", "path": "/files/%(file)s", "org": "Google Code", "org_url": "https://code.google.com", "country": "us"} +{"protocol": "https", "domain": "launchpad.net", "path": "/i2p/trunk/%(version)s/+download/%(file)s", "org": "Launchpad", "org_url": "https://launchpad.net", "country": "us"} +{"protocol": "http", "domain": "golden.mtveurope.org", "path": "/~yang/i2p_mirror/%(file)s", "org": "VServer.si", "org_url": "http://www.vserver.si", "country": "lu"} +{"protocol": "http", "domain": "a.mirror.geti2p.net", "path": "/releases/current/%(file)s", "org": "welterde", "country": "de"} +{"protocol": "http", "domain": "download.i2p2.no", "path": "/releases/current/%(file)s", "org": "meeh", "country": "no"} +{"protocol": "https", "domain": "googledrive.com", "path": "/host/0B4jHEq5G7_EPWV9UeERwdGplZXc/%(version)s/%(file)s", "org": "Google Drive", "country": "us"} diff --git a/i2p2www/pages/downloads/select.html b/i2p2www/pages/downloads/select.html index eba0517e..9027b12c 100644 --- a/i2p2www/pages/downloads/select.html +++ b/i2p2www/pages/downloads/select.html @@ -8,8 +8,8 @@

{{ protocol.name | upper }}

diff --git a/i2p2www/pages/global/macros b/i2p2www/pages/global/macros index 42f5555b..0f468f7d 100644 --- a/i2p2www/pages/global/macros +++ b/i2p2www/pages/global/macros @@ -7,6 +7,7 @@ {%- elif request.endpoint == 'blog_post' -%}{{ url_for('blog_post', lang=lang, slug=slug) }} {%- elif request.endpoint == 'meetings_show' -%}{{ url_for('meetings_show', lang=lang, id=id) }} {%- elif request.endpoint == 'downloads_select' -%}{{ url_for('downloads_select', lang=lang, version=version, file=file) }} +{%- elif request.endpoint == 'downloads_redirect' -%}{{ url_for('site_show', lang=lang) }} {%- elif request.endpoint -%}{{ url_for(request.endpoint, lang=lang) }} {%- else -%}{{ url_for('site_show', lang=lang) }} {%- endif -%} diff --git a/i2p2www/urls.py b/i2p2www/urls.py index 15c1fe44..d77425da 100644 --- a/i2p2www/urls.py +++ b/i2p2www/urls.py @@ -56,8 +56,8 @@ url('//feed/meetings/atom', 'meetings.views.meetings_atom') url('//download', 'downloads.downloads_list') url('//download//', 'downloads.downloads_select') -url('/download///any/', 'downloads.downloads_redirect', defaults={'mirror': None}) -url('/download////', 'downloads.downloads_redirect') +url('/download///any/', 'downloads.downloads_redirect', defaults={'domain': None}) +url('/download////', 'downloads.downloads_redirect') url('/meeting', 'legacy.legacy_meeting') url('/meeting.html', 'legacy.legacy_meeting')