Sfoglia il codice sorgente

backup: implemented backup functions using the new backup model

Olivier MEDOC 10 anni fa
parent
commit
baa3c6362c
2 ha cambiato i file con 80 aggiunte e 15 eliminazioni
  1. 65 12
      backupdlg.ui
  2. 15 3
      qubesmanager/backup.py

+ 65 - 12
backupdlg.ui

@@ -148,21 +148,21 @@
    </layout>
   </widget>
   <widget class="QWizardPage" name="select_dir_page">
-   <layout class="QHBoxLayout" name="horizontalLayout">
-    <item>
+   <layout class="QGridLayout" name="gridLayout_5">
+    <item row="0" column="0">
      <widget class="QGroupBox" name="groupBox">
       <property name="title">
        <string>Backup destination directory</string>
       </property>
       <layout class="QGridLayout" name="gridLayout">
-       <item row="0" column="0">
+       <item row="1" column="0">
         <widget class="QLabel" name="label">
          <property name="text">
           <string>Device:</string>
          </property>
         </widget>
        </item>
-       <item row="0" column="1">
+       <item row="1" column="2">
         <widget class="QComboBox" name="dev_combobox">
          <property name="sizePolicy">
           <sizepolicy hsizetype="Maximum" vsizetype="Fixed">
@@ -192,20 +192,73 @@
          </item>
         </widget>
        </item>
-       <item row="1" column="0">
+       <item row="4" column="2">
+        <widget class="QLineEdit" name="dir_line_edit"/>
+       </item>
+       <item row="4" column="3">
+        <widget class="QToolButton" name="select_path_button">
+         <property name="text">
+          <string>...</string>
+         </property>
+        </widget>
+       </item>
+       <item row="2" column="2">
+        <widget class="QComboBox" name="appvm_combobox"/>
+       </item>
+       <item row="2" column="0">
+        <widget class="QLabel" name="label_5">
+         <property name="text">
+          <string>Target AppVM:</string>
+         </property>
+        </widget>
+       </item>
+       <item row="4" column="0">
         <widget class="QLabel" name="label_2">
          <property name="text">
           <string>Backup directory:</string>
          </property>
         </widget>
        </item>
-       <item row="1" column="1">
-        <widget class="QLineEdit" name="dir_line_edit"/>
+      </layout>
+     </widget>
+    </item>
+    <item row="1" column="0">
+     <widget class="QGroupBox" name="groupBox_2">
+      <property name="title">
+       <string>Backup security</string>
+      </property>
+      <layout class="QGridLayout" name="gridLayout_4">
+       <item row="0" column="0">
+        <widget class="QLabel" name="label_10">
+         <property name="text">
+          <string>Encrypt backup:</string>
+         </property>
+        </widget>
        </item>
-       <item row="1" column="2">
-        <widget class="QToolButton" name="select_path_button">
+       <item row="2" column="0">
+        <widget class="QLabel" name="label_11">
          <property name="text">
-          <string>...</string>
+          <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Encryption / Verification&lt;br/&gt;passphrase:&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="1">
+        <widget class="QCheckBox" name="encryption_checkbox">
+         <property name="layoutDirection">
+          <enum>Qt::LeftToRight</enum>
+         </property>
+         <property name="text">
+          <string/>
+         </property>
+         <property name="checked">
+          <bool>true</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="2" column="1" colspan="2">
+        <widget class="QLineEdit" name="passphrase_line_edit">
+         <property name="echoMode">
+          <enum>QLineEdit::Password</enum>
          </property>
         </widget>
        </item>
@@ -238,8 +291,8 @@
        <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
 &lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
 p, li { white-space: pre-wrap; }
-&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
       </property>
      </widget>
     </item>

+ 15 - 3
qubesmanager/backup.py

@@ -79,7 +79,7 @@ class BackupVMsWindow(Ui_Backup, QWizard):
         self.setupUi(self)
 
         self.show_running_vms_warning(False)
-        self.dir_line_edit.setReadOnly(True)
+        self.dir_line_edit.setReadOnly(False)
 
         self.select_vms_widget = MultiSelectWidget(self)
         self.verticalLayout.insertWidget(1, self.select_vms_widget)
@@ -103,6 +103,8 @@ class BackupVMsWindow(Ui_Backup, QWizard):
         self.__fill_vms_list__()
         fill_devs_list(self)
 
+        fill_appvms_list(self)
+
     def show_running_vms_warning(self, show):
         self.running_vms_warning.setVisible(show)
         self.shutdown_running_vms_button.setVisible(show)
@@ -261,10 +263,12 @@ class BackupVMsWindow(Ui_Backup, QWizard):
 
     def __do_backup__(self, thread_monitor):
         msg = []
+
         try:
-            qubesutils.backup_do(str(self.backup_dir), self.files_to_backup, self.update_progress_bar)
+            qubesutils.backup_do_copy(str(self.backup_dir), self.files_to_backup, str(self.passphrase_line_edit.text()), self.update_progress_bar, encrypt=self.encryption_checkbox.isChecked(), appvm=self.target_appvm)
             #simulate_long_lasting_proces(10, self.update_progress_bar) 
         except Exception as ex:
+            print "Exception:",ex
             msg.append(str(ex))
 
         if len(msg) > 0 :
@@ -275,11 +279,19 @@ class BackupVMsWindow(Ui_Backup, QWizard):
     
     def current_page_changed(self, id):
         if self.currentPage() is self.confirm_page:
+
+            self.target_appvm = None
+            if self.appvm_combobox.currentText() != "None":   #An existing appvm chosen 
+                self.target_appvm = str(self.appvm_combobox.currentText())
+
+            # FIXME: ensure that at least a non empty passphrase has been provided
+
             del self.func_output[:]
             try:
                 self.files_to_backup = qubesutils.backup_prepare(str(self.backup_dir), exclude_list = self.excluded, print_callback = self.gather_output)
             except Exception as ex:
-                QMessageBox.critical(None, "Error while prepering backup.", "ERROR: {0}".format(ex))
+                print "Exception:",ex
+                QMessageBox.critical(None, "Error while preparing backup.", "ERROR: {0}".format(ex))
 
             self.textEdit.setReadOnly(True)
             self.textEdit.setFontFamily("Monospace")