Compare commits

..

2 Commits

Author SHA1 Message Date
94fa825e67 post opens new request for each file 2019-06-02 20:10:00 -04:00
c06ebc29dc server creates dummy db for initial upload 2019-06-02 19:51:32 -04:00
2 changed files with 48 additions and 16 deletions

26
overwrought_master.py Normal file → Executable file
View File

@ -251,22 +251,34 @@ def post_pack():
res.raise_for_status()
mods_remote = res.json()
mods = [mod for mod in mods if mod.filename not in mods_remote]
files = {}
for mod in mods:
files[mod.filename] = open(os.path.join('mods', mod.filename), 'rb')
files[config_master.modpack_name + '.html'] = open(
config_master.modpack_name, 'rb')
for mod in mods:
files = {}
files[mod.filename] = open(os.path.join('mods', mod.filename), 'rb')
res = requests.post(
url=config_master.remote_addr + '/post',
data=data,
files=files
)
res.raise_for_status()
files[mod.filename].close()
print(f"{mod.filename} uploaded.")
files = {}
files['modpack.db'] = open('modpack.db', 'rb')
files[config_master.modpack_name + '.html'] = open(
config_master.modpack_name +'.html', 'rb')
res = requests.post(
url=config_master.remote_addr + '/post',
data=data,
files=files
)
res.raise_for_status()
for file in files.values():
file.close()
print("modpack.db uploaded.")
print(f"{config_master.modpack_name}.html uploaded.")
print('Success!')

38
overwrought_server.py Normal file → Executable file
View File

@ -2,6 +2,7 @@
"""
The overwrought server, for exchanging mods from master to slave recipients.
"""
import os
import json
import sqlite3
import threading
@ -13,6 +14,22 @@ import config_server
app = Flask(__name__)
app.config['db_lock'] = threading.Lock()
os.makedirs('mods', exist_ok=True)
def init_db():
"""
If no database is found, a dummy database is created to allow the
initial modpack upload to go smoothly.
"""
con = sqlite3.connect('modpack.db')
cur = con.cursor()
try:
cur.execute("SELECT filename FROM mod").fetchone()
except sqlite3.OperationalError:
cur.execute("CREATE TABLE mod(filename TEXT)")
con.commit()
con.close()
init_db()
@app.route('/')
def index():
@ -47,17 +64,20 @@ def post():
if not argon2.verify(password, config_server.pw_hash):
abort(401)
db = request.files.get('database')
app.config.get('db_lock').acquire()
db.save('modpack.db')
app.config.get('db_lock').release()
files = request.files.to_dict()
if 'modpack.db' in files:
db = request.files.get('database')
app.config.get('db_lock').acquire()
db.save('modpack.db')
app.config.get('db_lock').release()
files.pop('modpack.db')
summary = request.files.get(config_server.modpack_name + '.html')
summary.save(config_server.modpack_name + '.html')
if config_server.modpack_name + '.html' in files:
summary = request.files.get(config_server.modpack_name + '.html')
summary.save(config_server.modpack_name + '.html')
files.pop(config_server.modpack_name + '.html')
for fname, file in request.files.items():
if not fname.endswith('.jar'):
continue
for fname, file in files.items():
file.save(os.path.join(config_server.mods_dir, fname))
def generate_hash(password):