anastasis

Credential backup and recovery protocol and service
Log | Files | Refs | Submodules | README | LICENSE

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