remote_reducer.py (1406B)
1 import flask 2 from flask import Flask, request 3 import subprocess 4 import json 5 import sys 6 import os 7 8 if sys.version_info.major < 3: 9 print("Python>=3 required") 10 os.exit(1) 11 12 app = Flask(__name__) 13 14 15 @app.route("/") 16 def hello_world(): 17 return "<p>Hello, World!</p>" 18 19 20 @app.route("/start-recovery") 21 def start_recovery(): 22 res = subprocess.run(["anastasis-reducer", "-r"], capture_output=True) 23 resp = flask.Response(res.stdout) 24 resp.headers['Access-Control-Allow-Origin'] = '*' 25 return resp 26 27 28 @app.route("/start-backup") 29 def start_backup(): 30 res = subprocess.run(["anastasis-reducer", "-b"], capture_output=True) 31 resp = flask.Response(res.stdout) 32 resp.headers['Access-Control-Allow-Origin'] = '*' 33 return resp 34 35 36 @app.route("/action", methods=["POST", "OPTIONS"]) 37 def reduce_action(): 38 if request.method == "OPTIONS": 39 resp = flask.Response() 40 resp.headers['Access-Control-Allow-Origin'] = '*' 41 resp.headers['Access-Control-Allow-Headers'] = '*' 42 resp.headers['Access-Control-Allow-Method'] = '*' 43 return resp 44 45 b = request.get_json() 46 res = subprocess.run( 47 ["anastasis-reducer", "-a", json.dumps(b["arguments"]), b["action"]], 48 capture_output=True, 49 input=json.dumps(b["state"]).encode("utf-8"), 50 ) 51 resp = flask.Response(res.stdout) 52 resp.headers['Access-Control-Allow-Origin'] = '*' 53 return resp