in django_airavata/apps/auth/views.py [0:0]
def reset_password(request, code):
try:
password_reset_request = models.PasswordResetRequest.objects.get(
reset_code=code)
except ObjectDoesNotExist:
messages.error(
request,
"Reset password link is invalid. Please try again.")
return redirect(reverse('django_airavata_auth:forgot_password'))
now = datetime.now(timezone.utc)
if now - password_reset_request.created_date > timedelta(days=1):
password_reset_request.delete()
messages.error(
request,
"Reset password link has expired. Please try again.")
return redirect(reverse('django_airavata_auth:forgot_password'))
if request.method == "POST":
form = forms.ResetPasswordForm(request.POST)
if form.is_valid():
try:
password = form.cleaned_data['password']
success = iam_admin_client.reset_user_password(
password_reset_request.username, password)
if not success:
messages.error(
request, "Failed to reset password. Please try again.")
return redirect(
reverse('django_airavata_auth:forgot_password'))
else:
password_reset_request.delete()
messages.success(
request,
"You may now log in with your new password.")
return redirect(
reverse('django_airavata_auth:login_with_password'))
except Exception as e:
logger.exception(
"Failed to reset password for user", exc_info=e, extra={'request': request})
form.add_error(None, ValidationError(str(e)))
else:
form = forms.ResetPasswordForm()
return render(request, 'django_airavata_auth/reset_password.html', {
'form': form,
'code': code
})