feat(obs): nommer chaque requete, et rendre les pages d erreur audibles
OBS-005. Un 500 dans errors.log et les six lignes de app.log qui y menent n etaient relies que par leur horodatage — ce qui n est pas une relation des que le serveur traite plus d une requete a la fois. Et un utilisateur qui dit « ca a plante quand j ai clique sur enregistrer » ne donnait a personne de quoi chercher. Chaque requete recoit un identifiant, porte par toutes les lignes de journal qu elle produit, renvoye en X-Request-Id, et affiche sur la page 500 comme reference a citer. Il est **genere**, jamais lu depuis un en-tete entrant. Accepter celui du client serait pratique pour tracer a travers nginx, et permettrait aussi a n importe qui d ecrire du texte arbitraire — retours a la ligne compris — dans le fichier de journal. C est ainsi qu un journal cesse d etre une preuve. Il n y a de toute facon aucun proxy de confiance tant qu OPS-002 est ouvert. Le test correspondant assure sur l alphabet plutot qu en envoyant un retour a la ligne : le client de test de Werkzeug refuse d emettre un tel en-tete, donc l attaque ne peut meme pas etre construite par la, ce qui ne prouverait rien sur l application. **Defaut trouve en chemin, et repare.** Les cinq gabarits d erreur remplissent le bloc `content`, qui n existait que dans la branche authentifiee de la mise en page. Un visiteur deconnecte tombant sur une erreur — donc typiquement sur la page de connexion — recevait le logo, le selecteur de langue, et **aucun message**. Le code de statut etait bon, les journaux etaient bons, la page etait vide. Le <title> disait quand meme « 404 », ce qui explique en grande partie que personne ne l ait vu. Le bloc est desormais rendu dans les deux branches via self.content(), Jinja refusant deux blocs de meme nom. Un seul cote du if s execute, donc jamais de double rendu — et c est assure, pas suppose. 550 tests.
This commit is contained in:
Binary file not shown.
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: team-tryouts VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2026-08-11 13:32-0400\n"
|
||||
"POT-Creation-Date: 2026-08-11 15:25-0400\n"
|
||||
"PO-Revision-Date: 2026-08-07 20:22-0400\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language: en\n"
|
||||
@@ -20,7 +20,7 @@ msgstr ""
|
||||
"Generated-By: Babel 2.18.0\n"
|
||||
|
||||
#: app/forms.py:37 app/routes/auth.py:224 app/routes/auth.py:374
|
||||
#: app/routes/users/contracts.py:95
|
||||
#: app/routes/users/contracts.py:96
|
||||
#, python-format
|
||||
msgid "%(field)s: %(msg)s"
|
||||
msgstr "%(field)s: %(msg)s"
|
||||
@@ -633,11 +633,11 @@ msgstr "User %(full_name)s created as %(role)s!"
|
||||
msgid "Only coaches can manage availability."
|
||||
msgstr "Only coaches can manage availability."
|
||||
|
||||
#: app/routes/users/contracts.py:83
|
||||
#: app/routes/users/contracts.py:84
|
||||
msgid "Only presidents, managers, and coaches can upload contracts."
|
||||
msgstr "Only presidents, managers, and coaches can upload contracts."
|
||||
|
||||
#: app/routes/users/contracts.py:102
|
||||
#: app/routes/users/contracts.py:103
|
||||
msgid "You do not have permission to upload a contract for this player."
|
||||
msgstr "You do not have permission to upload a contract for this player."
|
||||
|
||||
@@ -650,15 +650,15 @@ msgstr "Contract uploaded successfully for %(username)s!"
|
||||
msgid "Only the player can upload their signed contract."
|
||||
msgstr "Only the player can upload their signed contract."
|
||||
|
||||
#: app/routes/users/contracts.py:176
|
||||
#: app/routes/users/contracts.py:175
|
||||
msgid "Signed contract uploaded successfully!"
|
||||
msgstr "Signed contract uploaded successfully!"
|
||||
|
||||
#: app/routes/users/contracts.py:186 app/routes/users/contracts.py:199
|
||||
#: app/routes/users/contracts.py:185 app/routes/users/contracts.py:200
|
||||
msgid "You do not have permission to download this contract."
|
||||
msgstr "You do not have permission to download this contract."
|
||||
|
||||
#: app/routes/users/contracts.py:202
|
||||
#: app/routes/users/contracts.py:203
|
||||
msgid "No signed contract available."
|
||||
msgstr "No signed contract available."
|
||||
|
||||
@@ -881,7 +881,11 @@ msgstr ""
|
||||
"Something went wrong on our end. The error has been logged and will be "
|
||||
"investigated. Please try again later."
|
||||
|
||||
#: app/templates/errors/500.html:12
|
||||
#: app/templates/errors/500.html:15
|
||||
msgid "Reference to quote if you report this:"
|
||||
msgstr "Reference to quote if you report this:"
|
||||
|
||||
#: app/templates/errors/500.html:18
|
||||
msgid "Try Again"
|
||||
msgstr "Try Again"
|
||||
|
||||
@@ -889,78 +893,78 @@ msgstr "Try Again"
|
||||
msgid "Language"
|
||||
msgstr "Language"
|
||||
|
||||
#: app/templates/layouts/base.html:33 app/templates/layouts/base.html:139
|
||||
#: app/templates/layouts/base.html:48 app/templates/layouts/base.html:154
|
||||
#: app/templates/pages/dashboard.html:2 app/templates/pages/dashboard.html:3
|
||||
msgid "Dashboard"
|
||||
msgstr "Dashboard"
|
||||
|
||||
#: app/templates/layouts/base.html:39 app/templates/pages/tryouts.html:2
|
||||
#: app/templates/layouts/base.html:54 app/templates/pages/tryouts.html:2
|
||||
#: app/templates/pages/tryouts.html:3
|
||||
msgid "Tryouts"
|
||||
msgstr "Tryouts"
|
||||
|
||||
#: app/templates/layouts/base.html:45 app/templates/pages/calendar.html:2
|
||||
#: app/templates/layouts/base.html:60 app/templates/pages/calendar.html:2
|
||||
#: app/templates/pages/calendar.html:3
|
||||
msgid "Calendar"
|
||||
msgstr "Calendar"
|
||||
|
||||
#: app/templates/layouts/base.html:52 app/templates/pages/dashboard.html:43
|
||||
#: app/templates/layouts/base.html:67 app/templates/pages/dashboard.html:43
|
||||
#: app/templates/pages/evaluations.html:2
|
||||
#: app/templates/pages/evaluations.html:3
|
||||
msgid "Evaluations"
|
||||
msgstr "Evaluations"
|
||||
|
||||
#: app/templates/layouts/base.html:60 app/templates/pages/my_teams.html:2
|
||||
#: app/templates/layouts/base.html:75 app/templates/pages/my_teams.html:2
|
||||
#: app/templates/pages/my_teams.html:3
|
||||
msgid "My Team(s)"
|
||||
msgstr "My Team(s)"
|
||||
|
||||
#: app/templates/layouts/base.html:67
|
||||
#: app/templates/layouts/base.html:82
|
||||
msgid "Manage Teams"
|
||||
msgstr "Manage Teams"
|
||||
|
||||
#: app/templates/layouts/base.html:75 app/templates/pages/users.html:2
|
||||
#: app/templates/layouts/base.html:90 app/templates/pages/users.html:2
|
||||
#: app/templates/pages/users.html:3
|
||||
msgid "Manage Users"
|
||||
msgstr "Manage Users"
|
||||
|
||||
#: app/templates/layouts/base.html:83
|
||||
#: app/templates/layouts/base.html:98
|
||||
#: app/templates/pages/player_personal_notes.html:2
|
||||
#: app/templates/pages/player_personal_notes.html:3
|
||||
msgid "My Notes"
|
||||
msgstr "My Notes"
|
||||
|
||||
#: app/templates/layouts/base.html:91
|
||||
#: app/templates/layouts/base.html:106
|
||||
msgid "Availability"
|
||||
msgstr "Availability"
|
||||
|
||||
#: app/templates/layouts/base.html:97
|
||||
#: app/templates/layouts/base.html:112
|
||||
msgid "Notes & One on One"
|
||||
msgstr "Notes & One on One"
|
||||
|
||||
#: app/templates/layouts/base.html:104 app/templates/pages/contracts.html:2
|
||||
#: app/templates/layouts/base.html:119 app/templates/pages/contracts.html:2
|
||||
#: app/templates/pages/contracts.html:3 app/templates/pages/profile.html:9
|
||||
msgid "Contracts"
|
||||
msgstr "Contracts"
|
||||
|
||||
#: app/templates/layouts/base.html:111 app/templates/pages/profile.html:2
|
||||
#: app/templates/layouts/base.html:126 app/templates/pages/profile.html:2
|
||||
#: app/templates/pages/profile.html:3
|
||||
msgid "My Profile"
|
||||
msgstr "My Profile"
|
||||
|
||||
#: app/templates/layouts/base.html:122
|
||||
#: app/templates/layouts/base.html:137
|
||||
msgid "Logout"
|
||||
msgstr "Logout"
|
||||
|
||||
#: app/templates/layouts/base.html:143
|
||||
#: app/templates/layouts/base.html:158
|
||||
msgid "Toggle dark mode"
|
||||
msgstr "Toggle dark mode"
|
||||
|
||||
#: app/templates/layouts/base.html:155 app/templates/layouts/base.html:174
|
||||
#: app/templates/layouts/base.html:170 app/templates/layouts/base.html:189
|
||||
msgid "Dismiss"
|
||||
msgstr "Dismiss"
|
||||
|
||||
#: app/templates/layouts/base.html:184
|
||||
#: app/templates/layouts/base.html:199
|
||||
msgid "Team Tryout Management System"
|
||||
msgstr "Team Tryout Management System"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user