forked from ScoDoc/ScoDoc
Ajout champ User.email_institutionnel
This commit is contained in:
parent
9058b93507
commit
7bd03f7630
@ -1,15 +1,20 @@
|
||||
# -*- coding: UTF-8 -*
|
||||
from flask import render_template, current_app
|
||||
from flask_babel import _
|
||||
|
||||
from flask import render_template
|
||||
from app.auth.models import User
|
||||
from app.email import get_from_addr, send_email
|
||||
|
||||
|
||||
def send_password_reset_email(user):
|
||||
def send_password_reset_email(user: User):
|
||||
"""Send message allowing to reset password"""
|
||||
recipients = user.get_emails()
|
||||
if not recipients:
|
||||
return
|
||||
token = user.get_reset_password_token()
|
||||
send_email(
|
||||
"[ScoDoc] Réinitialisation de votre mot de passe",
|
||||
sender=get_from_addr(),
|
||||
recipients=[user.email],
|
||||
recipients=recipients,
|
||||
text_body=render_template("email/reset_password.txt", user=user, token=token),
|
||||
html_body=render_template("email/reset_password.j2", user=user, token=token),
|
||||
)
|
||||
|
@ -56,7 +56,9 @@ class User(UserMixin, db.Model):
|
||||
user_name = db.Column(db.String(USERNAME_STR_LEN), index=True, unique=True)
|
||||
"le login"
|
||||
email = db.Column(db.String(120))
|
||||
|
||||
"email à utiliser par ScoDoc"
|
||||
email_institutionnel = db.Column(db.String(120))
|
||||
"email dans l'établissement, facultatif"
|
||||
nom = db.Column(db.String(USERNAME_STR_LEN))
|
||||
prenom = db.Column(db.String(USERNAME_STR_LEN))
|
||||
dept = db.Column(db.String(SHORT_STR_LEN), index=True)
|
||||
@ -64,7 +66,7 @@ class User(UserMixin, db.Model):
|
||||
active = db.Column(db.Boolean, default=True, index=True)
|
||||
"si faux, compte utilisateur désactivé"
|
||||
cas_id = db.Column(db.Text(), index=True, unique=True, nullable=True)
|
||||
"uid sur le CAS (mail ou autre attribut, selon config.cas_attribute_id)"
|
||||
"uid sur le CAS (id, mail ou autre attribut, selon config.cas_attribute_id)"
|
||||
cas_allow_login = db.Column(
|
||||
db.Boolean, default=False, server_default="false", nullable=False
|
||||
)
|
||||
@ -253,6 +255,7 @@ class User(UserMixin, db.Model):
|
||||
}
|
||||
if include_email:
|
||||
data["email"] = self.email or ""
|
||||
data["email_institutionnel"] = self.email_institutionnel or ""
|
||||
return data
|
||||
|
||||
def from_dict(self, data: dict, new_user=False):
|
||||
@ -265,6 +268,7 @@ class User(UserMixin, db.Model):
|
||||
"dept",
|
||||
"active",
|
||||
"email",
|
||||
"email_institutionnel",
|
||||
"date_expiration",
|
||||
"cas_id",
|
||||
]:
|
||||
@ -323,6 +327,15 @@ class User(UserMixin, db.Model):
|
||||
return self._departement.id
|
||||
return None
|
||||
|
||||
def get_emails(self):
|
||||
"List mail adresses to contact this user"
|
||||
mails = []
|
||||
if self.email:
|
||||
mails.append(self.email)
|
||||
if self.email_institutionnel:
|
||||
mails.append(self.email_institutionnel)
|
||||
return mails
|
||||
|
||||
# Permissions management:
|
||||
def has_permission(self, perm: int, dept=False):
|
||||
"""Check if user has permission `perm` in given `dept`.
|
||||
@ -615,8 +628,7 @@ def get_super_admin():
|
||||
|
||||
def send_notif_desactivation_user(user: User):
|
||||
"""Envoi un message mail de notification à l'admin et à l'adresse du compte désactivé"""
|
||||
if not user.email:
|
||||
return
|
||||
recipients = user.get_emails() + [current_app.config.get("SCODOC_ADMIN_MAIL")]
|
||||
txt = [
|
||||
f"""Le compte ScoDoc '{user.user_name}' associé à votre adresse <{user.email}>""",
|
||||
"""a été désactivé par le système car son mot de passe n'était pas valide.\n""",
|
||||
@ -627,7 +639,7 @@ def send_notif_desactivation_user(user: User):
|
||||
email.send_email(
|
||||
f"ScoDoc: désactivation automatique du compte {user.user_name}",
|
||||
email.get_from_addr(),
|
||||
[user.email, current_app.config.get("SCODOC_ADMIN_MAIL")],
|
||||
recipients,
|
||||
txt,
|
||||
)
|
||||
return txt
|
||||
|
@ -53,6 +53,7 @@ TITLES = (
|
||||
"cas_id",
|
||||
"cas_allow_login",
|
||||
"cas_allow_scodoc_login",
|
||||
"email_institutionnel",
|
||||
)
|
||||
COMMENTS = (
|
||||
"""user_name:
|
||||
@ -64,6 +65,7 @@ COMMENTS = (
|
||||
"""prenom:
|
||||
Maximum 64 caractères.""",
|
||||
"""email:
|
||||
L'adresse mail utilisée en priorité par ScoDoc pour contacter l'utilisateur.
|
||||
Maximum 120 caractères.""",
|
||||
"""roles:
|
||||
un plusieurs rôles séparés par ','
|
||||
@ -85,6 +87,9 @@ COMMENTS = (
|
||||
"""cas_allow_scodoc_login
|
||||
autorise connexion via ScoDoc même si CAS obligatoire (optionnel, faux par défaut)
|
||||
""",
|
||||
"""email_institutionnel
|
||||
optionnel, le mail officiel de l'utilisateur.
|
||||
Maximum 120 caractères.""",
|
||||
)
|
||||
|
||||
|
||||
|
@ -172,6 +172,7 @@ def list_users(
|
||||
"cas_allow_scodoc_login",
|
||||
"cas_last_login",
|
||||
]
|
||||
columns_ids.append("email_institutionnel")
|
||||
|
||||
title = "Utilisateurs définis dans ScoDoc"
|
||||
tab = GenTable(
|
||||
@ -182,6 +183,7 @@ def list_users(
|
||||
"nom_fmt": "Nom",
|
||||
"prenom_fmt": "Prénom",
|
||||
"email": "Mail",
|
||||
"email_institutionnel": "Mail institutionnel (opt.)",
|
||||
"dept": "Dept.",
|
||||
"roles_string": "Rôles",
|
||||
"date_expiration": "Expiration",
|
||||
|
@ -18,13 +18,15 @@
|
||||
Vous pouvez supprimer des lignes, mais pas en ajouter.
|
||||
<br>
|
||||
On peut remplir ou modifier le contenu des colonnes <tt>active</tt>,
|
||||
</tt><tt>cas_id</tt>, <tt>cas_allow_login</tt> et <tt>cas_allow_scodoc_login</tt>.
|
||||
<tt>cas_id</tt>, <tt>cas_allow_login</tt>, <tt>cas_allow_scodoc_login</tt>,
|
||||
et <tt>email_institutionnel</tt>
|
||||
<br>
|
||||
Les autres colonnes sont là pour information et seront ignorées à l'import,
|
||||
sauf évidemment <tt>user_name</tt> qui sert à repérer l'utilisateur.
|
||||
<br>
|
||||
(Note: <tt>active</tt> active ou désactive le compte, sans lien avec CAS, mais il
|
||||
est commode de réviser la liste des utilisateurs actifs à l'occasion de la configuration CAS)
|
||||
est commode de réviser la liste des utilisateurs actifs à l'occasion de la configuration CAS.
|
||||
Pareil pour <tt>email_institutionnel</tt>)
|
||||
</li>
|
||||
|
||||
<li style="margin-bottom:32px;">Revenez sur cette page et chargez le fichier dans ScoDoc.
|
||||
|
@ -17,6 +17,7 @@
|
||||
<b>Nom :</b> {{user.nom or ""}}<br>
|
||||
<b>Prénom :</b> {{user.prenom or ""}}<br>
|
||||
<b>Mail :</b> {{user.email}}<br>
|
||||
<b>Mail institutionnel:</b> {{user.email_institutionnel or ""}}<br>
|
||||
<b>Rôles :</b> {{user.get_roles_string()}}<br>
|
||||
<b>Dept :</b> {{user.dept or ""}}<br>
|
||||
{% if user.passwd_temp or user.password_scodoc7 %}
|
||||
|
@ -419,6 +419,17 @@ def create_user_form(user_name=None, edit=0, all_roles=True):
|
||||
"enabled": current_user.is_administrator(),
|
||||
},
|
||||
),
|
||||
(
|
||||
"email_institutionnel",
|
||||
{
|
||||
"title": "e-mail institutionnel",
|
||||
"input_type": "text",
|
||||
"explanation": "facultatif" if not edit_only_roles else "",
|
||||
"size": 36,
|
||||
"allow_null": False,
|
||||
"readonly": edit_only_roles,
|
||||
},
|
||||
),
|
||||
]
|
||||
if not edit: # options création utilisateur
|
||||
descr += [
|
||||
|
@ -1,7 +1,7 @@
|
||||
# -*- mode: python -*-
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
SCOVERSION = "9.4.62"
|
||||
SCOVERSION = "9.4.63"
|
||||
|
||||
SCONAME = "ScoDoc"
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user