mirror of
https://github.com/armbian/dl-router.git
synced 2026-01-06 10:32:39 -08:00
working redirect
This commit is contained in:
42
app.py
Normal file
42
app.py
Normal file
@@ -0,0 +1,42 @@
|
||||
from flask import (
|
||||
Flask,
|
||||
redirect
|
||||
)
|
||||
# from markupsafe import escape
|
||||
from download_image_map import Parser
|
||||
from mirror_list import Mirror
|
||||
|
||||
all_mirrors = ["https://mirrors.netix.net/armbian/dl/",
|
||||
"https://mirrors.dotsrc.org/armbian-dl/",
|
||||
"https://imola.armbian.com/"]
|
||||
|
||||
mirror = Mirror(all_mirrors)
|
||||
parser = Parser('userdata.csv')
|
||||
dl_map = parser.parsed_data
|
||||
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
|
||||
def get_redirect(path, IP):
|
||||
split_path = path.split('/')
|
||||
if len(split_path) == 2:
|
||||
key = "{}/{}".format(split_path[0], split_path[1])
|
||||
new_path = dl_map.get(key, path)
|
||||
return "{}/{}".format(mirror.next(), new_path)
|
||||
if path == '':
|
||||
return mirror.next()
|
||||
else:
|
||||
print("path: {}".format(path))
|
||||
return "{}/{}".format(mirror.next(), path)
|
||||
|
||||
|
||||
@app.route('/status')
|
||||
def status():
|
||||
return "OK"
|
||||
|
||||
|
||||
@app.route('/', defaults={'path': ''})
|
||||
@app.route('/<path:path>')
|
||||
def catch_all(path):
|
||||
return redirect(get_redirect(path, "127.0.0.1"), 302)
|
||||
35
download_image_map.py
Normal file
35
download_image_map.py
Normal file
@@ -0,0 +1,35 @@
|
||||
#!/usr/bin/env python
|
||||
import csv
|
||||
class Parser():
|
||||
def __init__(self, csv_file=None):
|
||||
self._parsed_data = None
|
||||
self.csv_file = csv_file
|
||||
# other useful things here
|
||||
@property
|
||||
def parsed_data(self):
|
||||
if self._parsed_data is not None:
|
||||
return self._parsed_data
|
||||
self._parsed_data = self.get_data()
|
||||
return self._parsed_data
|
||||
def transform_csv_data(self, data):
|
||||
transformed = {}
|
||||
key = ""
|
||||
for line in data:
|
||||
try:
|
||||
key = '/'.join(line[0:2])
|
||||
transformed[key] = '/'.join(line[2:5])
|
||||
except IndexError as e:
|
||||
print("Missing fields in data '{0}'. Error: '{1}'".format(line, e))
|
||||
break
|
||||
return transformed
|
||||
def import_csv(self):
|
||||
with open(self.csv_file) as f:
|
||||
csvreader = csv.reader(f, delimiter='/')
|
||||
data = list(csvreader)
|
||||
return data
|
||||
def get_data(self):
|
||||
data = self.import_csv()
|
||||
return self.transform_csv_data(data)
|
||||
|
||||
parser = Parser('userdata.csv')
|
||||
print(parser.parsed_data)
|
||||
16
mirror_list.py
Normal file
16
mirror_list.py
Normal file
@@ -0,0 +1,16 @@
|
||||
#!/usr/bin/env python
|
||||
class Mirror():
|
||||
def __init__(self, mirror_list=None):
|
||||
self.mirror_list = mirror_list
|
||||
self._list_position = 0
|
||||
self._list_max = len(mirror_list) - 1
|
||||
|
||||
def increment(self):
|
||||
if self._list_position == self._list_max:
|
||||
self._list_position = 0
|
||||
else:
|
||||
self._list_position = self._list_position + 1
|
||||
|
||||
def next(self):
|
||||
self.increment()
|
||||
return self.mirror_list[self._list_position]
|
||||
3
requirements.txt
Normal file
3
requirements.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
flask
|
||||
boto3
|
||||
python-dotenv
|
||||
573
userdata.csv
Normal file
573
userdata.csv
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user