Exemple #1
0
class PyRaseController:
    DEFAULT_METHODS = [
        'Zero Overwrite',
        'One Overwrite',
        'Random Overwrite',
        'DOD Overwrite',
    ]

    def __init__(self):
        loader = QUiLoader()
        self.ui = loader.load('pyrase.ui')
        self.overwrite = None
        self.verify = None
        self.device = None
        self.method = None
        self.devices = Utils.get_block_devices()
        self._add_default_methods_to_method_box()
        self._add_devices_to_device_box()

        self.ui.device_box.currentIndexChanged.connect(self._set_device)
        self.ui.close_button.clicked.connect(self.ui.close)
        self.ui.erase_button.clicked.connect(self._erase)

    def _add_default_methods_to_method_box(self):
        self.ui.method_box.clear()
        for method in self.DEFAULT_METHODS:
            self.ui.method_box.addItem(method)

    def _add_devices_to_device_box(self):
        for device in self.devices:
            self.ui.device_box.addItem(device)

    def _erase(self):
        self.method = self.ui.method_box.currentText()
        self.ui.erase_button.setEnabled(False)
        self.ui.close_button.setEnabled(False)

        if self.method == 'Zero Overwrite':
            self.overwrite = ErasureFactory.zero_overwrite(self.device)
            self.overwrite.finished.connect(self._verify)
            self.overwrite.start()
            self.overwrite.CURRENT_DATA.connect(
                self.ui.erase_progress.setValue)
            self.overwrite.CURRENT_TIME.connect(
                self.ui.erase_duration_label.setText)
            self.overwrite.CURRENT_PASS.connect(
                self.ui.pass_value_label.setText)

        elif self.method == 'One Overwrite':
            self.overwrite = ErasureFactory.one_overwrite(self.device)
            self.overwrite.finished.connect(self._verify)
            self.overwrite.start()
            self.overwrite.CURRENT_DATA.connect(
                self.ui.erase_progress.setValue)
            self.overwrite.CURRENT_TIME.connect(
                self.ui.erase_duration_label.setText)
            self.overwrite.CURRENT_PASS.connect(
                self.ui.pass_value_label.setText)

        elif self.method == 'Random Overwrite':
            self.overwrite = ErasureFactory.random_overwrite(self.device)
            self.overwrite.finished.connect(self._verify)
            self.overwrite.start()
            self.overwrite.CURRENT_DATA.connect(
                self.ui.erase_progress.setValue)
            self.overwrite.CURRENT_TIME.connect(
                self.ui.erase_duration_label.setText)
            self.overwrite.CURRENT_PASS.connect(
                self.ui.pass_value_label.setText)

        elif self.method == 'DOD Overwrite':
            self.overwrite = ErasureFactory.dod_overwrite(self.device)
            self.overwrite.finished.connect(self._verify)
            self.overwrite.start()
            self.overwrite.CURRENT_DATA.connect(
                self.ui.erase_progress.setValue)
            self.overwrite.CURRENT_TIME.connect(
                self.ui.erase_duration_label.setText)
            self.overwrite.CURRENT_PASS.connect(
                self.ui.pass_value_label.setText)

    def _verify(self):
        if self.method == 'Zero Overwrite':
            pattern = b'\0x00'
        elif self.method == 'One Overwrite':
            pattern = b'\0xff'
        else:
            pattern = 'random'

        self.ui.erase_progress.setValue(100)
        self.verify = Verify(self.device, pattern,
                             self.ui.verify_percent.value())
        self.verify.finished.connect(self._finished)
        self.verify.start()
        self.verify.CURRENT_DATA.connect(self.ui.verify_progress.setValue)
        self.verify.CURRENT_TIME.connect(self.ui.verify_duration_label.setText)

    def _finished(self):
        self.ui.verify_progress.setValue(100)

        if self.verify.success:
            erasure_status = 'Passed'
        else:
            erasure_status = 'Failed'

        self.ui.close_button.setEnabled(True)

    def _set_device(self):
        if '/dev/sd' in self.ui.device_box.currentText():
            self.device = self.ui.device_box.currentText()[:8]
        elif '/dev/nvm' in self.ui.device_box.currentText():
            self.device = self.ui.device_box.currentText()[:12]