forked from ScoDoc/ScoDoc
Modif mail import user. A compléter suivant la PR de JMP
This commit is contained in:
parent
6e1bc9665d
commit
dc26d1edea
@ -27,27 +27,23 @@
|
|||||||
|
|
||||||
"""Import d'utilisateurs via fichier Excel
|
"""Import d'utilisateurs via fichier Excel
|
||||||
"""
|
"""
|
||||||
import random, time
|
import random
|
||||||
import re
|
import time
|
||||||
|
|
||||||
from email.mime.multipart import MIMEMultipart
|
from email.mime.multipart import MIMEMultipart
|
||||||
from email.mime.text import MIMEText
|
from flask import g, url_for
|
||||||
from email.header import Header
|
from flask_login import current_user
|
||||||
|
|
||||||
from app import db, Departement
|
from app import db
|
||||||
|
from app import email
|
||||||
|
from app.auth.models import User, UserRole
|
||||||
import app.scodoc.sco_utils as scu
|
import app.scodoc.sco_utils as scu
|
||||||
from app import log
|
from app import log
|
||||||
from app.scodoc.sco_exceptions import AccessDenied, ScoValueError, ScoException
|
from app.scodoc.sco_exceptions import AccessDenied, ScoValueError
|
||||||
from app.scodoc import sco_excel
|
from app.scodoc import sco_excel
|
||||||
from app.scodoc import sco_preferences
|
from app.scodoc import sco_preferences
|
||||||
from app.scodoc import sco_users
|
from app.scodoc import sco_users
|
||||||
|
|
||||||
from flask import g
|
|
||||||
from flask_login import current_user
|
|
||||||
from app.auth.models import User, UserRole
|
|
||||||
|
|
||||||
from app import email
|
|
||||||
|
|
||||||
|
|
||||||
TITLES = ("user_name", "nom", "prenom", "email", "roles", "dept")
|
TITLES = ("user_name", "nom", "prenom", "email", "roles", "dept")
|
||||||
COMMENTS = (
|
COMMENTS = (
|
||||||
@ -90,7 +86,7 @@ def import_excel_file(datafile):
|
|||||||
"""
|
"""
|
||||||
Import scodoc users from Excel file.
|
Import scodoc users from Excel file.
|
||||||
This method:
|
This method:
|
||||||
* checks that the current_user has the ability to do so (at the moment only a SuperAdmin). He may thereoff import users with any well formed role into any deprtment (or all)
|
* checks that the current_user has the ability to do so (at the moment only a SuperAdmin). He may thereoff import users with any well formed role into any department (or all)
|
||||||
* Once the check is done ans successfull, build the list of users (does not check the data)
|
* Once the check is done ans successfull, build the list of users (does not check the data)
|
||||||
* call :func:`import_users` to actually do the job
|
* call :func:`import_users` to actually do the job
|
||||||
history: scodoc7 with no SuperAdmin every Admin_XXX could import users.
|
history: scodoc7 with no SuperAdmin every Admin_XXX could import users.
|
||||||
@ -98,7 +94,6 @@ def import_excel_file(datafile):
|
|||||||
:return: same as import users
|
:return: same as import users
|
||||||
"""
|
"""
|
||||||
# Check current user privilege
|
# Check current user privilege
|
||||||
auth_dept = current_user.dept
|
|
||||||
auth_name = str(current_user)
|
auth_name = str(current_user)
|
||||||
if not current_user.is_administrator():
|
if not current_user.is_administrator():
|
||||||
raise AccessDenied("invalid user (%s) must be SuperAdmin" % auth_name)
|
raise AccessDenied("invalid user (%s) must be SuperAdmin" % auth_name)
|
||||||
@ -127,7 +122,8 @@ def import_excel_file(datafile):
|
|||||||
del cols[tit]
|
del cols[tit]
|
||||||
if cols or unknown:
|
if cols or unknown:
|
||||||
raise ScoValueError(
|
raise ScoValueError(
|
||||||
"colonnes incorrectes (on attend %d, et non %d) <br/> (colonnes manquantes: %s, colonnes invalides: %s)"
|
"""colonnes incorrectes (on attend %d, et non %d) <br/>
|
||||||
|
(colonnes manquantes: %s, colonnes invalides: %s)"""
|
||||||
% (len(TITLES), len(fs), list(cols.keys()), unknown)
|
% (len(TITLES), len(fs), list(cols.keys()), unknown)
|
||||||
)
|
)
|
||||||
# ok, same titles... : build the list of dictionaries
|
# ok, same titles... : build the list of dictionaries
|
||||||
@ -192,9 +188,7 @@ def import_users(users):
|
|||||||
)
|
)
|
||||||
if not user_ok:
|
if not user_ok:
|
||||||
append_msg("identifiant '%s' %s" % (u["user_name"], msg))
|
append_msg("identifiant '%s' %s" % (u["user_name"], msg))
|
||||||
# raise ScoValueError(
|
|
||||||
# "données invalides pour %s: %s" % (u["user_name"], msg)
|
|
||||||
# )
|
|
||||||
u["passwd"] = generate_password()
|
u["passwd"] = generate_password()
|
||||||
#
|
#
|
||||||
# check identifiant
|
# check identifiant
|
||||||
@ -224,7 +218,7 @@ def import_users(users):
|
|||||||
import_ok = False
|
import_ok = False
|
||||||
except ScoValueError as value_error:
|
except ScoValueError as value_error:
|
||||||
log("import_users: exception: abort create %s" % str(created.keys()))
|
log("import_users: exception: abort create %s" % str(created.keys()))
|
||||||
raise ScoValueError(msg) # re-raise exception
|
raise ScoValueError(msg) from value_error
|
||||||
if import_ok:
|
if import_ok:
|
||||||
for u in created.values():
|
for u in created.values():
|
||||||
# Création de l'utilisateur (via SQLAlchemy)
|
# Création de l'utilisateur (via SQLAlchemy)
|
||||||
@ -244,7 +238,7 @@ def import_users(users):
|
|||||||
|
|
||||||
|
|
||||||
ALPHABET = r"""ABCDEFGHIJKLMNPQRSTUVWXYZ123456789123456789AEIOU"""
|
ALPHABET = r"""ABCDEFGHIJKLMNPQRSTUVWXYZ123456789123456789AEIOU"""
|
||||||
PASSLEN = 6
|
PASSLEN = 8
|
||||||
RNG = random.Random(time.time())
|
RNG = random.Random(time.time())
|
||||||
|
|
||||||
|
|
||||||
@ -259,23 +253,18 @@ def generate_password():
|
|||||||
return "".join(RNG.sample(l, PASSLEN))
|
return "".join(RNG.sample(l, PASSLEN))
|
||||||
|
|
||||||
|
|
||||||
def mail_password(u, context=None, reset=False):
|
def mail_password(user: dict, reset=False) -> None:
|
||||||
"Send password by email"
|
"Send password by email"
|
||||||
if not u["email"]:
|
if not user["email"]:
|
||||||
return
|
return
|
||||||
|
|
||||||
u[
|
user["url"] = url_for("scodoc.index")
|
||||||
"url"
|
|
||||||
] = (
|
|
||||||
scu.ScoURL()
|
|
||||||
) # TODO set auth page URL ? (shared by all departments) ../auth/login
|
|
||||||
|
|
||||||
txt = (
|
txt = (
|
||||||
"""
|
"""
|
||||||
Bonjour %(prenom)s %(nom)s,
|
Bonjour %(prenom)s %(nom)s,
|
||||||
|
|
||||||
"""
|
"""
|
||||||
% u
|
% user
|
||||||
)
|
)
|
||||||
if reset:
|
if reset:
|
||||||
txt += (
|
txt += (
|
||||||
@ -285,10 +274,10 @@ votre mot de passe ScoDoc a été ré-initialisé.
|
|||||||
Le nouveau mot de passe est: %(passwd)s
|
Le nouveau mot de passe est: %(passwd)s
|
||||||
Votre nom d'utilisateur est %(user_name)s
|
Votre nom d'utilisateur est %(user_name)s
|
||||||
|
|
||||||
Vous devrez changer ce mot de passe lors de votre première connexion
|
Vous devrez changer ce mot de passe lors de votre première connexion
|
||||||
sur %(url)s
|
sur %(url)s
|
||||||
"""
|
"""
|
||||||
% u
|
% user
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
txt += (
|
txt += (
|
||||||
@ -303,13 +292,13 @@ Le logiciel est accessible sur: %(url)s
|
|||||||
Vous êtes invité à changer ce mot de passe au plus vite (cliquez sur
|
Vous êtes invité à changer ce mot de passe au plus vite (cliquez sur
|
||||||
votre nom en haut à gauche de la page d'accueil).
|
votre nom en haut à gauche de la page d'accueil).
|
||||||
"""
|
"""
|
||||||
% u
|
% user
|
||||||
)
|
)
|
||||||
|
|
||||||
txt += (
|
txt += (
|
||||||
"""
|
"""
|
||||||
|
|
||||||
ScoDoc est un logiciel libre développé à l'Université Paris 13 par Emmanuel Viennet.
|
ScoDoc est un logiciel libre développé par Emmanuel Viennet et l'association ScoDoc.
|
||||||
Pour plus d'informations sur ce logiciel, voir %s
|
Pour plus d'informations sur ce logiciel, voir %s
|
||||||
|
|
||||||
"""
|
"""
|
||||||
@ -321,4 +310,4 @@ Pour plus d'informations sur ce logiciel, voir %s
|
|||||||
else:
|
else:
|
||||||
subject = "Votre accès ScoDoc"
|
subject = "Votre accès ScoDoc"
|
||||||
sender = sco_preferences.get_preference("email_from_addr")
|
sender = sco_preferences.get_preference("email_from_addr")
|
||||||
email.send_email(subject, sender, [u["email"]], txt)
|
email.send_email(subject, sender, [user["email"]], txt)
|
||||||
|
@ -400,9 +400,11 @@ def check_modif_user(
|
|||||||
returns (ok, msg)
|
returns (ok, msg)
|
||||||
- ok : si vrai, peut continuer avec ces parametres
|
- ok : si vrai, peut continuer avec ces parametres
|
||||||
(si ok est faux, l'utilisateur peut quand même forcer la creation)
|
(si ok est faux, l'utilisateur peut quand même forcer la creation)
|
||||||
- msg: message warning a presenter l'utilisateur
|
- msg: message warning à presenter à l'utilisateur
|
||||||
"""
|
"""
|
||||||
MSG_OPT = """Attention: %s (vous pouvez forcer l'opération en cochant "<em>Ignorer les avertissements</em>" en bas de page)"""
|
MSG_OPT = """
|
||||||
|
(vous pouvez forcer l'opération en cochant "<em>Ignorer les avertissements</em>" en bas de page)
|
||||||
|
"""
|
||||||
# ce login existe ?
|
# ce login existe ?
|
||||||
user = _user_list(user_name)
|
user = _user_list(user_name)
|
||||||
if edit and not user: # safety net, le user_name ne devrait pas changer
|
if edit and not user: # safety net, le user_name ne devrait pas changer
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# -*- mode: python -*-
|
# -*- mode: python -*-
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
SCOVERSION = "9.0.52"
|
SCOVERSION = "9.0.53"
|
||||||
|
|
||||||
SCONAME = "ScoDoc"
|
SCONAME = "ScoDoc"
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user