Date: Mon, 8 Jul 2019 11:00:49 +0200
Subject: [PATCH 5/6] Add e-mail templates for password reset request.
---
app/templates/auth/email/reset_password.html | 8 ++++++++
app/templates/auth/email/reset_password.txt | 13 +++++++++++++
2 files changed, 21 insertions(+)
create mode 100644 app/templates/auth/email/reset_password.html
create mode 100644 app/templates/auth/email/reset_password.txt
diff --git a/app/templates/auth/email/reset_password.html b/app/templates/auth/email/reset_password.html
new file mode 100644
index 00000000..5b58a220
--- /dev/null
+++ b/app/templates/auth/email/reset_password.html
@@ -0,0 +1,8 @@
+Dear {{ user.username }},
+To reset your password click here.
+Alternatively, you can paste the following link in your browser's address bar:
+{{ url_for('auth.password_reset', token=token, _external=True) }}
+If you have not requested a password reset simply ignore this message.
+Sincerely,
+The Opaque Team
+Note: replies to this email address are not monitored.
diff --git a/app/templates/auth/email/reset_password.txt b/app/templates/auth/email/reset_password.txt
new file mode 100644
index 00000000..cecc5a24
--- /dev/null
+++ b/app/templates/auth/email/reset_password.txt
@@ -0,0 +1,13 @@
+Dear {{ user.username }},
+
+To reset your password click on the following link:
+
+{{ url_for('auth.password_reset', token=token, _external=True) }}
+
+If you have not requested a password reset simply ignore this message.
+
+Sincerely,
+
+The Opaque Team
+
+Note: replies to this email address are not monitored.
From dd4fcdfe208c22db290cfabd29bf8c42698c11e4 Mon Sep 17 00:00:00 2001
From: Patrick Jentsch
Date: Mon, 8 Jul 2019 11:04:52 +0200
Subject: [PATCH 6/6] Add password reset request view.
---
app/auth/views.py | 18 +++++++++++++++++-
1 file changed, 17 insertions(+), 1 deletion(-)
diff --git a/app/auth/views.py b/app/auth/views.py
index 5eef5868..b2e6ba68 100644
--- a/app/auth/views.py
+++ b/app/auth/views.py
@@ -1,7 +1,8 @@
from flask import flash, redirect, render_template, request, url_for
from flask_login import login_required, login_user, logout_user
from . import auth
-from .forms import LoginForm
+from .forms import LoginForm, PasswordResetRequestForm
+from ..email import send_email
from ..models import User
@@ -31,3 +32,18 @@ def logout():
@auth.route('/register', methods=['GET', 'POST'])
def register():
return render_template('auth/register.html.j2')
+
+
+@auth.route('/reset', methods=['GET', 'POST'])
+def password_reset_request():
+ form = PasswordResetRequestForm()
+ if form.validate_on_submit():
+ user = User.query.filter_by(email=form.email.data.lower()).first()
+ if user:
+ token = user.generate_reset_token()
+ send_email(user.email, 'Reset Your Password',
+ 'auth/email/reset_password',
+ user=user, token=token)
+ flash('An email with instructions to reset your password has been '
+ 'sent to you.')
+ return redirect(url_for('auth.login'))