From ff70f7848edae61a3c966a0fe320f5d28d39b701 Mon Sep 17 00:00:00 2001
From: Martin Mares <mj@ucw.cz>
Date: Tue, 30 Nov 2021 18:32:54 +0100
Subject: [PATCH] =?UTF-8?q?Spr=C3=A1vc=C5=AFm=20nen=C3=AD=20mo=C5=BEn?=
 =?UTF-8?q?=C3=A9=20resetovat=20heslo?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

To mimo jiné znamená, že nelze resetovat heslo systémovému uživateli.
---
 mo/users.py    |  1 +
 mo/web/acct.py | 15 +++++++++------
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/mo/users.py b/mo/users.py
index 32c858ce..f5fe5642 100644
--- a/mo/users.py
+++ b/mo/users.py
@@ -286,6 +286,7 @@ def expire_reg_requests():
 
 def request_reset_password(user: db.User, client: str) -> Optional[db.RegRequest]:
     logger.info('Login: Požadavek na reset hesla pro <%s>', user.email)
+    assert not user.is_admin
     rr = new_reg_request(db.RegReqType.reset_passwd, client)
     if rr:
         db.get_session().add(rr)
diff --git a/mo/web/acct.py b/mo/web/acct.py
index 4cb0451f..214da32d 100644
--- a/mo/web/acct.py
+++ b/mo/web/acct.py
@@ -61,13 +61,16 @@ def login():
         app.logger.error('Login: Neznámý uživatel <%s>', email)
         flash('Neznámý uživatel', 'danger')
     elif form.reset.data:
-        rr = mo.users.request_reset_password(user, request.remote_addr)
-        if rr:
-            db.get_session().commit()
-            mo.email.send_password_reset_email(user, rr.email_token)
-            flash('Na uvedenou adresu byl odeslán e-mail s odkazem na obnovu hesla.', 'success')
+        if user.is_admin:
+            flash('Obnova hesla účtu správce není možná.', 'danger')
         else:
-            flash('Příliš časté požadavky na obnovu hesla.', 'danger')
+            rr = mo.users.request_reset_password(user, request.remote_addr)
+            if rr:
+                db.get_session().commit()
+                mo.email.send_password_reset_email(user, rr.email_token)
+                flash('Na uvedenou adresu byl odeslán e-mail s odkazem na obnovu hesla.', 'success')
+            else:
+                flash('Příliš časté požadavky na obnovu hesla.', 'danger')
     elif not form.passwd.data or not mo.users.check_password(user, form.passwd.data):
         app.logger.error('Login: Špatné heslo pro uživatele <%s>', email)
         flash('Chybné heslo', 'danger')
-- 
GitLab