1 # -*- coding: utf-8 -*-
8 from django
.utils
.encoding
import smart_str
9 from django
.contrib
.auth
.models
import User
11 from django_exportateur
.exportateur
import exportateur
14 def get_django_user_for_email(email
):
15 """Retourne un utilisateur Django avec le courriel donné.
17 S'il y a déjà un utilisateur avec ce courriel, on s'assure qu'il est activé.
19 Sinon, on crée un nouvel utilisateur."""
20 candidates
= User
.objects
.filter(email
=email
)
21 if candidates
.count() > 0:
23 if not user
.is_active
:
27 username
= email
.split('@')[0]
28 username
= re
.sub('\W', '_', username
)[:30]
30 while User
.objects
.filter(username
=username
).count() > 0:
32 username
= username
[:30-len(suffix
)] + suffix
34 # XXX: possible race condition here...
35 user
= User
.objects
.create_user(username
, email
)
39 def export(queryset
, type):
40 from chercheurs
.models
import These
42 if queryset
.count() == 0:
45 headers
= ['Nom', 'Prénom', 'Genre', 'Courriel', 'Téléphone', 'Adresse postale',
46 'Statut', 'Diplôme', 'Établissement', 'Pays', 'Domaines de recherche',
47 'Thèse', 'Directeur', 'Discipline', 'Thèmes de recherche', 'Équipe de recherche', 'Mots-clés',
48 'Site web', 'Blog', 'Réseau social',
49 'Membre instance AUF', "Sollicité par l'OIF", 'Membre société francophone',
50 'Membre instance réseau institutionnel AUF', 'Expertises', 'Solliciter pour expertises',
57 row
.append(c
.get_genre_display())
58 row
.append(c
.courriel
)
59 row
.append(c
.telephone
)
60 row
.append(c
.adresse_postale
)
61 row
.append(c
.get_statut_display())
63 row
.append(c
.nom_etablissement
)
65 row
.append(', '.join(g
.nom
for g
in c
.groupes
.all()))
68 row
.append('%s, %s, %s, %s pages.' % (t
.titre
, t
.etablissement
, t
.annee
, t
.nb_pages
))
69 row
.append(t
.directeur
)
70 except These
.DoesNotExist
:
73 row
.append(c
.discipline
.nom
if c
.discipline
else '')
74 row
.append(c
.theme_recherche
)
75 row
.append(c
.equipe_recherche
)
76 row
.append(c
.mots_cles
)
77 row
.append(c
.url_site_web
)
78 row
.append(c
.url_blog
)
79 row
.append(c
.url_reseau_social
)
80 if c
.membre_instance_auf
:
81 row
.append(', '.join([c
.membre_instance_auf_nom
, c
.membre_instance_auf_fonction
, c
.membre_instance_auf_dates
]))
85 row
.append(', '.join([c
.expert_oif_details
, c
.expert_oif_dates
]))
88 if c
.membre_association_francophone
:
89 row
.append(c
.membre_association_francophone_details
)
92 if c
.membre_reseau_institutionnel
:
93 row
.append(', '.join([c
.membre_reseau_institutionnel_nom
, c
.membre_reseau_institutionnel_fonction
, c
.membre_reseau_institutionnel_dates
]))
96 row
.append('; '.join(', '.join([e
.nom
, e
.date
, e
.organisme_demandeur
]) for e
in c
.expertises
.all()))
97 if c
.expertises_auf
is None:
100 row
.append('Oui' if c
.expertises_auf
else 'Non')
101 row
.append('; '.join(p
.publication_affichage
if p
.publication_affichage
else
102 '%s, %s, %s, %s, %s, %s, %s pages.' %
103 (p
.auteurs
, p
.titre
, p
.revue
, p
.annee
, p
.editeur
, p
.lieu_edition
, p
.nb_pages
)
104 for p
in c
.publications
.all()))
105 data
.append([smart_str(x
) if x
else '' for x
in row
])
106 return exportateur(headers
, data
, type, filename
='chercheurs.%s' % type)
108 def create_ldap_hash(password
):
110 raw_hash
= hashlib
.sha1(password
.encode('utf-8') + salt
).digest()
111 ldap_hash
= '{SSHA}' + base64
.b64encode(raw_hash
+ salt
)
115 def check_ldap_hash(ldap_hash
, password
):
116 hash_salt
= base64
.b64decode(ldap_hash
[6:])
117 hash = hash_salt
[:-4]
118 salt
= hash_salt
[-4:]
119 test
= hashlib
.sha1(password
.encode('utf-8') + salt
).digest()