- Ajoute clic/survol/affichage-ecran comme declencheurs, et surbrillance, video, son, visibilite, indication, attendre comme actions, utilisables aussi bien par l'editeur manuel (menu lateral Objets/Ecran) que par Ruby (IA), avec blocs deplacables/supprimables dans une chaine. - Corrige plusieurs variantes du bug "impossible de poser un objet hors du champ de la camera" (troncature du chainage d'actions a 4 maillons, fond importe pose a 128x128 au lieu de sa taille reelle, decalage du fond au vrai glisser-depose, redimensionnement manuel jamais propage au monde). - Ajoute un vrai glisser-depose depuis la galerie vers la scene, la gestion complete de "Mes assets" (sous-sections Fonds/Decors/Sons/ Videos, suppression, reclassement fond<->decor sans re-upload). - Ajoute l'upload de son (limite 3 min) et de video (MP4 uniquement, limite 5 min), avec validation de la duree reelle du fichier, et une replique audio optionnelle dans une bulle de dialogue. - Fixe la taille de pose d'un objet/decor importe a 200x200 avec une boite de collision de 150x150. - Filtre le selecteur de fichier des actions son/video par type reel. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
67 lines
3.3 KiB
Python
67 lines
3.3 KiB
Python
"""auth — comptes utilisateurs, connexion, 2FA (TOTP) et isolation par
|
|
utilisateur d'un SEUL projet (sauf le rôle "admin", illimité) — voir
|
|
create_user.py pour le détail des règles. Base SQLite entièrement séparée
|
|
de db/ (une base par JEU) : ces comptes n'appartiennent à aucun jeu, ils
|
|
en POSSÈDENT un (project_slug)."""
|
|
|
|
from .connection import users_db_path
|
|
from .ensure_schema import ensure_users_schema
|
|
from .is_first_user import is_first_user
|
|
from .create_user import create_user, UserCreationError
|
|
from .get_user_by_email import get_user_by_email
|
|
from .get_user_by_id import get_user_by_id
|
|
from .verify_password import verify_password
|
|
from .confirm_totp import confirm_totp
|
|
from .verify_totp import verify_totp
|
|
from .set_project_slug import set_project_slug
|
|
from .password_strength import password_strength, MIN_SCORE_REQUIRED
|
|
from .totp_qrcode_svg import totp_provisioning_uri, totp_qrcode_svg
|
|
from .rate_limit import lockout_minutes_for, seconds_locked_remaining, lockout_message
|
|
from .record_failed_attempt import record_failed_attempt
|
|
from .reset_failed_attempts import reset_failed_attempts
|
|
from .recovery_codes import generate_recovery_codes, verify_recovery_code
|
|
from .set_password import set_password
|
|
from .password_reset import (
|
|
create_password_reset_token, get_user_id_for_valid_token, consume_password_reset_token,
|
|
TOKEN_TTL_MINUTES,
|
|
)
|
|
from .send_email import send_password_reset_email, EmailNotConfiguredError
|
|
from .update_profile import update_profile
|
|
from .count_admins import count_admins
|
|
from .delete_user import delete_user
|
|
from .update_email import update_email, EmailUpdateError
|
|
from .ensure_user_assets_schema import ensure_user_assets_schema
|
|
from .user_assets_dir import user_assets_dir
|
|
from .create_user_asset import create_user_asset
|
|
from .list_user_assets import list_user_assets
|
|
from .get_user_asset import get_user_asset
|
|
from .delete_user_asset import delete_user_asset
|
|
from .save_user_asset import save_user_asset
|
|
from .user_asset_kind import user_asset_kind
|
|
from .validate_audio_duration import validate_audio_duration, MAX_AUDIO_SECONDS
|
|
from .validate_video_duration import validate_video_duration, MAX_VIDEO_SECONDS
|
|
from .image_dimensions import image_dimensions
|
|
from .update_user_asset_scene_kind import update_user_asset_scene_kind
|
|
|
|
__all__ = [
|
|
"users_db_path", "ensure_users_schema", "is_first_user",
|
|
"create_user", "UserCreationError",
|
|
"get_user_by_email", "get_user_by_id",
|
|
"verify_password", "confirm_totp", "verify_totp", "set_project_slug",
|
|
"password_strength", "MIN_SCORE_REQUIRED",
|
|
"totp_provisioning_uri", "totp_qrcode_svg",
|
|
"lockout_minutes_for", "seconds_locked_remaining", "lockout_message",
|
|
"record_failed_attempt", "reset_failed_attempts",
|
|
"generate_recovery_codes", "verify_recovery_code",
|
|
"set_password", "create_password_reset_token", "get_user_id_for_valid_token",
|
|
"consume_password_reset_token", "TOKEN_TTL_MINUTES",
|
|
"send_password_reset_email", "EmailNotConfiguredError",
|
|
"update_profile", "count_admins", "delete_user",
|
|
"update_email", "EmailUpdateError",
|
|
"ensure_user_assets_schema", "user_assets_dir", "create_user_asset",
|
|
"list_user_assets", "get_user_asset", "delete_user_asset", "save_user_asset", "user_asset_kind",
|
|
"validate_audio_duration", "MAX_AUDIO_SECONDS",
|
|
"validate_video_duration", "MAX_VIDEO_SECONDS",
|
|
"image_dimensions", "update_user_asset_scene_kind",
|
|
]
|