import json from flask import render_template, url_for, abort import db import screens from core.flask_app import app from core.player_identity import get_or_create_player_id, set_player_id_cookie @app.route("/jouer/") def game_play_public(slug): """Route PUBLIQUE, non authentifiée (voir core/auth_guard.py) — distincte de /game//play (aperçu créateur, connecté, INCHANGÉE) : un vrai visiteur anonyme, identifié par un cookie (voir core/player_identity.py), avec sa propre partie (variables/objets per_player, voir db/global_vars/, db/rows/). 404 si le créateur n'a pas explicitement basculé "Publier en ligne" dans son tableau de bord — jamais exposé par défaut.""" if not db.is_public_played(slug): abort(404) game = db.game_meta(slug) player_id, is_new = get_or_create_player_id() payload = screens.full_game_payload(slug, player_id) resp = app.make_response( render_template( "play.html", game=game, screens_data=payload["screens"], payload_json=json.dumps(payload), runtime_payload_url=url_for("runtime_payload_public", slug=slug), flow_node_run_data_url=url_for("flow_node_run_data_public", slug=slug, node_id=999999), flow_node_run_variable_url=url_for("flow_node_run_variable_public", slug=slug, node_id=999999), flow_node_run_add_row_url=url_for("flow_node_run_add_row_public", slug=slug, node_id=999999), ) ) if is_new: set_player_id_cookie(resp, player_id) return resp