Browse Source

Implement structure and release request

master
NGnius 5 years ago
parent
commit
e165f79080
5 changed files with 75 additions and 0 deletions
  1. +3
    -0
      .gitignore
  2. +1
    -0
      requirements.txt
  3. +65
    -0
      rxsmserver/__init__.py
  4. +3
    -0
      scripts/install-requirements.sh
  5. +3
    -0
      scripts/run.sh

+ 3
- 0
.gitignore View File

@@ -114,3 +114,6 @@ dmypy.json
# Pyre type checker
.pyre/

# runtime
.token
**.db

+ 1
- 0
requirements.txt View File

@@ -0,0 +1 @@
flask

+ 65
- 0
rxsmserver/__init__.py View File

@@ -0,0 +1,65 @@
# 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)

+ 3
- 0
scripts/install-requirements.sh View File

@@ -0,0 +1,3 @@
#!/bin/sh

sudo python3 -m install -r requirements.txt

+ 3
- 0
scripts/run.sh View File

@@ -0,0 +1,3 @@
#!/bin/sh

python3 rxsmserver/__init__.py