Initial release
This commit is contained in:
@@ -0,0 +1,128 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
WGSecure (WGS) — Interface graphique WireGuard avec MFA
|
||||
Version 0.1.0
|
||||
"""
|
||||
import sys
|
||||
import argparse
|
||||
|
||||
from PyQt6.QtWidgets import QApplication, QMessageBox, QInputDialog, QLineEdit, QSystemTrayIcon
|
||||
from PyQt6.QtCore import Qt
|
||||
|
||||
from app.core.config import Config
|
||||
from app.ui.main_window import MainWindow
|
||||
from app.ui.systray import SystemTray
|
||||
from app.ui import icons
|
||||
from app.utils.platform_utils import install_desktop_entry
|
||||
|
||||
|
||||
def _install_taskbar_icon(app_icon) -> None:
|
||||
"""Exporte l'icône en PNG 256 px et installe l'entrée .desktop."""
|
||||
try:
|
||||
import tempfile, os
|
||||
tmp = os.path.join(tempfile.gettempdir(), "wgsecure_icon.png")
|
||||
app_icon.pixmap(256, 256).save(tmp, "PNG")
|
||||
install_desktop_entry(tmp)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
|
||||
def parse_args() -> argparse.Namespace:
|
||||
parser = argparse.ArgumentParser(
|
||||
prog="wgsecure",
|
||||
description="WGSecure — WireGuard GUI avec MFA",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--admin",
|
||||
action="store_true",
|
||||
help="Lancer directement en mode Administrateur",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--no-tray",
|
||||
action="store_true",
|
||||
help="Désactiver l'icône systray",
|
||||
)
|
||||
return parser.parse_args()
|
||||
|
||||
|
||||
def require_admin_auth(config: Config, app: QApplication) -> bool:
|
||||
"""Vérifie le mot de passe admin si configuré. Retourne True si autorisé."""
|
||||
if not config.has_admin_password():
|
||||
return True
|
||||
pw, ok = QInputDialog.getText(
|
||||
None,
|
||||
"Accès Administrateur",
|
||||
"Mot de passe administrateur :",
|
||||
QLineEdit.EchoMode.Password,
|
||||
)
|
||||
if not ok:
|
||||
return False
|
||||
if config.check_admin_password(pw):
|
||||
return True
|
||||
QMessageBox.warning(None, "WGSecure", "Mot de passe incorrect.")
|
||||
return False
|
||||
|
||||
|
||||
def main():
|
||||
args = parse_args()
|
||||
|
||||
# Support DPI haute résolution
|
||||
QApplication.setHighDpiScaleFactorRoundingPolicy(
|
||||
Qt.HighDpiScaleFactorRoundingPolicy.PassThrough
|
||||
)
|
||||
app = QApplication(sys.argv)
|
||||
app.setApplicationName("WGSecure")
|
||||
app.setApplicationVersion("0.1.0")
|
||||
app.setOrganizationName("WGS")
|
||||
# Icône globale multi-tailles — barre des tâches + alt-tab
|
||||
app_icon = icons.icon_app()
|
||||
app.setWindowIcon(app_icon)
|
||||
app.setDesktopFileName("wgsecure")
|
||||
# Installe .desktop + PNG pour que GNOME/KDE affiche l'icône sur la taskbar
|
||||
_install_taskbar_icon(app_icon)
|
||||
# Empêche la fermeture quand toutes les fenêtres sont cachées (tray)
|
||||
app.setQuitOnLastWindowClosed(False)
|
||||
|
||||
config = Config()
|
||||
|
||||
# Mode Admin direct (--admin)
|
||||
if args.admin:
|
||||
if not require_admin_auth(config, app):
|
||||
sys.exit(0)
|
||||
from app.ui.admin_window import AdminWindow
|
||||
win = AdminWindow(config)
|
||||
win.setWindowIcon(icons.icon_admin())
|
||||
win.show()
|
||||
sys.exit(app.exec())
|
||||
|
||||
# Mode User (défaut)
|
||||
window = MainWindow(config)
|
||||
|
||||
# Systray
|
||||
if not args.no_tray and QSystemTrayIcon_available():
|
||||
tray = SystemTray(config, window)
|
||||
tray.show()
|
||||
# Démarrer réduit si déjà configuré
|
||||
if config.configured:
|
||||
window.show()
|
||||
else:
|
||||
window.show()
|
||||
tray.showMessage(
|
||||
"WGSecure",
|
||||
"Bienvenue ! Ouvrez le panneau Administrateur pour configurer WireGuard.",
|
||||
QSystemTrayIcon.MessageIcon.Information,
|
||||
4000,
|
||||
)
|
||||
else:
|
||||
window.show()
|
||||
|
||||
sys.exit(app.exec())
|
||||
|
||||
|
||||
def QSystemTrayIcon_available() -> bool:
|
||||
from PyQt6.QtWidgets import QSystemTrayIcon
|
||||
return QSystemTrayIcon.isSystemTrayAvailable()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user