diff --git a/app/auth/models.py b/app/auth/models.py
index b79ce703713921fdc6852c2118b31be8930988a8..a3a0c3e47e7f4b1dbb10ad85c286d2b3dee310a7 100644
--- a/app/auth/models.py
+++ b/app/auth/models.py
@@ -67,14 +67,6 @@ def is_valid_user_name(user_name: str) -> bool:
)
-def is_new_cas_id(cas_id: str) -> bool:
- "Check that cas_id is a valid new id (uniqueness, allow nulls)"
- if not cas_id:
- return True
- nb_with_this_id = db.session.query(User).filter_by(cas_id=cas_id).count()
- return nb_with_this_id == 0
-
-
class User(UserMixin, ScoDocModel):
"""ScoDoc users, handled by Flask / SQLAlchemy"""
@@ -435,11 +427,18 @@ class User(UserMixin, ScoDocModel):
if cas_id:
new_cas_id = cas_id
if new_cas_id != self.cas_id:
- if is_new_cas_id(new_cas_id):
+ existing: User = (
+ db.session.query(User).filter_by(cas_id=new_cas_id).first()
+ if new_cas_id is not None
+ else None
+ )
+ if not existing:
self.cas_id = new_cas_id
else:
- log(f"User.from_dict: CAS id invalide pour {self.user_name}")
- raise ScoValueError(f"CAS id invalide pour {self.user_name}")
+ msg = f"""CAS id invalide pour {self.user_name
+ }, déjà utilisé par {existing.user_name}"""
+ log(f"User.from_dict: {msg}")
+ raise ScoValueError(msg)
def get_token(self, expires_in=3600):
"Un jeton pour cet user. Stocké en base, non commité."