From 952d2e2bd895c617e90a82fe1c8739ecbd5625b6 Mon Sep 17 00:00:00 2001
From: Emmanuel Viennet <emmanuel.viennet@gmail.com>
Date: Thu, 23 Jan 2025 13:59:44 +0100
Subject: [PATCH] =?UTF-8?q?CAS:=20am=C3=A9liore=20traitement=20erreurs=20r?=
 =?UTF-8?q?=C3=A9ponse=20serveur=20CAS?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 flask_cas/routing.py | 11 +++++++++--
 sco_version.py       |  2 +-
 scodoc.py            |  2 +-
 3 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/flask_cas/routing.py b/flask_cas/routing.py
index c88e7d80..acf6e7b0 100644
--- a/flask_cas/routing.py
+++ b/flask_cas/routing.py
@@ -114,7 +114,7 @@ def logout():
     return flask.redirect(redirect_url)
 
 
-def validate(ticket):
+def validate(ticket) -> bool:
     """
     Will attempt to validate the ticket. If validation fails, then False
     is returned. If validation is successful, then True is returned
@@ -172,15 +172,22 @@ def validate(ticket):
             if "cas:authenticationSuccess" in xml_from_dict["cas:serviceResponse"]
             else False
         )
-    except (ValueError, ExpatError) as exc:
+    except (ValueError, ExpatError, KeyError) as exc:
         current_app.logger.error(f"CAS returned unexpected result: {exc}")
+        current_app.logger.error(f"Received data from CAS server:\n{xmldump}\n\n")
         if cas_error_callback:
             cas_error_callback("réponse invalide du serveur CAS")
+        return False  # unreachable (cas_error_callback should raise exception)
     except URLError:
         current_app.logger.error("CAS : error validating token: check SSL certificate")
         cas_error_callback(
             "erreur connexion au serveur CAS: vérifiez le certificat SSL"
         )
+        return False  # unreachable
+    except Exception as exc:
+        current_app.logger.error(f"CAS : unkown error validating token: {exc}")
+        cas_error_callback("erreur décodage réponse CAS")
+        return False  # unreachable
 
     if is_valid:
         current_app.logger.debug("valid")
diff --git a/sco_version.py b/sco_version.py
index ecd9a6b5..02a1ea25 100644
--- a/sco_version.py
+++ b/sco_version.py
@@ -3,7 +3,7 @@
 
 "Infos sur version ScoDoc"
 
-SCOVERSION = "9.7.58"
+SCOVERSION = "9.7.59"
 
 SCONAME = "ScoDoc"
 
diff --git a/scodoc.py b/scodoc.py
index d8f114ef..9cca04c6 100755
--- a/scodoc.py
+++ b/scodoc.py
@@ -491,7 +491,7 @@ def user_edit(
     dept=None,
     verbose=False,
 ):
-    """Add or remove a role to the given user in the given dept"""
+    """Modify or display user's account attributes."""
     user: User = User.query.filter_by(user_name=username).first()
     if not user:
         sys.stderr.write(f"user_role: user {username} does not exists\n")
-- 
GitLab