177 lines
6.7 KiB
Python
177 lines
6.7 KiB
Python
#!/usr/bin/python3
|
|
"""App configuration for Wire-Py"""
|
|
|
|
import gettext
|
|
import locale
|
|
from pathlib import Path
|
|
from typing import Dict, Any
|
|
|
|
class AppConfig:
|
|
"""Central configuration class for Wire-Py application"""
|
|
|
|
# Localization
|
|
APP_NAME: str = "wirepy"
|
|
LOCALE_DIR: Path = Path("/usr/share/locale/")
|
|
|
|
# Base paths
|
|
BASE_DIR: Path = Path.home()
|
|
CONFIG_DIR: Path = BASE_DIR / ".config/wire_py"
|
|
TEMP_DIR: Path = Path("/tmp/tlecdcwg")
|
|
USER_FILE: Path = Path("/tmp/.log_user")
|
|
|
|
# Configuration files
|
|
SETTINGS_FILE: Path = CONFIG_DIR / "settings"
|
|
KEYS_FILE: Path = CONFIG_DIR / "keys"
|
|
AUTOSTART_SERVICE: Path = Path.home() / ".config/systemd/user/wg_start.service"
|
|
|
|
# Default settings
|
|
DEFAULT_SETTINGS: Dict[str, Any] = {
|
|
"updates": "on",
|
|
"theme": "light",
|
|
"tooltip": True,
|
|
"autostart": "off"
|
|
}
|
|
|
|
# UI configuration
|
|
UI_CONFIG: Dict[str, Any] = {
|
|
"window_title": "Wire-Py",
|
|
"window_size": (600, 383),
|
|
"font_family": "Ubuntu",
|
|
"font_size": 11,
|
|
"resizable_window": (False, False)
|
|
}
|
|
|
|
# System-dependent paths
|
|
SYSTEM_PATHS: Dict[str, str]= {
|
|
"ssl_decrypt": "/usr/local/bin/ssl_decrypt.py",
|
|
"ssl_encrypt": "/usr/local/bin/ssl_encrypt.py",
|
|
"tcl_path": "/usr/share/TK-Themes",
|
|
|
|
}
|
|
|
|
# Images and icons paths
|
|
IMAGE_PATHS: Dict[str, str] = {
|
|
"icon_vpn": "/usr/share/icons/lx-icons/48/wg_vpn.png",
|
|
"icon_msg": "/usr/share/icons/lx-icons/48/wg_msg.png",
|
|
"icon_import": "/usr/share/icons/lx-icons/48/wg_import.png",
|
|
"icon_export": "/usr/share/icons/lx-icons/48/wg_export.png",
|
|
"icon_trash": "/usr/share/icons/lx-icons/48/wg_trash.png",
|
|
"icon_start": "/usr/share/icons/lx-icons/48/wg_vpn-start.png",
|
|
"icon_stop": "/usr/share/icons/lx-icons/48/wg_vpn-stop.png",
|
|
"icon_info": "/usr/share/icons/lx-icons/64/info.png",
|
|
"icon_error": "/usr/share/icons/lx-icons/64/error.png"
|
|
|
|
}
|
|
|
|
@staticmethod
|
|
def setup_translations() -> gettext.gettext:
|
|
"""
|
|
Initialize translations and set the translation function
|
|
Special method for translating strings in this file
|
|
|
|
Returns:
|
|
The gettext translation function
|
|
"""
|
|
locale.bindtextdomain(AppConfig.APP_NAME, AppConfig.LOCALE_DIR)
|
|
gettext.bindtextdomain(AppConfig.APP_NAME, AppConfig.LOCALE_DIR)
|
|
gettext.textdomain(AppConfig.APP_NAME)
|
|
return gettext.gettext
|
|
|
|
@classmethod
|
|
def ensure_directories(cls) -> None:
|
|
"""Ensures that all required directories exist"""
|
|
cls.CONFIG_DIR.mkdir(parents=True, exist_ok=True)
|
|
cls.TEMP_DIR.mkdir(parents=True, exist_ok=True)
|
|
|
|
@classmethod
|
|
def create_default_settings(cls) -> None:
|
|
"""Creates default settings if they don't exist"""
|
|
if not cls.SETTINGS_FILE.exists():
|
|
content = "\n".join(f"[{k.upper()}]\n{v}" for k, v in cls.DEFAULT_SETTINGS.items())
|
|
cls.SETTINGS_FILE.write_text(content)
|
|
|
|
@classmethod
|
|
def get_image_paths(cls) -> Dict[str, Path]:
|
|
"""Returns paths to UI images"""
|
|
return {
|
|
"main_icon": cls.SYSTEM_PATHS["image_path"] / "48/wg_vpn.png",
|
|
"warning": cls.CONFIG_DIR / "images/warning.png",
|
|
"success": cls.CONFIG_DIR / "images/success.png",
|
|
"error": cls.CONFIG_DIR / "images/error.png"
|
|
}
|
|
|
|
@classmethod
|
|
def get_autostart_content(cls) -> str:
|
|
"""Returns the content for the autostart service file"""
|
|
return """[Unit]
|
|
Description=Automatic Tunnel Start
|
|
After=network-online.target
|
|
|
|
[Service]
|
|
Type=oneshot
|
|
ExecStartPre=/bin/sleep 5
|
|
ExecStart=/usr/local/bin/start_wg.py
|
|
[Install]
|
|
WantedBy=default.target"""
|
|
|
|
# here is inizialize the class for translate strrings
|
|
_ = AppConfig.setup_translations()
|
|
|
|
class Msg:
|
|
"""
|
|
A utility class that provides centralized access to translated message strings.
|
|
|
|
This class contains a dictionary of message strings used throughout the Wire-Py application.
|
|
All strings are prepared for translation using gettext. The short key names make the code
|
|
more concise while maintaining readability.
|
|
|
|
Attributes:
|
|
STR (dict): A dictionary mapping short keys to translated message strings.
|
|
Keys are abbreviated for brevity but remain descriptive.
|
|
|
|
Usage:
|
|
Import this class and access messages using the dictionary:
|
|
`Msg.STR["sel_tl"]` returns the translated "Select tunnel" message.
|
|
|
|
Note:
|
|
Ensure that gettext translation is properly initialized before
|
|
accessing these strings to ensure correct localization.
|
|
"""
|
|
STR: Dict[str, str] = {
|
|
# Strings for messages
|
|
"sel_tl": _("Select tunnel"),
|
|
"ren_err": _("Renaming not possible"),
|
|
"exp_succ": _("Export successful"),
|
|
"exp_in_home": _("Your zip file is in home directory"),
|
|
"imp_err": _("Import Error"),
|
|
"exp_err": _("Export Error"),
|
|
"exp_try": _("Export failed! Please try again"),
|
|
"tl_first": _("Please first import tunnel"),
|
|
"sel_list": _("Please select a tunnel from the list"),
|
|
"sign_len": _("The new name may contain only 12 characters"),
|
|
"zero_signs": _("At least one character must be entered"),
|
|
"false signs": _("No valid sign. These must not be used.\nBlank, Slash, Backslash and { }\n"),
|
|
"is_in_use": _("The tunnel is already in use"),
|
|
"no_valid_file": _("Oh... no valid Wireguard File!\nPlease select a valid Wireguard File"),
|
|
"tl_exist": _("Tunnel already available!\nPlease use another file for import")
|
|
|
|
}
|
|
TTIP: Dict[str, str] = {
|
|
#Strings for Tooltips
|
|
"start_tl": _("Click to start selected Wireguard Tunnel"),
|
|
"empty_list": _("No tunnels to start in the list"),
|
|
"stop_tl": _("Click to stop selected Wireguard Tunnel"),
|
|
"del_tl": _("Click to delete selected Wireguard Tunnel"),
|
|
"rename_tl": _("To rename a tunnel, you need to\nselect a tunnel from the list"),
|
|
"export_tl": _(" Click to export all\nWireguard Tunnel to Zipfile"),
|
|
"trash_tl": _("Click to delete a Wireguard Tunnel\nSelect from the list!"),
|
|
"autostart": _("To use the autostart, enable this Checkbox"),
|
|
"autostart_info": _("You must have at least one\ntunnel in the list,to use the autostart"),
|
|
"export_tl_info": _("No Tunnels in List for Export"),
|
|
"start_tl_info": _("Click to start selected Wireguard Tunnel"),
|
|
"rename_tl_info": _("To rename a tunnel, at least one must be in the list"),
|
|
"trash_tl_info": _("No tunnels to delete in the list"),
|
|
"list_auto_info": _("To use the autostart, a tunnel must be selected from the list")
|
|
|
|
}
|
|
|