import os from ..constants import PROJECTS_DIR from ..connection import connect from ..db_path import db_path from .project_slug import build_slug def list_games(owner_folder): """Scanne UNIQUEMENT projects// (voir db/games/ project_slug.py — owner_folder est l'id du compte, voir db/games/create_game.py) : jamais les autres comptes — voir core/auth_guard.py, qui vérifie déjà que `owner_folder` correspond au compte connecté avant tout accès à un slug composé de cette valeur. Un appelant qui passerait le mauvais owner_folder ne verrait de toute façon que SES PROPRES projets, jamais ceux d'un autre compte : cette fonction ne lit plus jamais l'arborescence project/ en entier (avant ce correctif, elle listait TOUS les comptes sans distinction — faille corrigée, voir routes/games/index.py).""" games = [] entry_path = os.path.join(PROJECTS_DIR, owner_folder) if not os.path.isdir(entry_path): return games for project_part in sorted(os.listdir(entry_path)): slug = build_slug(owner_folder, project_part) if os.path.isfile(db_path(slug)): _append_game(games, slug) return games def _append_game(games, slug): conn = connect(slug) row = conn.execute("SELECT value FROM _meta WHERE key = 'name'").fetchone() conn.close() games.append({"slug": slug, "name": row["value"] if row else slug})