forked from I2P_Developers/i2p.www
Categorize mirrors by network
This commit is contained in:
@@ -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)
|
||||
|
@@ -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>
|
||||
|
@@ -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"}
|
||||
|
@@ -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>
|
||||
|
@@ -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) }}
|
||||
|
@@ -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')
|
||||
|
Reference in New Issue
Block a user