@@ -27,7 +27,7 @@ def __init__(self, app, handler, mail):
27
27
28
28
# send mail
29
29
app .add_url_rule (
30
- '/%s/<int:id>/sendmail' % self .base_route , 'sendmail_%s' % self .endpoint_suffix , self .sendmail ,
30
+ '/%s/<int:id>/sendmail' % self .base_route , 'sendmail_%s' % self .endpoint_suffix , self .reset_password_send_invite ,
31
31
methods = ['GET' ]
32
32
)
33
33
@@ -121,13 +121,22 @@ def create_or_update_resources(self, resource, form, session):
121
121
# update existing user
122
122
user = resource
123
123
124
+ set_random_password_send_invite = form .set_random_password_send_invite .data
125
+
124
126
# update user
125
127
user .name = form .name .data
126
128
user .description = form .description .data
127
129
user .email = form .email .data
128
- if form .password .data :
129
- user .set_password (form .password .data )
130
- user .force_password_change = form .force_password_change .data
130
+
131
+ if not set_random_password_send_invite :
132
+ if form .password .data :
133
+ user .set_password (form .password .data )
134
+ user .force_password_change = form .force_password_change .data
135
+ else :
136
+ password = secrets .token_urlsafe (8 ).replace ('-' ,'0' )
137
+ user .set_password (password )
138
+ user .force_password_change = True
139
+
131
140
user .failed_sign_in_count = form .failed_sign_in_count .data or 0
132
141
133
142
totp_enabled = self .handler ().config ().get (
@@ -169,8 +178,11 @@ def create_or_update_resources(self, resource, form, session):
169
178
user .roles_collection , form .roles , self .Role , 'id' , session
170
179
)
171
180
172
- def sendmail (self , id ):
173
- """Send mail with access link.
181
+ if set_random_password_send_invite :
182
+ self .send_invite (user , password )
183
+
184
+ def reset_password_send_invite (self , id ):
185
+ """Resets the password and sends mail with access link.
174
186
175
187
:param int id: User ID
176
188
"""
@@ -197,46 +209,53 @@ def sendmail(self, id):
197
209
user .set_password (password )
198
210
user .force_password_change = True
199
211
200
- app_name = self .handler ().config ().get ("application_name" , "QWC" )
201
- app_url = self .handler ().config ().get ("application_url" ,
202
- os .path .dirname (url_for ('home' , _external = True ).rstrip ("/" )) + "/"
203
- )
212
+ self .send_invite (user , password )
204
213
205
- locale = os .environ .get ('DEFAULT_LOCALE' , 'en' )
206
- try :
207
- body = render_template (
208
- '%s/invite_email_body.%s.txt' % (self .templates_dir , locale ),
209
- user = user , password = password , app_name = app_name , app_url = app_url
210
- )
211
- except :
212
- body = render_template (
213
- '%s/invite_email_body.en.txt' % (self .templates_dir ),
214
- user = user , password = password , app_name = app_name , app_url = app_url
215
- )
214
+ return redirect (url_for (self .base_route ))
216
215
217
- try :
218
- msg = Message (
219
- i18n ('interface.users.mail_subject' , [app_name ]),
220
- recipients = [user .email ]
221
- )
222
- # set message body from template
223
- msg .body = body
216
+ def send_invite (self , user , password ):
217
+ """Sends mail with access link.
224
218
225
- # send message
226
- self .logger .debug (msg )
227
- self .mail .send (msg )
228
- flash (
229
- i18n ('interface.users.send_mail_success' ),
230
- 'success'
231
- )
232
- except Exception as e :
233
- self .logger .error (
234
- "Could not send mail to user '%s':\n %s" %
235
- (user .email , e )
236
- )
237
- flash (
238
- i18n ('interface.users.send_mail_failure' ),
239
- 'error'
240
- )
219
+ :param obj user: The user resource
220
+ """
221
+ app_name = self .handler ().config ().get ("application_name" , "QWC" )
222
+ app_url = self .handler ().config ().get ("application_url" ,
223
+ os .path .dirname (url_for ('home' , _external = True ).rstrip ("/" )) + "/"
224
+ )
241
225
242
- return redirect (url_for (self .base_route ))
226
+ locale = os .environ .get ('DEFAULT_LOCALE' , 'en' )
227
+ try :
228
+ body = render_template (
229
+ '%s/invite_email_body.%s.txt' % (self .templates_dir , locale ),
230
+ user = user , password = password , app_name = app_name , app_url = app_url
231
+ )
232
+ except :
233
+ body = render_template (
234
+ '%s/invite_email_body.en.txt' % (self .templates_dir ),
235
+ user = user , password = password , app_name = app_name , app_url = app_url
236
+ )
237
+
238
+ try :
239
+ msg = Message (
240
+ i18n ('interface.users.mail_subject' , [app_name ]),
241
+ recipients = [user .email ]
242
+ )
243
+ # set message body from template
244
+ msg .body = body
245
+
246
+ # send message
247
+ self .logger .debug (msg )
248
+ self .mail .send (msg )
249
+ flash (
250
+ i18n ('interface.users.send_mail_success' ),
251
+ 'success'
252
+ )
253
+ except Exception as e :
254
+ self .logger .error (
255
+ "Could not send mail to user '%s':\n %s" %
256
+ (user .email , e )
257
+ )
258
+ flash (
259
+ i18n ('interface.users.send_mail_failure' ),
260
+ 'error'
261
+ )
0 commit comments