From cde48996cf091986911bb5cfe5a5166bbfa88114 Mon Sep 17 00:00:00 2001 From: kload Date: Sat, 25 Oct 2014 23:08:03 +0200 Subject: [PATCH] [enh] Restore function --- actionsmap/yunohost.yml | 11 +++++++++++ backup.py | 35 +++++++++++++++++++++++++++++++++++ locales/en.json | 2 ++ locales/fr.json | 2 ++ 4 files changed, 50 insertions(+) diff --git a/actionsmap/yunohost.yml b/actionsmap/yunohost.yml index fed4abd8f..f244f67ec 100644 --- a/actionsmap/yunohost.yml +++ b/actionsmap/yunohost.yml @@ -562,6 +562,17 @@ backup: action_help: Create an encrypted backup tarball api: POST /backup + ### backup_restore() + restore: + action_help: Restore from an encrypted backup tarball + api: POST /restore + configuration: + authenticate: false + lock: false + arguments: + path: + help: Path of the restauration package + ############################# # Monitor # diff --git a/backup.py b/backup.py index 52f09ac53..335998c4d 100644 --- a/backup.py +++ b/backup.py @@ -52,3 +52,38 @@ def backup_backup(): #TODO: Compress & encrypt msignals.display(m18n.n('backup_complete'), 'success') + + +def backup_restore(path): + """ + Restore from an encrypted backup tarball + + Keyword argument: + path -- Path to the restore directory + + """ + from yunohost.tools import tools_postinstall + from yunohost.hook import hook_callback + + path = os.path.abspath(path) + + try: + with open("%s/yunohost/current_host" % path, 'r') as f: + domain = f.readline().rstrip() + except IOError: + raise MoulinetteError(errno.EINVAL, m18n.n('invalid_restore_package')) + + #TODO Decrypt & extract tarball + + try: + with open('/etc/yunohost/installed') as f: + raise MoulinetteError(errno.EINVAL, m18n.n('yunohost_already_installed')) + except IOError: + tools_postinstall(domain, 'yunohost', True) + + # Run hook + hook_callback('restore', [path]) + + msignals.display(m18n.n('restore_complete'), 'success') + + diff --git a/locales/en.json b/locales/en.json index f615178fb..09d42bdd8 100644 --- a/locales/en.json +++ b/locales/en.json @@ -129,6 +129,8 @@ "system_upgraded" : "System successfully upgraded", "backup_complete" : "Backup complete", + "invalid_restore_package" : "Invalid restore package", + "restore_complete" : "Restore complete", "field_invalid" : "Invalid field '{:s}'", "mail_domain_unknown" : "Unknown mail address domain '{:s}'", diff --git a/locales/fr.json b/locales/fr.json index 60880cb57..a913951b3 100644 --- a/locales/fr.json +++ b/locales/fr.json @@ -129,6 +129,8 @@ "system_upgraded" : "Système mis à jour avec succès", "backup_complete" : "Sauvegarde terminée", + "invalid_restore_package" : "Dossier de restauration invalide", + "restore_complete" : "Restauration terminée", "field_invalid" : "Champ incorrect : {:s}", "mail_domain_unknown" : "Domaine '{:s}' de l'adresse mail inconnu",