From e5b787213dc62007dd22b143104e3c4f9175f9a5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mateusz=20Gruszczy=C5=84ski?=
 <mateusz.gruszczynski@firma.interia.pl>
Date: Mon, 24 Feb 2025 11:31:50 +0100
Subject: [PATCH] new options and functions

---
 app.py                   | 12 ++++++++----
 templates/all_files.html | 12 ++++++++----
 templates/settings.html  |  5 +++++
 3 files changed, 21 insertions(+), 8 deletions(-)

diff --git a/app.py b/app.py
index a4374d6..ad79080 100644
--- a/app.py
+++ b/app.py
@@ -113,6 +113,7 @@ class GlobalSettings(db.Model):
     smtp_password = db.Column(db.String(255), nullable=True)
     smtp_notifications_enabled = db.Column(db.Boolean, default=False)
     log_retention_days = db.Column(db.Integer, default=7)
+    recipient_email = db.Column(db.String(255), nullable=True)
 
 ###############################################################################
 # Inicjalizacja bazy
@@ -462,12 +463,13 @@ def notify(settings: GlobalSettings, message: str, success: bool):
             settings.smtp_login and settings.smtp_login.strip() and
             settings.smtp_password and settings.smtp_password.strip()):
             try:
+                to_address = settings.recipient_email.strip() if settings.recipient_email and settings.recipient_email.strip() else settings.smtp_login.strip()
                 send_mail_with_attachment(
                     smtp_host=settings.smtp_host.strip(),
                     smtp_port=settings.smtp_port,
                     smtp_user=settings.smtp_login.strip(),
                     smtp_pass=settings.smtp_password.strip(),
-                    to_address=settings.smtp_login.strip(),
+                    to_address=to_address,
                     subject="RouterOS Backup Notification",
                     plain_body=message
                 )
@@ -1028,7 +1030,6 @@ def diff_selector():
 def all_files():
     user = get_current_user()
     query = Backup.query.join(Router).filter(Router.owner_id == user.id)
-    
     # Filtrowanie – wyszukiwanie po nazwie pliku (zastosowanie filtru "basename")
     search = request.args.get('search', '')
     if search:
@@ -1136,8 +1137,9 @@ def settings_view():
         s.smtp_port = int(request.form.get('smtp_port', '587'))
         s.smtp_login = request.form.get('smtp_login', '')
         s.smtp_password = request.form.get('smtp_password', '')
+        s.recipient_email = request.form.get('recipient_email', '')
         db.session.commit()
-        reschedule_jobs()  # Aktualizacja zadań – zadania dotyczące backupu/CRON zostaną teraz sterowane z /advanced_schedule
+        #reschedule_jobs()  # Aktualizacja zadań – zadania dotyczące backupu/CRON zostaną teraz sterowane z /advanced_schedule
         flash("Zapisano ustawienia.")
         return redirect(url_for('settings_view'))
     return render_template('settings.html', settings=s)
@@ -1405,12 +1407,14 @@ def test_email():
         return redirect(url_for('settings_view'))
     subject = "Testowy e-mail z RouterOS Backup"
     body = "To jest testowa wiadomość e-mail wysłana z systemu RouterOS Backup."
+    # Używamy recipient_email, jeśli jest ustawiony, w przeciwnym razie smtp_login
+    to_address = s.recipient_email.strip() if s.recipient_email and s.recipient_email.strip() else s.smtp_login.strip()
     success = send_mail_with_attachment(
         smtp_host=s.smtp_host,
         smtp_port=s.smtp_port,
         smtp_user=s.smtp_login,
         smtp_pass=s.smtp_password,
-        to_address=s.smtp_login,
+        to_address=to_address,
         subject=subject,
         plain_body=body
     )
diff --git a/templates/all_files.html b/templates/all_files.html
index aa88a5d..acc3d94 100644
--- a/templates/all_files.html
+++ b/templates/all_files.html
@@ -63,7 +63,13 @@
                   <span class="badge bg-secondary">{{ file.backup_type }}</span>
                 {% endif %}
               </td>
-              <td>{{ file.file_path|basename }}</td>
+              <td>
+                {% if file.backup_type == 'binary' %}
+                  <span data-bs-toggle="tooltip" title="Checksum: {{ file.checksum }}">{{ file.file_path|basename }}</span>
+                {% else %}
+                  {{ file.file_path|basename }}
+                {% endif %}
+              </td>
               <td>{{ file.created_at.strftime("%Y-%m-%d %H:%M:%S") }}</td>
               <td>{{ file.file_path|filesize }}</td>
               <td>
@@ -130,9 +136,7 @@
 <script>
 document.getElementById('select_all').addEventListener('change', function(e) {
   var checkboxes = document.querySelectorAll('input[name="backup_id"]');
-  for (var i = 0; i < checkboxes.length; i++) {
-    checkboxes[i].checked = e.target.checked;
-  }
+  checkboxes.forEach(cb => cb.checked = e.target.checked);
 });
 </script>
 {% endblock %}
diff --git a/templates/settings.html b/templates/settings.html
index e0e92ca..11328e2 100644
--- a/templates/settings.html
+++ b/templates/settings.html
@@ -47,6 +47,11 @@
             <label for="smtp_password" class="form-label">SMTP Hasło</label>
             <input type="password" class="form-control" id="smtp_password" name="smtp_password" value="{{ settings.smtp_password }}">
           </div>
+          <!-- Nowe pole: docelowy adres e-mail -->
+          <div class="mb-3">
+            <label for="recipient_email" class="form-label">Adres e-mail docelowy</label>
+            <input type="email" class="form-control" id="recipient_email" name="recipient_email" value="{{ settings.recipient_email }}">
+          </div>
         </div>
         <hr>
         <!-- Sekcja globalnego klucza SSH -->