From c5fa65ad78e3983f5fbb907a935c5af5e1aa5892 Mon Sep 17 00:00:00 2001
From: Martin Mares <mj@ucw.cz>
Date: Wed, 7 Sep 2022 19:52:53 +0200
Subject: [PATCH] =?UTF-8?q?Hack=20pro=20p=C5=99ihla=C5=A1ov=C3=A1n=C3=AD?=
 =?UTF-8?q?=20testovac=C3=ADch=20u=C5=BEivatel=C5=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Úmyslně udělaný tak, aby i kdyby ho někdo omylem zapnul na produkčním
OSMO, stejně se na žádného existujícího uživatele nepůjde přihlásit.
---
 etc/config.py.example |  4 ++++
 mo/web/acct.py        | 18 ++++++++++++++++++
 2 files changed, 22 insertions(+)

diff --git a/etc/config.py.example b/etc/config.py.example
index c415a7ee..febe76a1 100644
--- a/etc/config.py.example
+++ b/etc/config.py.example
@@ -73,3 +73,7 @@ CURRENT_YEAR = 71
 MO_WEB_SERVER = 'http://localhost:5001'
 MO_WEB_LOGIN = 'matemaicky_hroch'
 MO_WEB_PASSWD = 'BrumBrum'
+
+# Povolení loginu bez hesla pro testovací uživatele (s adresou končící na @test).
+# Nezapínat mimo testovací prostředí! Bydlí na /test-login/<email>.
+#INSECURE_TEST_LOGIN = True
diff --git a/mo/web/acct.py b/mo/web/acct.py
index bf880e74..87311f26 100644
--- a/mo/web/acct.py
+++ b/mo/web/acct.py
@@ -659,3 +659,21 @@ def confirm_reset():
 @app.errorhandler(werkzeug.exceptions.Forbidden)
 def handle_forbidden(e):
     return render_template('forbidden.html'), 403
+
+
+if getattr(config, 'INSECURE_TEST_LOGIN', False):
+    @app.route('/test-login/<email>')
+    def test_login(email: str):
+        if not email.endswith('@test'):
+            app.logger.error('Test login: Uživatel <%s> nekončí na @test', email)
+            raise werkzeug.exceptions.NotFound()
+
+        user = mo.users.user_by_email(email)
+        if not user:
+            app.logger.error('Test login: Neznámý uživatel <%s>', email)
+            raise werkzeug.exceptions.Forbidden()
+
+        app.logger.info('Test login: Přihlásil se uživatel #%s <%s>', user.user_id, email)
+        mo.users.login(user)
+        db.get_session().commit()
+        return login_and_redirect(user)
-- 
GitLab