예제 #1
0
 def edit_module(self):
     password, ok = QInputDialog().getText(
         self, 'Ввод пароля', 'Введите пароль для редактирования модуля:',
         QLineEdit.Password)
     if ok:
         module = self.modules[self.modules_cb.currentIndex()]
         try:
             with open(module['full_name'], 'rb') as module_file:
                 crypto_type = module_file.read(3)
                 password_hash = module_file.read(md5().digest_size)
                 if password_hash != md5(password.encode('utf-8')).digest():
                     raise RuntimeError('Введён неправильный пароль.')
                 if crypto_type == b'aes':
                     content = aes_decrypt(module_file.read())
                 elif crypto_type == b'xor':
                     content = xor_str(module_file.read())
                 else:
                     raise RuntimeError(
                         'Неизвестный тип шифрования файла модуля.')
             emw = EditModuleWidget(module, crypto_type,
                                    password_hash, content,
                                    self.modules_cb.currentIndex(), self)
             emw.edited.connect(self.update_edited_module)
             emw.show()
         except IOError:
             mb = QMessageBox(self)
             mb.setWindowTitle('Ошибка')
             mb.setText('При открытии файла модуля возникла ошибка.')
             mb.show()
         except (SyntaxError, RuntimeError) as error:
             mb = QMessageBox(self)
             mb.setWindowTitle('Ошибка')
             mb.setText(str(error))
             mb.show()
예제 #2
0
 def save_module(self):
     # Запрашиваем пароль
     password, ok = QInputDialog().getText(
         self, 'Ввод пароля', 'Введите пароль для редактирования модуля:',
         QLineEdit.Password)
     # Если пользователь не отменил ввод
     if ok:
         try:
             # Проверяем модуль на ошибки
             parsed_data = parse(self.text_editor.toPlainText())
             module_full_path = QFileDialog.getSaveFileName(
                 self, filter='*.module')[0]
             if module_full_path.find('.module') == -1:
                 module_full_path += '.module'
             with open(module_full_path, 'wb') as file:
                 # Записываем модуль в файл, шифруя его
                 if self.type_of_crypto.currentIndex() == 0:
                     file.write(b'xor' +
                                md5(password.encode('utf-8')).digest() +
                                xor_bytes(self.text_editor.toPlainText()))
                 else:
                     file.write(b'aes' +
                                md5(password.encode('utf-8')).digest() +
                                aes_encrypt(self.text_editor.toPlainText()))
         # Если случилась ошибка ввода / вывода
         except IOError:
             mb = QMessageBox(self)
             mb.setWindowTitle('Ошибка')
             mb.setText('При сохранении файла модуля возникла ошибка.')
             mb.show()
         # Если в модуле есть ошибка
         except (SyntaxError, RuntimeError) as error:
             mb = QMessageBox(self)
             mb.setWindowTitle('Ошибка')
             mb.setText(str(error))
             mb.show()
         else:
             # Если всё хорошо, сигнализируем об успешном создании модуля
             self.module_created.emit(module_full_path)
             self.close()