-
Notifications
You must be signed in to change notification settings - Fork 8
/
init_accounts.py
349 lines (269 loc) · 12.1 KB
/
init_accounts.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
#!/usr/bin/env python
import sys
import os
dirname = os.path.dirname(os.path.realpath(__file__))
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "gargantext.settings")
# initialize Django application
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
from django.contrib.auth import password_validation
from django.contrib.auth.hashers import ( check_password
, is_password_usable
, make_password
)
from django.db import models
from django.utils.crypto import get_random_string, salted_hmac
# retrieve Django models
import django.apps
django_models = django.apps.apps.get_models()
django_models_names = set(model._meta.db_table for model in django_models)
from gargantext.util.db import session
from gargantext.models.users import User, Contact
from django.core.mail import send_mail
from gargantext.settings import BASE_URL
drafts = {
'partnerOkenglish': '''
Hello,
You have made a request for access to the platform Gargantext.
The ISC-PIF team has made every effort to Give you access to
this platform in the best Time.
We recommend that you read the conditions To use the platform
at the address below Drawing your attention to the following
points:
1 - The use of this platform is reserved for an academic
framework,
2 - The Gargantext service is a data analysis service, And not
storage. It is up to each user To safeguard its own data and
results in Downloading them from the platform.
3 - The re-use of data, graphics, analyzes and Cartographies
generated by Gargantext in any publication And communication
implies the explicit mention of Gargantext and Of the ISC-PIF
CNRS as for example: "these results have been Obtained using
Gargantext software developed by ISC-PIF / CNRS ".
Read the full terms of use (recommended) on:
http://gitlab.iscpif.fr/humanities/tofu/tree/master
You can log on to:
http://%s
With the following identifiers:
Your login is: %s
Your password is: %s
You are currently on this version stabilized for a
unique experience in exploring your research themes.
Your feedback will be valuable for further development
of the platform, do not hesitate to contact us and
to contribute on our forum:
https://discourse.iscpif.fr/c/gargantext
We remain at your disposal for any further information and you be
kept updated if you subscribe to our mailing-list:
https://phplist.iscpif.fr/?p=subscribe&id=4
With our best regards,
--
The Gargantext Team (CNRS)
''',
'partnerOk' : '''
Bonjour,
Vous avez fait une demande d'accès à la plate-forme
Gargantext. L'équipe de l'ISC-PIF a tout mis en œuvre pour
vous donner accès à cette plate-forme dans les meilleurs
délais.
Nous vous recommendons de prendre connaissance des conditions
d'utilisation de la plate-forme à l'adresse ci-dessous en
attirant votre attention sur les points suivants :
1 - L'usage de cette plate-forme est réservé à un cadre académique,
2 - Le service Gargantext est un service d'analyse de données,
et non de stockage. Il appartient à chaque utilisateur
d'assurer la sauvegarde de ses propres données et résultats en
les téléchargeant à partir de la plate-forme.
3 - La réutilisation des données, graphiques, analyses et
cartographies générés par Gargantext dans toute publication
et communication suppose la mention explicite de Gargantext et
de l'ISC-PIF CNRS comme par exemple : "ces résultats ont été
obtenus à l'aide de du logiciel Gargantext développé par
ISC-PIF/CNRS".
Lire l'intégralité des conditions d'utilisation (recommandé) sur :
http://gitlab.iscpif.fr/humanities/tofu/tree/master
Vous pouvez vous connecter à l'adresse:
http://%s
Avec les identifiants suivants:
Votre login est: %s
Votre mot de passe est : %s
Vous êtes actuellement sur cette version stabilisée pour une
expérience unique dans l'exploration de vos thèmes de recherche.
Vos retours seront précieux pour poursuivre le développement
de la plateforme, n'hésitez pas à nous contacter et
contribuer sur notre forum:
https://discourse.iscpif.fr/c/gargantext
Nous restons à votre disposition pour tout complément
d'information et vous serez informés de l'évolution des
services en vous inscrivant à la liste:
https://phplist.iscpif.fr/?p=subscribe&id=4
Cordialement
--
L'équipe de Gargantext (CNRS)
'''
,
'partnerKo' : '''
Bonjour,
Vous venez de faire une demande d'accès à la plate-forme
Gargantext, développée et hébergée grâce au soutien du CNRS
et des partenaires de l'ISC-PIF. L'équipe de l'ISC-PIF a tout
mis en œuvre pour vous donner accès à cette plate-forme dans
les meilleurs délais.
Cette plate-forme étant accessible en priorité au personnel
des établissements partenaires de l'ISC-PIF, nous vous
proposons un accès pour une durée de 3 mois afin que vous
puissiez explorer les possibilités de Gargantext. S'il s'avère
que cette plateforme correspond à vos besoins, vous pourrez
vous prendre contact avec le service partenariat de l'ISC-PIF
([email protected]) pour étudier une adhésion de votre
établissement à l'ISC-PIF ou bien vous rapprocher de votre
établissement afin qu'il déploie une instance de Gargantext.
Nous vous invitons à prendre connaissance des conditions
d'utilisation de la plate-forme à l'adresse ci-dessous en
attirant votre attention sur les points suivants :
1 - L'usage de cette plate-forme est réservé à un cadre académique,
2 - Le service Gargantext est un service d'analyse de données,
et non de stockage. Il appartient à chaque utilisateur
d'assurer la sauvegarde de ses propres données et résultats en
les téléchargeant à partir de la plate-forme.
3 - La réutilisation des données, graphiques, analyses et
cartographies générés par Gargantext dans toute publication
et communication suppose la mention explicite de Gargantext et
de l'ISC-PIF CNRS comme par exemple : "ces résultats ont été
obtenus à l'aide de du logiciel Gargantext développé par
ISC-PIF/CNRS".
Lire l'intégralité des conditions d'utilisation (recommandé) sur :
http://gitlab.iscpif.fr/humanities/tofu/tree/master
Vous pouvez donc vous connecter à l'adresse:
http://%s
Avec les identifiants suivants:
Votre login est: %s
Votre mot de passe est : %s
Vous êtes actuellement sur cette version stabilisée pour une
expérience unique dans l'exploration de vos thèmes de recherche.
Vos retours seront précieux pour poursuivre le développement
de la plateforme, n'hésitez pas à nous contacter et
contribuer sur notre forum:
https://discourse.iscpif.fr/c/gargantext
Nous restons à votre disposition pour tout complément
d'information et vous serez informés de l'évolution des
services en vous inscrivant à la liste:
https://phplist.iscpif.fr/?p=subscribe&id=4
Cordialement
--
L'équipe de Gargantext (CNRS)
''' ,
}
def make_random_password(length=10
, allowed_chars='abcdefghjkmnpqrstuvwxyz'
'ABCDEFGHJKLMNPQRSTUVWXYZ'
'0123456789'):
"""
Generate a random password with the given length and given
allowed_chars. The default value of allowed_chars does not have "I" or
"O" or letters and digits that look similar -- just to avoid confusion.
(source: django/contrib/auth)
"""
return get_random_string(length, allowed_chars)
def mail2user(username, email, password, draft):
send_mail ('[Gargantext] Votre accès à la plateforme'
, draft % (BASE_URL, username, password)
, [email]
, fail_silently=False
)
def block(user1_id, user2_id, bool_):
'''
user_group :: Int -> Int -> Bool
Link between user1 and user2
If False:
link blocked
else:
link not blocked
'''
contact = Contact()
contact.user1_id = user1_id
contact.user2_id = user2_id
contact.is_blocked = bool_
session.add(contact)
session.commit()
return contact
def create_user(username, email, user=None, password=None, group=None, notify=False):
'''
create_user :
- create user
- create its group if needed
- create relation between user and its group
'''
if user is None:
user = User()
user.username = username
user.email = email
user.is_active = True
# Creating the password
if password is None or len(password) < 3 :
password = make_random_password()
user.password = make_password(password)
session.add(user)
session.commit()
if group is not None :
# get or create group_iscpif
group_iscpif_id = session.query(User.id).filter(User.username=="group_iscpif").first()
if group_iscpif_id is None:
group_iscpif = create_user("group_iscpif", "[email protected]", group=None, notify=False)
group_iscpif_id = group_iscpif.id
if group == "group_iscpif":
block (user.id, group_iscpif_id, False)
else:
block (user.id, group_iscpif_id, True)
if notify == True and group == "group_iscpif" :
mail2user (username, email, password, drafts['partnerOk'])
elif notify == True :
mail2user (username, email, password, drafts['partnerKo'])
else:
print("User %s created, no notification" % username)
return user
def del_user(username):
'''
del_user :: String -> ()
'''
print("Test is True, deleting username %s" % username)
session.query(User).filter(User.username == username).delete()
def active_user(username, bool_=True):
'''
active_user :: String -> Maybe Bool -> ()
if bool_ == True:
user is active
else:
user is not active
'''
user = session.query(User).filter(User.username == username).first()
user.is_active = bool_
user.save()
def mass_account_creation(csv_file=None, init=False, test=False, notify=False):
'''
CSV file as parameter:
if partner:
username,[email protected],group_iscpif,password,
else:
username,[email protected],group_others,password,
'''
accounts = open(csv_file, "r")
for line in accounts.readlines():
username, email, group, password, end = line.split(',')
user = session.query(User).filter(User.username == username).first()
if user is not None:
if init == True:
create_user(username, email, user=user, group=group, password=password, notify=notify)
print("User %s exists and updated" % (username))
else:
print("User %s exists and not updated" % (username))
else:
create_user(username, email, group=group, password=password, notify=notify)
print("User %s is created" % (username))
if test==True:
del_user(username)
del_user(group)
accounts.close()
if __name__ == "__main__":
mass_account_creation(csv_file=sys.argv[1], init=False, notify=True, test=False)