Compare commits

..

No commits in common. "95e0f676df5961a2e2d327db499514b6798778bc" and "0a6280276f97d5bc9dd646a84beebff54b29e660" have entirely different histories.

2 changed files with 18 additions and 144 deletions

View file

@ -13,11 +13,6 @@ import sys
# ============================================================================
# DISPLAY CHOICES AND RECOVERY UI
# ============================================================================
def failed_migration(db_version_you_have):
close_session() # shut down db connection
custom_error = "There were issues with migrating your database. We transitioned to a new Database format for new features! Please delete the old version and fetch the new public data (what locations, browsers, ect) This will NOT affect your profiles or browser sessions."
recovery_dialog(custom_error, db_version_you_have)
def recovery_dialog(custom_error, db_version_you_have):
"""This ends the app by forcing them to delete the database, move it, or just quit."""
@ -71,26 +66,19 @@ except:
logger.error("Critical Error with database initialization!")
sys.exit()
# ============================================================================
# LEGACY DATABASE CHECKS
# ============================================================================
migration_happened = False
# are they upgrading from a legacy version? that would mean the table existed, but not the version table,
# are they upgrading from a legacy version?
# that would mean the table existed, but not the version table,
if not version_table_exists and main_db_exists:
logger.info(f"[DB MANAGEMENT] We are dealing with a legacy database, we need to transition the user.")
migration = migrate_sql()
# shut down db connection
close_session()
logger.info(f"[DB MANAGEMENT] Migration result is {migration.valid}.")
if migration.valid:
migration_happened = True
force_sync = True
else:
# THEN DISPLAY CHOICES AND RECOVERY UI
custom_error = "Upgrade Time! We transitioned to a new Database format for new features! Please delete the old version and fetch the new public data (what locations, browsers, ect) This will NOT affect your profiles or browser sessions."
db_version_you_have = "Old System"
failed_migration(db_version_you_have)
recovery_dialog(custom_error, db_version_you_have)
sys.exit()
# If they're still here, then if it's NOT a legacy version,
@ -124,17 +112,15 @@ if is_compatable:
except:
logger.info(f"[DB MANAGEMENT] create ALL tables failed. Running migrations...")
migration = migrate_sql()
logger.info(f"[DB MANAGEMENT] Results of migration is {made_tables}")
made_tables = migrate_sql()
logger.info(f"[DB MANAGEMENT] Results of migration is {made_tables.valid}")
if not migration.valid:
db_version_you_have = 0
failed_migration(db_version_you_have)
# close_session()
# custom_error = "Could not Migrate the Database version, please delete the database. You will NOT lose profiles, this is the public data."
# from gui.v2.ui.popups.Database_version import show_recovery_dialog
# choice = show_recovery_dialog({"message": custom_error, "db_version": 0, "status": "cant_make"})
# sys.exit()
if not made_tables.valid:
close_session()
custom_error = "Could not Migrate the Database version, please delete the database. You will NOT lose profiles, this is the public data."
from gui.v2.ui.popups.Database_version import show_recovery_dialog
choice = show_recovery_dialog({"message": custom_error, "db_version": 0, "status": "cant_make"})
sys.exit()
# ASSUME TABLES CREATED
logger.info("[DB MANAGEMENT] Tables successfully made or initialized if pre-existing")
@ -153,15 +139,9 @@ if is_compatable:
force_sync = True
else:
logger.info(f"[DB MANAGEMENT] Launcher is now passing it off to launch the main GUI window WITHOUT force sync..")
if not migration_happened:
force_sync = False
# make sure we declared it:
if 'force_sync' not in globals():
force_sync = False
# Start GUI either way:
logger.info(f"[DB MANAGEMENT] Starting GUI..")
start_ui(force_sync)
# ============================================================================

View file

@ -35,7 +35,6 @@ from core.errors.logger import logger as core_logger
from gui.v2.actions import settings_data
from gui.v2.actions.key_interpretation import interpret_key_results
from gui.v2.actions.profile_order import normalize_profile_order
from gui.v2.infrastructure.page_registry import PAGE_REGISTRY
from gui.v2.infrastructure.setup_observers import ticket_observer
from gui.v2.ui.pages.Page import Page
from gui.v2.ui.popups.confirmation_popup import ConfirmationPopup
@ -103,7 +102,6 @@ class Settings(Page):
("Create/Edit", self.show_registrations_page),
("Verification", self.show_verification_page),
("Legacy-Version", self.show_systemwide_page),
("Bwrap Permission", self.show_bwrap_page),
("Delete Profile", self.show_delete_page),
("Error Logs", self.show_logs_page),
("Debug Help", self.show_debug_page)
@ -1176,9 +1174,8 @@ class Settings(Page):
super().showEvent(event)
self._settings_refresh_seq += 1
seq = self._settings_refresh_seq
module_path, class_name = PAGE_REGISTRY["settings"]
worker = PageDataWorker(
"settings", module_path, class_name, self.custom_window)
"settings", settings_data.prepare, self.custom_window.gui_config_file)
worker.data_ready.connect(
lambda name, payload, s=seq: self._on_settings_data_ready(payload, s))
worker.failed.connect(
@ -1226,10 +1223,6 @@ class Settings(Page):
self.systemwide_page = self.create_systemwide_page()
self.content_layout.addWidget(self.systemwide_page)
self.content_layout.removeWidget(self.bwrap_page)
self.bwrap_page = self.create_bwrap_page()
self.content_layout.addWidget(self.bwrap_page)
self.content_layout.removeWidget(self.delete_page)
self.delete_page = self.create_delete_page()
self.content_layout.addWidget(self.delete_page)
@ -1443,7 +1436,6 @@ class Settings(Page):
self.registrations_page = self.create_registrations_page()
self.verification_page = self.create_verification_page()
self.systemwide_page = self.create_systemwide_page()
self.bwrap_page = self.create_bwrap_page()
self.logs_page = self.create_logs_page()
self.delete_page = self.create_delete_page()
self.debug_page = self.create_debug_page()
@ -1454,7 +1446,6 @@ class Settings(Page):
self.content_layout.addWidget(self.registrations_page)
self.content_layout.addWidget(self.verification_page)
self.content_layout.addWidget(self.systemwide_page)
self.content_layout.addWidget(self.bwrap_page)
self.content_layout.addWidget(self.logs_page)
self.content_layout.addWidget(self.delete_page)
self.content_layout.addWidget(self.debug_page)
@ -1508,11 +1499,6 @@ class Settings(Page):
self.content_layout.setCurrentWidget(self.systemwide_page)
self._select_menu_button("Legacy-Version")
def show_bwrap_page(self):
core_logger.info("User navigated to Settings -> Bwrap Permission")
self.content_layout.setCurrentWidget(self.bwrap_page)
self._select_menu_button("Bwrap Permission")
def show_logs_page(self):
core_logger.info("User navigated to Settings -> Error Logs")
self.content_layout.setCurrentWidget(self.logs_page)
@ -1995,59 +1981,6 @@ class Settings(Page):
self._prepared_value("systemwide_enabled", settings_data.read_systemwide_enabled))
return page
def create_bwrap_page(self):
page = QWidget()
layout = QVBoxLayout(page)
layout.setSpacing(20)
layout.setContentsMargins(20, 20, 20, 20)
title = QLabel("BWRAP PERMISSION")
title.setStyleSheet(
f"color: #808080; font-size: 12px; font-weight: bold; {self.font_style}")
layout.addWidget(title)
description = QLabel(
"Control whether HydraVeil configures a capability policy so bwrap can be used without requiring additional permissions.")
description.setWordWrap(True)
description.setStyleSheet(
f"color: white; font-size: 14px; {self.font_style}")
layout.addWidget(description)
status_layout = QHBoxLayout()
status_label = QLabel("Current status:")
status_label.setStyleSheet(
f"color: white; font-size: 14px; {self.font_style}")
self.bwrap_status_value = QLabel("")
self.bwrap_status_value.setStyleSheet(
f"color: #e67e22; font-size: 14px; {self.font_style}")
status_layout.addWidget(status_label)
status_layout.addWidget(self.bwrap_status_value)
status_layout.addStretch()
layout.addLayout(status_layout)
toggle_layout = QHBoxLayout()
self.bwrap_toggle = QCheckBox("Enable capability policy")
self.bwrap_toggle.setStyleSheet(self.get_checkbox_style())
toggle_layout.addWidget(self.bwrap_toggle)
toggle_layout.addStretch()
layout.addLayout(toggle_layout)
save_button = QPushButton()
save_button.setFixedSize(75, 46)
save_button.setIcon(QIcon(os.path.join(self.btn_path, "save.png")))
save_button.setIconSize(QSize(75, 46))
save_button.clicked.connect(self.save_bwrap_settings)
button_layout = QHBoxLayout()
button_layout.addWidget(save_button)
button_layout.addStretch()
layout.addLayout(button_layout)
layout.addStretch()
self.load_bwrap_settings(
self._prepared_value("bwrap_enabled", settings_data.read_bwrap_enabled))
return page
def load_systemwide_settings(self, enabled=None):
if enabled is None:
enabled = settings_data.read_systemwide_enabled()
@ -2087,45 +2020,6 @@ class Settings(Page):
self.systemwide_status_value.setStyleSheet(
f"color: red; font-size: 14px; {self.font_style}")
def load_bwrap_settings(self, enabled=None):
if enabled is None:
enabled = settings_data.read_bwrap_enabled()
self.bwrap_toggle.setChecked(enabled)
if enabled:
self.bwrap_status_value.setText("Enabled")
self.bwrap_status_value.setStyleSheet(
f"color: #2ecc71; font-size: 14px; {self.font_style}")
else:
self.bwrap_status_value.setText("Disabled")
self.bwrap_status_value.setStyleSheet(
f"color: #e67e22; font-size: 14px; {self.font_style}")
def save_bwrap_settings(self):
enable = self.bwrap_toggle.isChecked()
try:
capability_policy = PolicyController.get('capability')
if capability_policy is not None:
if enable:
PolicyController.instate(capability_policy)
else:
if PolicyController.is_instated(capability_policy):
PolicyController.revoke(capability_policy)
self.load_bwrap_settings()
self.update_status.update_status(
"Capability policy settings updated")
except CommandNotFoundError as e:
self.bwrap_status_value.setText(str(e))
self.bwrap_status_value.setStyleSheet(
f"color: red; font-size: 14px; {self.font_style}")
except (PolicyAssignmentError, PolicyInstatementError, PolicyRevocationError) as e:
self.bwrap_status_value.setText(str(e))
self.bwrap_status_value.setStyleSheet(
f"color: red; font-size: 14px; {self.font_style}")
except Exception:
self.bwrap_status_value.setText("Failed to update policy")
self.bwrap_status_value.setStyleSheet(
f"color: red; font-size: 14px; {self.font_style}")
def load_registrations_settings(self) -> None:
try:
config = self._prepared_value(