Exemplo n.º 1
0
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
Exemplo n.º 2
0
    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)