From 3b6c9f22dd1de6a7435c36e1bd737cf4cf8c7af3 Mon Sep 17 00:00:00 2001 From: Stephan Porada Date: Mon, 8 Jul 2019 16:09:00 +0200 Subject: [PATCH] Add email confirmation for nuew users --- app/templates/auth/email/confirm.html.j2 | 8 ++++++++ app/templates/auth/email/confirm.txt.j2 | 11 ++++++++++ tests/test_user_model.py | 26 ++++++++++++++++++++++++ 3 files changed, 45 insertions(+) create mode 100644 app/templates/auth/email/confirm.html.j2 create mode 100644 app/templates/auth/email/confirm.txt.j2 diff --git a/app/templates/auth/email/confirm.html.j2 b/app/templates/auth/email/confirm.html.j2 new file mode 100644 index 00000000..599c4787 --- /dev/null +++ b/app/templates/auth/email/confirm.html.j2 @@ -0,0 +1,8 @@ +

Dear {{ user.username }},

+

Welcome to Opaque!

+

To confirm your account please click here.

+

Alternatively, you can paste the following link in your browser's address bar:

+

{{ url_for('auth.confirm', token=token, _external=True) }}

+

Sincerely,

+

The Opaque Team

+

Note: replies to this email address are not monitored.

diff --git a/app/templates/auth/email/confirm.txt.j2 b/app/templates/auth/email/confirm.txt.j2 new file mode 100644 index 00000000..5ba0670b --- /dev/null +++ b/app/templates/auth/email/confirm.txt.j2 @@ -0,0 +1,11 @@ +Dear {{ user.username }}, + +Welcome to Opaque! + +To confirm your account please click on the following link: +{{ url_for('auth.confirm', token=token, _external=True) }} + +Sincerely, +The Opaque Team + +Note: replies to this email address are not monitored. diff --git a/tests/test_user_model.py b/tests/test_user_model.py index 3c794b0b..b7d08147 100644 --- a/tests/test_user_model.py +++ b/tests/test_user_model.py @@ -1,5 +1,7 @@ import unittest +import time from app.models import User +from app import db class UserModelTestCase(unittest.TestCase): @@ -21,3 +23,27 @@ class UserModelTestCase(unittest.TestCase): u = User(password='cat') u2 = User(password='cat') self.assertTrue(u.password_hash != u2.password_hash) + + def test_valid_confirmation_token(self): + u = User(password='cat') + db.session.add(u) + db.session.commit() + token = u.generate_confirmation_token() + self.assertTrue(u.confirm(token)) + + def test_invalid_confirmation_token(self): + u1 = User(password='cat') + u2 = User(password='dog') + db.session.add(u1) + db.session.add(u2) + db.session.commit() + token = u1.generate_confirmation_token() + self.assertFalse(u2.confirm(token)) + + def test_expired_confirmation_token(self): + u = User(password='cat') + db.session.add(u) + db.session.commit() + token = u.generate_confirmation_token(1) + time.sleep(2) + self.assertFalse(u.confirm(token))