Introduced Firewall Feature in the Settings Page

This commit is contained in:
SimplifiedPrivacy 2026-07-21 09:45:10 -04:00
parent b8d8689885
commit 1633562325
2 changed files with 119 additions and 0 deletions

View file

@ -5,12 +5,23 @@ from core.Constants import Constants
from core.controllers.ConfigurationController import ConfigurationController from core.controllers.ConfigurationController import ConfigurationController
from core.controllers.PolicyController import PolicyController from core.controllers.PolicyController import PolicyController
from core.controllers.ProfileController import ProfileController from core.controllers.ProfileController import ProfileController
from core.services.networking.systemwide.systemwide_utils import get_firewall_setting
from gui.v2.actions.config import load_gui_config from gui.v2.actions.config import load_gui_config
from gui.v2.actions.profile_order import normalize_profile_order from gui.v2.actions.profile_order import normalize_profile_order
from gui.v2.actions.ticket_failure import get_ticket_verification_failure from gui.v2.actions.ticket_failure import get_ticket_verification_failure
def read_firewall_setting():
try:
firewall_setting = get_firewall_setting()
return firewall_setting
except Exception:
pass
return False
def read_systemwide_enabled(): def read_systemwide_enabled():
try: try:
privilege_policy = PolicyController.get('privilege') privilege_policy = PolicyController.get('privilege')
@ -45,6 +56,7 @@ def prepare(gui_config_file):
"endpoint_verification_enabled": endpoint_verification_enabled, "endpoint_verification_enabled": endpoint_verification_enabled,
"systemwide_enabled": read_systemwide_enabled(), "systemwide_enabled": read_systemwide_enabled(),
"bwrap_enabled": read_bwrap_enabled(), "bwrap_enabled": read_bwrap_enabled(),
"firewall_setting": read_firewall_setting(),
"gui_config": load_gui_config(gui_config_file), "gui_config": load_gui_config(gui_config_file),
"ticket_failure": get_ticket_verification_failure(gui_config_file), "ticket_failure": get_ticket_verification_failure(gui_config_file),
} }
@ -58,6 +70,7 @@ def empty_payload():
"endpoint_verification_enabled": False, "endpoint_verification_enabled": False,
"systemwide_enabled": False, "systemwide_enabled": False,
"bwrap_enabled": False, "bwrap_enabled": False,
"firewall_setting": False,
"gui_config": None, "gui_config": None,
"ticket_failure": None, "ticket_failure": None,
} }

View file

@ -31,6 +31,7 @@ from core.Errors import (
PolicyRevocationError, PolicyRevocationError,
) )
from core.errors.logger import logger as core_logger from core.errors.logger import logger as core_logger
from core.services.networking.systemwide.systemwide_utils import get_firewall_setting
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
@ -103,6 +104,7 @@ class Settings(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), ("Bwrap Permission", self.show_bwrap_page),
("Connections", self.show_connection_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)
@ -1228,6 +1230,10 @@ class Settings(Page):
self.bwrap_page = self.create_bwrap_page() self.bwrap_page = self.create_bwrap_page()
self.content_layout.addWidget(self.bwrap_page) self.content_layout.addWidget(self.bwrap_page)
self.content_layout.removeWidget(self.connection_page)
self.connection_page = self.create_connection_page()
self.content_layout.addWidget(self.connection_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)
@ -1442,6 +1448,7 @@ class Settings(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.bwrap_page = self.create_bwrap_page()
self.connection_page = self.create_connection_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()
@ -1453,6 +1460,7 @@ class Settings(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.bwrap_page)
self.content_layout.addWidget(self.connection_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)
@ -1511,6 +1519,11 @@ class Settings(Page):
self.content_layout.setCurrentWidget(self.bwrap_page) self.content_layout.setCurrentWidget(self.bwrap_page)
self._select_menu_button("Bwrap Permission") self._select_menu_button("Bwrap Permission")
def show_connection_page(self):
core_logger.info("User navigated to Settings -> Connection")
self.content_layout.setCurrentWidget(self.connection_page)
self._select_menu_button("Connection Page")
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)
@ -2098,6 +2111,21 @@ class Settings(Page):
self.bwrap_status_value.setStyleSheet( self.bwrap_status_value.setStyleSheet(
f"color: #e67e22; font-size: 14px; {self.font_style}") f"color: #e67e22; font-size: 14px; {self.font_style}")
def load_firewall_settings(self, enabled=None):
if enabled is None:
enabled = settings_data.load(read_firewall_setting)
self.firewall_toggle.setChecked(enabled)
if enabled:
self.firewall_status_value.setText("Enabled")
self.firewall_status_value.setStyleSheet(
f"color: #2ecc71; font-size: 14px; {self.font_style}")
else:
self.firewall_status_value.setText("Disabled")
self.firewall_status_value.setStyleSheet(
f"color: #e67e22; font-size: 14px; {self.font_style}")
def save_bwrap_settings(self): def save_bwrap_settings(self):
enable = self.bwrap_toggle.isChecked() enable = self.bwrap_toggle.isChecked()
try: try:
@ -2124,6 +2152,29 @@ class Settings(Page):
self.bwrap_status_value.setStyleSheet( self.bwrap_status_value.setStyleSheet(
f"color: red; font-size: 14px; {self.font_style}") f"color: red; font-size: 14px; {self.font_style}")
def save_firewall_settings(self):
enable = self.firewall_toggle.isChecked()
try:
if enable:
ConfigurationController.change_firewall(True)
self.firewall_status_value.setText("Enabled")
else:
ConfigurationController.change_firewall(False)
self.firewall_status_value.setText("Disabled")
self.update_status.update_status(
"Firewall settings updated")
except CommandNotFoundError as e:
self.firewall_status_value.setText(str(e))
self.firewall_status_value.setStyleSheet(
f"color: red; font-size: 14px; {self.font_style}")
except Exception as e:
print(e)
self.firewall_status_value.setText(f"Failed to update firewall setting {e}")
self.firewall_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(
@ -2185,3 +2236,58 @@ class Settings(Page):
logging.error(f"Error saving registration settings: {str(e)}") logging.error(f"Error saving registration settings: {str(e)}")
self.update_status.update_status( self.update_status.update_status(
"Error saving registration settings") "Error saving registration settings")
def create_connection_page(self):
page = QWidget()
layout = QVBoxLayout(page)
layout.setSpacing(20)
layout.setContentsMargins(20, 20, 20, 20)
title = QLabel("CONNECTION PAGE")
title.setStyleSheet(
f"color: #808080; font-size: 12px; font-weight: bold; {self.font_style}")
layout.addWidget(title)
description = QLabel(
"Control connection settings such as the firewall.")
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.firewall_status_value = QLabel("")
self.firewall_status_value.setStyleSheet(
f"color: #e67e22; font-size: 14px; {self.font_style}")
status_layout.addWidget(status_label)
status_layout.addWidget(self.firewall_status_value)
status_layout.addStretch()
layout.addLayout(status_layout)
toggle_layout = QHBoxLayout()
self.firewall_toggle = QCheckBox("Enable Firewall Automatically when Systemwide Profiles are Activated")
self.firewall_toggle.setStyleSheet(self.get_checkbox_style())
toggle_layout.addWidget(self.firewall_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_firewall_settings)
button_layout = QHBoxLayout()
button_layout.addWidget(save_button)
button_layout.addStretch()
layout.addLayout(button_layout)
layout.addStretch()
self.load_firewall_settings(
self._prepared_value("firewall_setting", settings_data.read_firewall_setting))
return page