diff --git a/i2p2www/downloads.py b/i2p2www/downloads.py index 07698cbaa541877bc73f49343546321e8a479248..74e285b0ee15465f341d45817b59a2914dceaf78 100644 --- a/i2p2www/downloads.py +++ b/i2p2www/downloads.py @@ -8,6 +8,7 @@ from random import randint from i2p2www import CURRENT_I2P_VERSION, MIRRORS_FILE DEFAULT_MIRROR = { + 'net': 'clearnet', 'protocol': 'https', 'domain': 'download.i2p2.de', 'org': 'sigterm.no', @@ -15,6 +16,7 @@ DEFAULT_MIRROR = { } DEFAULT_I2P_MIRROR = { + 'net': 'i2p', 'protocol': 'http', 'domain': 'whnxvjwjhzsske5yevyokhskllvtisv5ueokw6yvh6t7zqrpra2q.b32.i2p', 'org': 'sigterm.no', @@ -39,13 +41,16 @@ def read_mirrors(): continue if 'protocol' not in obj or 'domain' not in obj or 'path' not in obj: continue + net=obj['net'] 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][domain]=obj + if net not in ret: + ret[net]={} + if protocol not in ret[net]: + ret[net][protocol]={} + ret[net][protocol][domain]=obj return ret # List of downloads @@ -65,29 +70,40 @@ def downloads_debian(): def downloads_select(version, file): mirrors=read_mirrors() obj=[] - for protocol in mirrors.keys(): + for net in mirrors.keys(): a={} - a['name']=protocol - a['mirrors']=mirrors[protocol] + a['key']=net + a['name']=net + a['protocols']=[] + for protocol in mirrors[net].keys(): + b={} + b['key']=protocol + b['name']=protocol + b['domains']=mirrors[net][protocol] + a['protocols'].append(b) obj.append(a) return render_template('downloads/select.html', mirrors=obj, version=version, file=file) -def downloads_redirect(version, protocol, domain, file): +def downloads_redirect(version, net, protocol, domain, file): mirrors=read_mirrors() - if not protocol in mirrors: + if not net in mirrors: abort(404) - mirrors=mirrors[protocol] + mirrors=mirrors[net] data = { 'version': version, 'file': file, } - if domain: - if not domain in mirrors: - abort(404) - return render_template('downloads/redirect.html', - version=version, protocol=protocol, domain=domain, file=file, - url=mirrors[domain]['url'] % data) - randomain = mirrors.keys()[randint(0, len(mirrors) - 1)] + + if not protocol: + protocol = mirrors.leys()[randint(0, len(mirrors) - 1)] + if not protocol in mirrors: + abort(404) + mirrors=mirrors[protocol] + + if not domain: + domain = mirrors.keys()[randint(0, len(mirrors) - 1)] + if not domain in mirrors: + abort(404) return render_template('downloads/redirect.html', version=version, protocol=protocol, domain=domain, file=file, - url=mirrors[randomain]['url'] % data) + url=mirrors[domain]['url'] % data) diff --git a/i2p2www/pages/downloads/list.html b/i2p2www/pages/downloads/list.html index 2bc7c17b43f504f2e5c876c1b018f1eed7b72d0e..4cc86e99f48c6ceaee0746e3f003dd4ff3aa3afc 100644 --- a/i2p2www/pages/downloads/list.html +++ b/i2p2www/pages/downloads/list.html @@ -49,12 +49,12 @@ or type <tt>java -version</tt> at your command prompt. </div> <div class="details"> <div class="file"> - <a class="default" href="{{ url_for('downloads_redirect', version=ver(), protocol=def_mirror.protocol, domain=def_mirror.domain, file=ver('i2pinstall_%s_windows.exe')) }}"> + <a class="default" href="{{ url_for('downloads_redirect', version=ver(), net=def_mirror.net, protocol=def_mirror.protocol, domain=def_mirror.domain, file=ver('i2pinstall_%s_windows.exe')) }}"> <span class="name">i2pinstall_{{ ver() }}_windows.exe</span><br /> <span class="mirror">{{ _('Mirror:') }} <img src="{{ url_for('static', filename='images/flags/'+def_mirror.country+'.png') }}" /> {{ def_mirror.org }}</span> </a> <a class="mirrors" href="{{ get_url('downloads_select', version=ver(), file=ver('i2pinstall_%s_windows.exe')) }}">{{ _('select alternate mirror') }}</a><!-- - --><a class="sig" href="{{ url_for('downloads_redirect', version=ver(), protocol=def_mirror.protocol, domain=def_mirror.domain, file=ver('i2pinstall_%s_windows.exe.sig')) }}">sig</a> + --><a class="sig" href="{{ url_for('downloads_redirect', version=ver(), net=def_mirror.net, protocol=def_mirror.protocol, domain=def_mirror.domain, file=ver('i2pinstall_%s_windows.exe.sig')) }}">sig</a> </div> <div class="hash"> <code>{{ i2pinstall_windows_hash }}</code> @@ -71,12 +71,12 @@ or type <tt>java -version</tt> at your command prompt. </div> <div class="details"> <div class="file"> - <a class="default" href="{{ url_for('downloads_redirect', version=ver(), protocol=def_mirror.protocol, domain=def_mirror.domain, file=ver('i2pinstall_%s.jar')) }}"> + <a class="default" href="{{ url_for('downloads_redirect', version=ver(), net=def_mirror.net, protocol=def_mirror.protocol, domain=def_mirror.domain, file=ver('i2pinstall_%s.jar')) }}"> <span class="name">i2pinstall_{{ ver() }}.jar</span><br /> <span class="mirror">{{ _('Mirror:') }} <img src="{{ url_for('static', filename='images/flags/'+def_mirror.country+'.png') }}" /> {{ def_mirror.org }}</span> </a> <a class="mirrors" href="{{ get_url('downloads_select', version=ver(), file=ver('i2pinstall_%s.jar')) }}">{{ _('select alternate mirror') }}</a><!-- - --><a class="sig" href="{{ url_for('downloads_redirect', version=ver(), protocol=def_mirror.protocol, domain=def_mirror.domain, file=ver('i2pinstall_%s.jar.sig')) }}">sig</a> + --><a class="sig" href="{{ url_for('downloads_redirect', version=ver(), net=def_mirror.net, protocol=def_mirror.protocol, domain=def_mirror.domain, file=ver('i2pinstall_%s.jar.sig')) }}">sig</a> </div> <div class="hash"> <code>{{ i2pinstall_jar_hash }}</code> @@ -103,12 +103,12 @@ or type <tt>java -version</tt> at your command prompt. </div> <div class="details"> <div class="file"> - <a class="default" href="{{ url_for('downloads_redirect', version=ver(), protocol=def_mirror.protocol, domain=def_mirror.domain, file=ver('i2pinstall_%s.jar')) }}"> + <a class="default" href="{{ url_for('downloads_redirect', version=ver(), net=def_mirror.net, protocol=def_mirror.protocol, domain=def_mirror.domain, file=ver('i2pinstall_%s.jar')) }}"> <span class="name">i2pinstall_{{ ver() }}.jar</span><br /> <span class="mirror">{{ _('Mirror:') }} <img src="{{ url_for('static', filename='images/flags/'+def_mirror.country+'.png') }}" /> {{ def_mirror.org }}</span> </a> <a class="mirrors" href="{{ get_url('downloads_select', version=ver(), file=ver('i2pinstall_%s.jar')) }}">{{ _('select alternate mirror') }}</a><!-- - --><a class="sig" href="{{ url_for('downloads_redirect', version=ver(), protocol=def_mirror.protocol, domain=def_mirror.domain, file=ver('i2pinstall_%s.jar.sig')) }}">sig</a> + --><a class="sig" href="{{ url_for('downloads_redirect', version=ver(), net=def_mirror.net, protocol=def_mirror.protocol, domain=def_mirror.domain, file=ver('i2pinstall_%s.jar.sig')) }}">sig</a> </div> <div class="hash"> <code>{{ i2pinstall_jar_hash }}</code> @@ -195,12 +195,12 @@ or type <tt>java -version</tt> at your command prompt. </div> <div class="details"> <div class="file"> - <a class="default" href="{{ url_for('downloads_redirect', version=ver(), protocol=def_mirror.protocol, domain=def_mirror.domain, file=ver('i2psource_%s.tar.bz2')) }}"> + <a class="default" href="{{ url_for('downloads_redirect', version=ver(), net=def_mirror.net, protocol=def_mirror.protocol, domain=def_mirror.domain, file=ver('i2psource_%s.tar.bz2')) }}"> <span class="name">i2psource_{{ ver() }}.tar.bz2</span><br /> <span class="mirror">{{ _('Mirror:') }} <img src="{{ url_for('static', filename='images/flags/'+def_mirror.country+'.png') }}" /> {{ def_mirror.org }}</span> </a> <a class="mirrors" href="{{ get_url('downloads_select', version=ver(), file=ver('i2psource_%s.tar.bz2')) }}">{{ _('select alternate mirror') }}</a><!-- - --><a class="sig" href="{{ url_for('downloads_redirect', version=ver(), protocol=def_mirror.protocol, domain=def_mirror.domain, file=ver('i2psource_%s.tar.bz2.sig')) }}">sig</a> + --><a class="sig" href="{{ url_for('downloads_redirect', version=ver(), net=def_mirror.net, protocol=def_mirror.protocol, domain=def_mirror.domain, file=ver('i2psource_%s.tar.bz2.sig')) }}">sig</a> </div> <div class="hash"> <code>{{ i2psource_hash }}</code> @@ -300,12 +300,12 @@ receive the release. </div> <div class="details"> <div class="file"> - <a class="default" href="{{ url_for('downloads_redirect', version=ver(), protocol=def_mirror.protocol, domain=def_mirror.domain, file=ver('i2pupdate_%s.zip')) }}"> + <a class="default" href="{{ url_for('downloads_redirect', version=ver(), net=def_mirror.net, protocol=def_mirror.protocol, domain=def_mirror.domain, file=ver('i2pupdate_%s.zip')) }}"> <span class="name">i2pupdate_{{ ver() }}.zip</span><br /> <span class="mirror">{{ _('Mirror:') }} <img src="{{ url_for('static', filename='images/flags/'+def_mirror.country+'.png') }}" /> {{ def_mirror.org }}</span> </a> <a class="mirrors" href="{{ get_url('downloads_select', version=ver(), file=ver('i2pupdate_%s.zip')) }}">{{ _('select alternate mirror') }}</a><!-- - --><a class="sig" href="{{ url_for('downloads_redirect', version=ver(), protocol=def_mirror.protocol, domain=def_mirror.domain, file=ver('i2pupdate_%s.zip.sig')) }}">sig</a> + --><a class="sig" href="{{ url_for('downloads_redirect', version=ver(), net=def_mirror.net, protocol=def_mirror.protocol, domain=def_mirror.domain, file=ver('i2pupdate_%s.zip.sig')) }}">sig</a> </div> <div class="hash"> <code>{{ i2pupdate_hash }}</code> diff --git a/i2p2www/pages/downloads/mirrors b/i2p2www/pages/downloads/mirrors index 64f672941a56bae92671475b309cb3452b704da6..d34a68480eb32975087aee2338a07ee0824e9af8 100644 --- a/i2p2www/pages/downloads/mirrors +++ b/i2p2www/pages/downloads/mirrors @@ -1,9 +1,9 @@ -{"protocol": "https", "domain": "launchpad.net", "path": "/i2p/trunk/%(version)s/+download/%(file)s", "org": "Launchpad", "org_url": "https://launchpad.net", "country": "us"} -{"protocol": "https", "domain": "download.i2p2.de", "path": "/releases/%(version)s/%(file)s", "org": "sigterm.no", "country": "no"} -{"protocol": "http", "domain": "whnxvjwjhzsske5yevyokhskllvtisv5ueokw6yvh6t7zqrpra2q.b32.i2p", "path": "/releases/%(version)s/%(file)s", "org": "sigterm.no", "country": "i2p"} -{"protocol": "http", "domain": "download.i2p2.de", "path": "/releases/%(version)s/%(file)s", "org": "sigterm.no", "country": "no"} -{"protocol": "http", "domain": "download.i2p2.no", "path": "/releases/%(version)s/%(file)s", "org": "sigterm.no", "country": "no"} -{"protocol": "https", "domain": "dl.dropboxusercontent.com", "path": "/u/18621288/I2P/%(version)s/%(file)s", "org": "Dropbox", "country": "us"} -{"protocol": "https", "domain": "googledrive.com", "path": "/host/0B4jHEq5G7_EPWV9UeERwdGplZXc/%(version)s/%(file)s", "org": "Google Drive", "country": "us"} -#{"protocol": "http", "domain": "download.geti2p.com", "path": "/%(version)s/%(file)s", "org": "aargh", "country": "us"} -#{"protocol": "http", "domain": "download2.geti2p.com", "path": "/%(version)s/%(file)s", "org": "aargh", "country": "us"} +{"net": "clearnet", "protocol": "https", "domain": "launchpad.net", "path": "/i2p/trunk/%(version)s/+download/%(file)s", "org": "Launchpad", "org_url": "https://launchpad.net", "country": "us"} +{"net": "clearnet", "protocol": "https", "domain": "download.i2p2.de", "path": "/releases/%(version)s/%(file)s", "org": "sigterm.no", "country": "no"} +{"net": "i2p", "protocol": "http", "domain": "whnxvjwjhzsske5yevyokhskllvtisv5ueokw6yvh6t7zqrpra2q.b32.i2p", "path": "/releases/%(version)s/%(file)s", "org": "sigterm.no"} +{"net": "clearnet", "protocol": "http", "domain": "download.i2p2.de", "path": "/releases/%(version)s/%(file)s", "org": "sigterm.no", "country": "no"} +{"net": "clearnet", "protocol": "http", "domain": "download.i2p2.no", "path": "/releases/%(version)s/%(file)s", "org": "sigterm.no", "country": "no"} +{"net": "clearnet", "protocol": "https", "domain": "dl.dropboxusercontent.com", "path": "/u/18621288/I2P/%(version)s/%(file)s", "org": "Dropbox", "country": "us"} +{"net": "clearnet", "protocol": "https", "domain": "googledrive.com", "path": "/host/0B4jHEq5G7_EPWV9UeERwdGplZXc/%(version)s/%(file)s", "org": "Google Drive", "country": "us"} +#{"net": "clearnet", "protocol": "http", "domain": "download.geti2p.com", "path": "/%(version)s/%(file)s", "org": "aargh", "country": "us"} +#{"net": "clearnet", "protocol": "http", "domain": "download2.geti2p.com", "path": "/%(version)s/%(file)s", "org": "aargh", "country": "us"} diff --git a/i2p2www/pages/downloads/select.html b/i2p2www/pages/downloads/select.html index 9027b12cd29d3faaa46813a7b09ecc18d34522f9..4eb0f7a0a58fd87e9c76c28f8bbc25cdc49d46fb 100644 --- a/i2p2www/pages/downloads/select.html +++ b/i2p2www/pages/downloads/select.html @@ -3,13 +3,18 @@ {% block content %} <h1>{{ _('Mirror selection') }}</h1> <h2>{{ _('File:') }} /{{ file }}</h2> -{% for protocol in mirrors -%} -<div class="protocol"> - <h3>{{ protocol.name | upper }}</h3> +{% for net in mirrors -%} +<div class="net"> + <h3>{{ net.name | upper }}</h3> <ul> - <li><a href="{{ url_for('downloads_redirect', version=version, protocol=protocol.name, file=file) }}">{{ _('Any mirror') }}</a></li> - {% for domain, mirror in protocol.mirrors.items() -%} - <li><img src="{{ url_for('static', filename='images/flags/'+mirror.country+'.png') }}" /> {% if mirror.org_url %}<a href="{{ mirror.org_url }}">{% endif %}{{ mirror.org }}{% if mirror.org_url %}</a>{% endif %} <a href="{{ url_for('downloads_redirect', version=version, protocol=protocol.name, domain=domain, file=file) }}">[{{ _('Download') }}]</a> <a href="{{ url_for('downloads_redirect', version=version, protocol=protocol.name, domain=domain, file=file+'.sig') }}">[sig]</a></li> + <li><a href="{{ url_for('downloads_redirect', version=version, net=net.key, file=file) }}">{{ _('Any mirror') }}</a></li> + {% for protocol in net.protocols -%} + <li><a href="{{ url_for('downloads_redirect', version=version, net=net.key, protocol=protocol.key, file=file) }}">{{ protocol.key | upper }}</a> + <ul> + {% for domain, mirror in protocol.domains.items() -%} + <li>{% if mirror.country %}<img src="{{ url_for('static', filename='images/flags/'+mirror.country+'.png') }}" /> {% endif %}{% if mirror.org_url %}<a href="{{ mirror.org_url }}">{% endif %}{{ mirror.org }}{% if mirror.org_url %}</a>{% endif %} <a href="{{ url_for('downloads_redirect', version=version, net=net.key, protocol=protocol.key, domain=domain, file=file) }}">[{{ _('Download') }}]</a> <a href="{{ url_for('downloads_redirect', version=version, net=net.key, protocol=protocol.key, domain=domain, file=file+'.sig') }}">[sig]</a></li> + {%- endfor %} + </ul></li> {%- endfor %} </ul> </div> diff --git a/i2p2www/pages/global/macros b/i2p2www/pages/global/macros index 3615014b211084f6cd2d96ab159087fafe1a76af..4c470c8850442f8b4e21d61c106939a5f11ae714 100644 --- a/i2p2www/pages/global/macros +++ b/i2p2www/pages/global/macros @@ -9,7 +9,7 @@ {%- 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) }} -{%- elif request.endpoint == 'downloads_redirect' -%}{{ url_for('downloads_redirect', lang=lang, version=version, protocol=protocol, domain=domain, file=file) }} +{%- elif request.endpoint == 'downloads_redirect' -%}{{ url_for('downloads_redirect', lang=lang, version=version, net=net, protocol=protocol, domain=domain, file=file) }} {%- elif request.endpoint == 'static' -%}{{ url_for('static', filename=filename) }} {%- elif request.endpoint -%}{{ url_for(request.endpoint, lang=lang) }} {%- else -%}{{ url_for('site_show', lang=lang) }} diff --git a/i2p2www/urls.py b/i2p2www/urls.py index a46a2f6c3e91e0d16c3b3bd4e891b14153bff3e7..33fa42184117cd16f5aeaf780de41babb3a1924d 100644 --- a/i2p2www/urls.py +++ b/i2p2www/urls.py @@ -71,8 +71,9 @@ url('/<lang:lang>/feed/meetings/atom', 'meetings.views.meetings_atom') url('/<lang:lang>/download', 'downloads.downloads_list') url('/<lang:lang>/download/debian', 'downloads.downloads_debian') url('/<lang:lang>/download/<string:version>/<path:file>/mirrors', 'downloads.downloads_select') -url('/<lang:lang>/download/<string:version>/<string:protocol>/any/<path:file>/download', 'downloads.downloads_redirect', defaults={'domain': None}) -url('/<lang:lang>/download/<string:version>/<string:protocol>/<string:domain>/<path:file>/download', 'downloads.downloads_redirect') +url('/<lang:lang>/download/<string:version>/<string:net>/any/<path:file>/download', 'downloads.downloads_redirect', defaults={'protocol': None, 'domain': None}) +url('/<lang:lang>/download/<string:version>/<string:net>/<string:protocol>/any/<path:file>/download', 'downloads.downloads_redirect', defaults={'domain': None}) +url('/<lang:lang>/download/<string:version>/<string:net>/<string:protocol>/<string:domain>/<path:file>/download', 'downloads.downloads_redirect') url('/meeting<int:id>', 'legacy.legacy_meeting') url('/meeting<int:id>.html', 'legacy.legacy_meeting')