From 2bbe5cc9c3fe8c8a97352a88c3670e0a083e6375 Mon Sep 17 00:00:00 2001
From: dadav <33197631+dadav@users.noreply.github.com>
Date: Sat, 5 Oct 2019 11:19:53 +0200
Subject: [PATCH 1/2] Add auto-backup plugin

---
 sdcard/rootfs/root/pwnagotchi/config.yml      |  7 +++
 .../pwnagotchi/plugins/default/auto-backup.py | 63 +++++++++++++++++++
 2 files changed, 70 insertions(+)
 create mode 100644 sdcard/rootfs/root/pwnagotchi/scripts/pwnagotchi/plugins/default/auto-backup.py

diff --git a/sdcard/rootfs/root/pwnagotchi/config.yml b/sdcard/rootfs/root/pwnagotchi/config.yml
index ee91c79..33ea10f 100644
--- a/sdcard/rootfs/root/pwnagotchi/config.yml
+++ b/sdcard/rootfs/root/pwnagotchi/config.yml
@@ -6,6 +6,13 @@ main:
     custom_plugins:
     # which plugins to load and enable
     plugins:
+      auto-backup:
+        enabled: false
+        interval: 1 # every day
+        files:
+          - /root/brain.nn
+        backup_cmd: 'tar czf /tmp/backup.tar.gz {files}'
+        upload_cmd: 'scp /tmp/backup.tar.gz 10.0.0.1:/backups/backup-$(date).tar.gz'
       gps:
         enabled: false
       twitter:
diff --git a/sdcard/rootfs/root/pwnagotchi/scripts/pwnagotchi/plugins/default/auto-backup.py b/sdcard/rootfs/root/pwnagotchi/scripts/pwnagotchi/plugins/default/auto-backup.py
new file mode 100644
index 0000000..348f841
--- /dev/null
+++ b/sdcard/rootfs/root/pwnagotchi/scripts/pwnagotchi/plugins/default/auto-backup.py
@@ -0,0 +1,63 @@
+__author__ = '33197631+dadav@users.noreply.github.com'
+__version__ = '1.0.0'
+__name__ = 'auto-backup'
+__license__ = 'GPL3'
+__description__ = 'This plugin backups files when internet is availaible.'
+
+import os
+import logging
+import subprocess
+from datetime import datetime
+
+OPTIONS = dict()
+LAST_BACKUP = None
+READY = False
+
+def on_loaded():
+    """
+    Gets called when the plugin gets loaded
+    """
+    global READY
+    global LAST_BACKUP
+
+    if 'files' not in OPTIONS or ('files' in OPTIONS and OPTIONS['files'] is None):
+        logging.error("AUTO-BACKUP: No files to backup.")
+        return
+
+    if 'interval' not in OPTIONS or ('interval' in OPTIONS and OPTIONS['interval'] is None):
+        logging.error("AUTO-BACKUP: Interval is not set.")
+        return
+
+    if 'backup_cmd' not in OPTIONS or ('backup_cmd' in OPTIONS and OPTIONS['backup_cmd'] is None):
+        logging.error("AUTO-BACKUP: No backup_cmd given.")
+        return
+
+    if os.path.exists('/root/.auto-backup'):
+        LAST_BACKUP = datetime.fromtimestamp(os.path.getmtime('/root/.auto-backup'))
+
+    READY = True
+
+
+def on_internet_available(display, config, log):
+    """
+    Called in manual mode when there's internet connectivity
+    """
+    global LAST_BACKUP
+
+    if READY:
+        if LAST_BACKUP is not None:
+            if (datetime.now() - LAST_BACKUP).days < OPTIONS['interval']:
+                return
+
+        files_to_backup = " ".join(OPTIONS['files'])
+        try:
+            subprocess.call(OPTIONS['backup_cmd'].format(files=files_to_backup).split(), stdout=open(os.devnull, 'wb'))
+            if 'upload_cmd' in OPTIONS and OPTIONS['upload_cmd'] is not None:
+                subprocess.call(OPTIONS['upload_cmd'].split(), stdout=open(os.devnull, 'wb'))
+            logging.info("AUTO-BACKUP: Successfuly ran backup commands.")
+            LAST_BACKUP = datetime.now()
+            with open('/root/.auto-backup', 'w') as f:
+                f.write('success')
+        except OSError as os_e:
+            logging.info(f"AUTO-BACKUP: Error: {os_e}")
+

From 7db7874d8e1a1aef80320e70ebed43610a305f5b Mon Sep 17 00:00:00 2001
From: dadav <33197631+dadav@users.noreply.github.com>
Date: Sat, 5 Oct 2019 11:32:54 +0200
Subject: [PATCH 2/2] More general variable

---
 sdcard/rootfs/root/pwnagotchi/config.yml                 | 5 +++--
 .../scripts/pwnagotchi/plugins/default/auto-backup.py    | 9 ++++-----
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/sdcard/rootfs/root/pwnagotchi/config.yml b/sdcard/rootfs/root/pwnagotchi/config.yml
index 33ea10f..24bcdb7 100644
--- a/sdcard/rootfs/root/pwnagotchi/config.yml
+++ b/sdcard/rootfs/root/pwnagotchi/config.yml
@@ -11,8 +11,9 @@ main:
         interval: 1 # every day
         files:
           - /root/brain.nn
-        backup_cmd: 'tar czf /tmp/backup.tar.gz {files}'
-        upload_cmd: 'scp /tmp/backup.tar.gz 10.0.0.1:/backups/backup-$(date).tar.gz'
+        commands:
+          - 'tar czf /tmp/backup.tar.gz {files}'
+          - 'scp /tmp/backup.tar.gz 10.0.0.1:/backups/backup-$(date).tar.gz'
       gps:
         enabled: false
       twitter:
diff --git a/sdcard/rootfs/root/pwnagotchi/scripts/pwnagotchi/plugins/default/auto-backup.py b/sdcard/rootfs/root/pwnagotchi/scripts/pwnagotchi/plugins/default/auto-backup.py
index 348f841..1e4acb9 100644
--- a/sdcard/rootfs/root/pwnagotchi/scripts/pwnagotchi/plugins/default/auto-backup.py
+++ b/sdcard/rootfs/root/pwnagotchi/scripts/pwnagotchi/plugins/default/auto-backup.py
@@ -28,8 +28,8 @@ def on_loaded():
         logging.error("AUTO-BACKUP: Interval is not set.")
         return
 
-    if 'backup_cmd' not in OPTIONS or ('backup_cmd' in OPTIONS and OPTIONS['backup_cmd'] is None):
-        logging.error("AUTO-BACKUP: No backup_cmd given.")
+    if 'commands' not in OPTIONS or ('commands' in OPTIONS and OPTIONS['commands'] is None):
+        logging.error("AUTO-BACKUP: No commands given.")
         return
 
     if os.path.exists('/root/.auto-backup'):
@@ -51,9 +51,8 @@ def on_internet_available(display, config, log):
 
         files_to_backup = " ".join(OPTIONS['files'])
         try:
-            subprocess.call(OPTIONS['backup_cmd'].format(files=files_to_backup).split(), stdout=open(os.devnull, 'wb'))
-            if 'upload_cmd' in OPTIONS and OPTIONS['upload_cmd'] is not None:
-                subprocess.call(OPTIONS['upload_cmd'].split(), stdout=open(os.devnull, 'wb'))
+            for cmd in OPTIONS['commands']:
+                subprocess.call(cmd.format(files=files_to_backup).split(), stdout=open(os.devnull, 'wb'))
             logging.info("AUTO-BACKUP: Successfuly ran backup commands.")
             LAST_BACKUP = datetime.now()
             with open('/root/.auto-backup', 'w') as f: