def party(): global party_process json = flask.request.get_json() enabled = json.get("enabled", False) logger.info("Got party state %r" % enabled) if enabled and not env.is_party_mode(): # Start party XD party_process = Popen(["python3", "./animate_web.py", "run"]) # async env.set_party_mode(True) elif not enabled and env.is_party_mode(): # Stop party :( env.set_party_mode(False) if party_process is not None: party_process.kill() party_process = None # Return lights to circadian color command = copy.deepcopy(COMMAND_FULL_ON) circadian_color = get_current_circadian_color(date=get_local_time()) command_all_lights(circadian_color.apply_to_command(command)) return "Party mode is now %r" % enabled
Like arrive, but dispenses with HTTPS token checking in favor of only allowing local network requests """ if is_local_request(flask.request): Popen(["python3", "./arrive.py", "run"]) # async return "arrive" else: logger.info("Arrive-local accessed by remote address %s", flask.request.environ["REMOTE_ADDR"]) flask.abort(404) @app.route("/arrive", methods=["POST"]) def arrive(): json = flask.request.get_json() token = json.get("token", None) if token == HTTPS_API_KEY: Popen(["python3", "./arrive.py", "run"]) # async return "arrive" else: logger.warn("Request provided invalid token: %s", flask.request.values) flask.abort(403) if __name__ == "__main__": from arrive import PROCESS_NAME as ARRIVE_PROCESS_NAME unlock(ARRIVE_PROCESS_NAME) # Unlock arrival locks from last run env.set_party_mode(False) context = (SSL_CERT_PEM, SSL_KEY_PEM) app.run(host="0.0.0.0", port=5000, ssl_context=context, threaded=True, debug=True)