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()
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()