From bedc34b009391c71b5dc339767dccbcc2d228d9d Mon Sep 17 00:00:00 2001 From: str4d Date: Wed, 5 Dec 2012 01:21:34 +0000 Subject: [PATCH] Migrated mirroring code into i2p2www --- i2p2www/__init__.py | 50 +++++++++-- .../pages/downloads}/mirrors | 3 +- i2p2www/pages/downloads/select.html | 17 ++++ mirror.i2p2/mirror.god => mirror.god.old | 0 mirror.i2p2/app.py | 80 ------------------ mirror.i2p2/static/images/i2plogo.png | Bin 8725 -> 0 bytes mirror.i2p2/static/style.css | 0 mirror.i2p2/templates/select.html | 29 ------- 8 files changed, 64 insertions(+), 115 deletions(-) rename {mirror.i2p2 => i2p2www/pages/downloads}/mirrors (53%) create mode 100644 i2p2www/pages/downloads/select.html rename mirror.i2p2/mirror.god => mirror.god.old (100%) delete mode 100644 mirror.i2p2/app.py delete mode 100644 mirror.i2p2/static/images/i2plogo.png delete mode 100644 mirror.i2p2/static/style.css delete mode 100644 mirror.i2p2/templates/select.html diff --git a/i2p2www/__init__.py b/i2p2www/__init__.py index 24277843..7fc86431 100644 --- a/i2p2www/__init__.py +++ b/i2p2www/__init__.py @@ -6,6 +6,11 @@ import os.path import os import fileinput import codecs +from random import randint +try: + import json +except ImportError: + import simplejson as json TEMPLATE_DIR = os.path.join(os.path.dirname(__file__), 'pages') @@ -14,6 +19,8 @@ STATIC_DIR = os.path.join(os.path.dirname(__file__), 'static') BLOG_DIR = os.path.join(os.path.dirname(__file__), 'blog') MEETINGS_DIR = os.path.join(os.path.dirname(__file__), 'meetings') +MIRRORS_FILE = os.path.join(TEMPLATE_DIR, 'downloads/mirrors') + app = application = Flask('i2p2www', template_folder=TEMPLATE_DIR, static_url_path='/_static', static_folder=STATIC_DIR) app.debug = bool(os.environ.get('APP_DEBUG', 'False')) babel = Babel(app) @@ -248,6 +255,26 @@ def meetings_show_rst(id): ################### # Download handlers +# Read in mirrors from file +def read_mirrors(): + file = open(MIRRORS_FILE, 'r') + dat = file.read() + file.close() + lines=dat.split('\n') + ret={} + for line in lines: + try: + obj=json.loads(line) + except ValueError: + continue + if 'protocol' not in obj: + continue + protocol=obj['protocol'] + if protocol not in ret: + ret[protocol]=[] + ret[protocol].append(obj) + return ret + # List of downloads @app.route('//download') def downloads_list(): @@ -257,16 +284,29 @@ def downloads_list(): # Specific file downloader @app.route('//download/') def downloads_select(file): - # TODO: implement if (file == 'debian'): return render_template('downloads/debian.html') - pass + mirrors=read_mirrors() + obj=[] + for protocol in mirrors.keys(): + a={} + a['name']=protocol + a['mirrors']=mirrors[protocol] + for mirror in a['mirrors']: + mirror['url']=mirror['url'] % file + obj.append(a) + return render_template('downloads/select.html', mirrors=obj, file=file) @app.route('/download//any/') -@app.route('/download///') +@app.route('/download///') def downloads_redirect(protocol, file, mirror=None): - # TODO: implement - pass + mirrors=read_mirrors() + if not protocol in mirrors: + abort(404) + mirrors=mirrors[protocol] + if mirror: + return redirect(mirrors[mirror]['url'] % file) + return redirect(mirrors[randint(0, len(mirrors) - 1)]['url'] % file) ##################### diff --git a/mirror.i2p2/mirrors b/i2p2www/pages/downloads/mirrors similarity index 53% rename from mirror.i2p2/mirrors rename to i2p2www/pages/downloads/mirrors index 5afeaf67..82ab9b31 100644 --- a/mirror.i2p2/mirrors +++ b/i2p2www/pages/downloads/mirrors @@ -1,2 +1,3 @@ +{"url": "http://i2p.googlecode.com/files/%s", "org": "Google Code", "org_url": "http://code.google.com", "protocol": "http", "country": "us"} {"url": "http://golden.mtveurope.org/~yang/i2p_mirror/%s", "org": "VServer.si", "org_url": "http://www.vserver.si", "protocol": "http", "country": "lu"} -{"url": "http://a.mirror.geti2p.net/releases/current/%s", "org": "welterde", "protocol": "http", "country": "de"} \ No newline at end of file +{"url": "http://a.mirror.geti2p.net/releases/current/%s", "org": "welterde", "protocol": "http", "country": "de"} diff --git a/i2p2www/pages/downloads/select.html b/i2p2www/pages/downloads/select.html new file mode 100644 index 00000000..3eaf46a9 --- /dev/null +++ b/i2p2www/pages/downloads/select.html @@ -0,0 +1,17 @@ +{% extends "global/layout.html" %} +{% block title %}Mirror selection{% endblock %} +{% block content %} +

Mirror selection

+

File: /{{ file }}

+{% for protocol in mirrors -%} +
+

{{ protocol.name | upper }}

+ +
+{%- endfor %} +{% endblock %} diff --git a/mirror.i2p2/mirror.god b/mirror.god.old similarity index 100% rename from mirror.i2p2/mirror.god rename to mirror.god.old diff --git a/mirror.i2p2/app.py b/mirror.i2p2/app.py deleted file mode 100644 index 8c26e237..00000000 --- a/mirror.i2p2/app.py +++ /dev/null @@ -1,80 +0,0 @@ -from flask import Flask, redirect, request, render_template, abort -from random import randint -from sys import argv -try: - import json -except ImportError: - import simplejson as json - - -# try to create an memcache client -if len(argv[3:]) > 0: - try: - try: - from cmemcache import Client - except ImportError: - from memcache import Client - client=Client(argv[3:]) - except ImportError: - client=None - -# create application -app=Flask(__name__) - -# extract domain -domain=argv[1] - -# extract port -port=int(argv[2]) - -def read_mirrors(): - file = open('mirrors', 'r') - dat = file.read() - file.close() - lines=dat.split('\n') - ret={} - for line in lines: - try: - obj=json.loads(line) - except ValueError: - pass - if 'protocol' not in obj: - continue - protocol=obj['protocol'] - if protocol not in ret: - ret[protocol]=[] - ret[protocol].append(obj) - return ret - - -@app.route('/') -def index(): - return redirect('http://www.%s/download' % domain) - -@app.route('/select/') -def select(f): - mirrors=read_mirrors() - obj=[] - for protocol in mirrors.keys(): - a={} - a['name']=protocol.upper() - a['mirrors']=mirrors[protocol] - for mirror in a['mirrors']: - mirror['url']=mirror['url'] % f - obj.append(a) - return render_template('select.html', mirrors=obj, file=f, domain=domain) - -@app.route('//') -def get(protocol, f): - mirrors=read_mirrors() - if not protocol in mirrors: - abort(404) - mirrors=mirrors[protocol] - return redirect(mirrors[randint(0, len(mirrors) - 1)]['url'] % f) - -@app.route('/') -def old_get(f): - return redirect('http://i2p.googlecode.com/files/%s' % f) - -if __name__ == '__main__': - app.run(port=port) diff --git a/mirror.i2p2/static/images/i2plogo.png b/mirror.i2p2/static/images/i2plogo.png deleted file mode 100644 index f7beff26bac365f3b7a6fd6e2bbbe52ed5d61c32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8725 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 - - - - I2P - Mirror selection - /{{ file }} - - - - -
-

Mirror selection

-

File: /{{ file }}

-
- {% for protocol in mirrors -%} -
-

{{ protocol.name }}

- -
- {%- endfor %} - - -