working redirect

This commit is contained in:
Lane Jennison
2020-07-24 23:27:30 -04:00
parent 23ceaf54a5
commit 997e626a01
5 changed files with 669 additions and 0 deletions

42
app.py Normal file
View 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
View 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
View 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
View File

@@ -0,0 +1,3 @@
flask
boto3
python-dotenv

573
userdata.csv Normal file

File diff suppressed because it is too large Load Diff