# Created 2019-09-10 by NGnius from flask import Flask, Blueprint, jsonify, request import sqlite3 as dblib from hashlib import sha512 from os import getcwd from threading import get_ident from time import time database_path = "rxsm-update.db" database_connections = dict() app = Flask("rxsm-update-server") def get_or_create_connection(): global database_connections, database_path thread_id = get_ident() if thread_id not in database_connections: database_connections[thread_id] = dblib.connect(database_path) return database_connections[thread_id] @app.route('/release', methods=['POST']) def create_or_modify_release(): try: req_json = request.get_json(force=True) token = req_json['token'] version = req_json['version'] url = req_json['url'] except: return jsonify({'status':400, 'reason':'Invalid request; missing parameter or invalid JSON'}), 400 with open(".token", "r") as f: master_token = f.read() if sha512(token.encode()).hexdigest() != master_token: return jsonify({'status':403, 'reason':'Permission denied; invalid token'}), 403 db_connection = get_or_create_connection() cursor = db_connection.cursor() cursor.execute("SELECT version FROM releases WHERE version=?", (version,)) result = cursor.fetchone() operation = "" if result is None: cursor.execute("INSERT INTO releases (version, url, created_date) VALUES (?,?,?)", (version, url, int(time()))) operation = "create" else: cursor.execute("UPDATE releases SET url=?, created_date=? WHERE version=?", (url, int(time()), version)) operation = "update" db_connection.commit() return jsonify({'status':200, 'reason':'Version %s %sd successfully' % (version, operation)}), 200 # always try to create db table(s) conn = get_or_create_connection() cursor = conn.cursor() cursor.execute(\ """CREATE TABLE IF NOT EXISTS releases ( id INTEGER PRIMARY KEY, version TEXT UNIQUE NOT NULL, url TEXT NOT NULL, created_date INTEGER NOT NULL )""" ) conn.commit() if __name__ == '__main__': print("Working directory: " + getcwd()) app.run(host='0.0.0.0', port=9080, threaded=True)