forked from Support/sp-hydra-veil-gui
Compare commits
No commits in common. "95e0f676df5961a2e2d327db499514b6798778bc" and "0a6280276f97d5bc9dd646a84beebff54b29e660" have entirely different histories.
95e0f676df
...
0a6280276f
2 changed files with 18 additions and 144 deletions
|
|
@ -13,11 +13,6 @@ import sys
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
# DISPLAY CHOICES AND RECOVERY UI
|
# 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):
|
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."""
|
"""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!")
|
logger.error("Critical Error with database initialization!")
|
||||||
sys.exit()
|
sys.exit()
|
||||||
|
|
||||||
|
# are they upgrading from a legacy version?
|
||||||
# ============================================================================
|
# that would mean the table existed, but not the version table,
|
||||||
# LEGACY DATABASE CHECKS
|
|
||||||
# ============================================================================
|
|
||||||
migration_happened = False
|
|
||||||
|
|
||||||
# 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:
|
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.")
|
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}.")
|
# THEN DISPLAY CHOICES AND RECOVERY UI
|
||||||
if migration.valid:
|
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."
|
||||||
migration_happened = True
|
db_version_you_have = "Old System"
|
||||||
force_sync = True
|
recovery_dialog(custom_error, db_version_you_have)
|
||||||
else:
|
sys.exit()
|
||||||
# THEN DISPLAY CHOICES AND RECOVERY UI
|
|
||||||
db_version_you_have = "Old System"
|
|
||||||
failed_migration(db_version_you_have)
|
|
||||||
|
|
||||||
# If they're still here, then if it's NOT a legacy version,
|
# If they're still here, then if it's NOT a legacy version,
|
||||||
|
|
||||||
|
|
@ -124,17 +112,15 @@ if is_compatable:
|
||||||
|
|
||||||
except:
|
except:
|
||||||
logger.info(f"[DB MANAGEMENT] create ALL tables failed. Running migrations...")
|
logger.info(f"[DB MANAGEMENT] create ALL tables failed. Running migrations...")
|
||||||
migration = migrate_sql()
|
made_tables = migrate_sql()
|
||||||
logger.info(f"[DB MANAGEMENT] Results of migration is {made_tables}")
|
logger.info(f"[DB MANAGEMENT] Results of migration is {made_tables.valid}")
|
||||||
|
|
||||||
if not migration.valid:
|
if not made_tables.valid:
|
||||||
db_version_you_have = 0
|
close_session()
|
||||||
failed_migration(db_version_you_have)
|
custom_error = "Could not Migrate the Database version, please delete the database. You will NOT lose profiles, this is the public data."
|
||||||
# close_session()
|
from gui.v2.ui.popups.Database_version import show_recovery_dialog
|
||||||
# custom_error = "Could not Migrate the Database version, please delete the database. You will NOT lose profiles, this is the public data."
|
choice = show_recovery_dialog({"message": custom_error, "db_version": 0, "status": "cant_make"})
|
||||||
# from gui.v2.ui.popups.Database_version import show_recovery_dialog
|
sys.exit()
|
||||||
# choice = show_recovery_dialog({"message": custom_error, "db_version": 0, "status": "cant_make"})
|
|
||||||
# sys.exit()
|
|
||||||
|
|
||||||
# ASSUME TABLES CREATED
|
# ASSUME TABLES CREATED
|
||||||
logger.info("[DB MANAGEMENT] Tables successfully made or initialized if pre-existing")
|
logger.info("[DB MANAGEMENT] Tables successfully made or initialized if pre-existing")
|
||||||
|
|
@ -153,15 +139,9 @@ if is_compatable:
|
||||||
force_sync = True
|
force_sync = True
|
||||||
else:
|
else:
|
||||||
logger.info(f"[DB MANAGEMENT] Launcher is now passing it off to launch the main GUI window WITHOUT force sync..")
|
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
|
force_sync = False
|
||||||
|
|
||||||
# Start GUI either way:
|
# Start GUI either way:
|
||||||
logger.info(f"[DB MANAGEMENT] Starting GUI..")
|
|
||||||
start_ui(force_sync)
|
start_ui(force_sync)
|
||||||
|
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,6 @@ from core.errors.logger import logger as core_logger
|
||||||
from gui.v2.actions import settings_data
|
from gui.v2.actions import settings_data
|
||||||
from gui.v2.actions.key_interpretation import interpret_key_results
|
from gui.v2.actions.key_interpretation import interpret_key_results
|
||||||
from gui.v2.actions.profile_order import normalize_profile_order
|
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.infrastructure.setup_observers import ticket_observer
|
||||||
from gui.v2.ui.pages.Page import Page
|
from gui.v2.ui.pages.Page import Page
|
||||||
from gui.v2.ui.popups.confirmation_popup import ConfirmationPopup
|
from gui.v2.ui.popups.confirmation_popup import ConfirmationPopup
|
||||||
|
|
@ -103,7 +102,6 @@ class Settings(Page):
|
||||||
("Create/Edit", self.show_registrations_page),
|
("Create/Edit", self.show_registrations_page),
|
||||||
("Verification", self.show_verification_page),
|
("Verification", self.show_verification_page),
|
||||||
("Legacy-Version", self.show_systemwide_page),
|
("Legacy-Version", self.show_systemwide_page),
|
||||||
("Bwrap Permission", self.show_bwrap_page),
|
|
||||||
("Delete Profile", self.show_delete_page),
|
("Delete Profile", self.show_delete_page),
|
||||||
("Error Logs", self.show_logs_page),
|
("Error Logs", self.show_logs_page),
|
||||||
("Debug Help", self.show_debug_page)
|
("Debug Help", self.show_debug_page)
|
||||||
|
|
@ -1176,9 +1174,8 @@ class Settings(Page):
|
||||||
super().showEvent(event)
|
super().showEvent(event)
|
||||||
self._settings_refresh_seq += 1
|
self._settings_refresh_seq += 1
|
||||||
seq = self._settings_refresh_seq
|
seq = self._settings_refresh_seq
|
||||||
module_path, class_name = PAGE_REGISTRY["settings"]
|
|
||||||
worker = PageDataWorker(
|
worker = PageDataWorker(
|
||||||
"settings", module_path, class_name, self.custom_window)
|
"settings", settings_data.prepare, self.custom_window.gui_config_file)
|
||||||
worker.data_ready.connect(
|
worker.data_ready.connect(
|
||||||
lambda name, payload, s=seq: self._on_settings_data_ready(payload, s))
|
lambda name, payload, s=seq: self._on_settings_data_ready(payload, s))
|
||||||
worker.failed.connect(
|
worker.failed.connect(
|
||||||
|
|
@ -1226,10 +1223,6 @@ class Settings(Page):
|
||||||
self.systemwide_page = self.create_systemwide_page()
|
self.systemwide_page = self.create_systemwide_page()
|
||||||
self.content_layout.addWidget(self.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.content_layout.removeWidget(self.delete_page)
|
||||||
self.delete_page = self.create_delete_page()
|
self.delete_page = self.create_delete_page()
|
||||||
self.content_layout.addWidget(self.delete_page)
|
self.content_layout.addWidget(self.delete_page)
|
||||||
|
|
@ -1443,7 +1436,6 @@ class Settings(Page):
|
||||||
self.registrations_page = self.create_registrations_page()
|
self.registrations_page = self.create_registrations_page()
|
||||||
self.verification_page = self.create_verification_page()
|
self.verification_page = self.create_verification_page()
|
||||||
self.systemwide_page = self.create_systemwide_page()
|
self.systemwide_page = self.create_systemwide_page()
|
||||||
self.bwrap_page = self.create_bwrap_page()
|
|
||||||
self.logs_page = self.create_logs_page()
|
self.logs_page = self.create_logs_page()
|
||||||
self.delete_page = self.create_delete_page()
|
self.delete_page = self.create_delete_page()
|
||||||
self.debug_page = self.create_debug_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.registrations_page)
|
||||||
self.content_layout.addWidget(self.verification_page)
|
self.content_layout.addWidget(self.verification_page)
|
||||||
self.content_layout.addWidget(self.systemwide_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.logs_page)
|
||||||
self.content_layout.addWidget(self.delete_page)
|
self.content_layout.addWidget(self.delete_page)
|
||||||
self.content_layout.addWidget(self.debug_page)
|
self.content_layout.addWidget(self.debug_page)
|
||||||
|
|
@ -1508,11 +1499,6 @@ class Settings(Page):
|
||||||
self.content_layout.setCurrentWidget(self.systemwide_page)
|
self.content_layout.setCurrentWidget(self.systemwide_page)
|
||||||
self._select_menu_button("Legacy-Version")
|
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):
|
def show_logs_page(self):
|
||||||
core_logger.info("User navigated to Settings -> Error Logs")
|
core_logger.info("User navigated to Settings -> Error Logs")
|
||||||
self.content_layout.setCurrentWidget(self.logs_page)
|
self.content_layout.setCurrentWidget(self.logs_page)
|
||||||
|
|
@ -1995,59 +1981,6 @@ class Settings(Page):
|
||||||
self._prepared_value("systemwide_enabled", settings_data.read_systemwide_enabled))
|
self._prepared_value("systemwide_enabled", settings_data.read_systemwide_enabled))
|
||||||
return page
|
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):
|
def load_systemwide_settings(self, enabled=None):
|
||||||
if enabled is None:
|
if enabled is None:
|
||||||
enabled = settings_data.read_systemwide_enabled()
|
enabled = settings_data.read_systemwide_enabled()
|
||||||
|
|
@ -2087,45 +2020,6 @@ class Settings(Page):
|
||||||
self.systemwide_status_value.setStyleSheet(
|
self.systemwide_status_value.setStyleSheet(
|
||||||
f"color: red; font-size: 14px; {self.font_style}")
|
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:
|
def load_registrations_settings(self) -> None:
|
||||||
try:
|
try:
|
||||||
config = self._prepared_value(
|
config = self._prepared_value(
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue