5 Commits

37 changed files with 69 additions and 75 deletions

View File

@ -6,11 +6,26 @@ My standard System: Linux Mint 22 Cinnamon
- os import in common_tools.py replaced by other methods
- If Wire-Py already runs, prevent further start
- for loops with lists replaced by List Comprehensions
- Tunnel in tk.canvas for modern look
- Replace Download Button with Lx Tools installer
### Added
03-06-2025
14-06-2025
- replace msg_window with MassageDialog
- vpn stop icon corrected
### Added
07-06-2025
- ssl_decrypt now directly checks whether encrypted files are located in the specified directory.
- This method has been removed from common_tools. The path has been adjusted ssl_decrypt likely
had an incorrect path. No files were decrypted. This has been fixed.
- Key generation has been removed from ssl_decrypt, as it is only needed in ssl_encrypt.
- Logviewer now in the settings menu. Moduls now as libs in share_libs.
- The Lx Tools installer is there to ensure that everything required for the selected app is installed.
-
### Added
13-04-20255
@ -49,12 +64,14 @@ My standard System: Linux Mint 22 Cinnamon
- Tunnels are now read from the directory to view them in the list.
To display only own tunnels, and read errors are minimized.
### Added
10-11-2024
- Fix Checkbutton Autostart when first install Wire-Py
- Update Translate Files
### Added
10-11-2024

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

BIN
lx-icons/128/warning.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
lx-icons/256/warning.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 20 KiB

BIN
lx-icons/32/Lunix_Tools.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
lx-icons/32/warning.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 838 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
lx-icons/32/wg_vpn.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

BIN
lx-icons/48/Lunix_Tools.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
lx-icons/48/warning.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

BIN
lx-icons/64/Lunix_Tools.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

BIN
lx-icons/64/warning.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.7 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

View File

@ -5,53 +5,32 @@ from pathlib import Path
import pwd
import shutil
from subprocess import CompletedProcess, run
from shared_libs.wp_app_config import AppConfig, logging
from shared_libs.wp_app_config import AppConfig
from shared_libs.common_tools import LxTools
from shared_libs.message import MessageDialog
parser = argparse.ArgumentParser()
parser.add_argument("--user", required=True, help="Username of the target file system")
args = parser.parse_args()
_ = AppConfig.setup_translations()
try:
# Retrieve UID and GID
user_info = pwd.getpwnam(args.user)
uid = user_info.pw_uid # User ID (e.g., 1000)
gid = user_info.pw_gid # Group ID (e.g., 1000)
except KeyError:
logging.error(f"User '{args.user}' not found.", exc_info=True)
MessageDialog("error", _(f"User '{args.user}' not found."), title="Error decrypt")
exit(1)
keyfile: Path = Path(f"/home/{args.user}/.config/wire_py/pbwgk.pem")
path_of_crypted_tunnel: Path = Path(f"/home/{args.user}/.config/wire_py")
crypted_tunnel: Path = Path(f"/home/{args.user}/.config/wire_py")
if not keyfile.is_file():
process: CompletedProcess[str] = run(
[
"openssl",
"rsa",
"-in",
AppConfig.SYSTEM_PATHS["pkey_path"],
"-out",
keyfile,
"-outform",
"PEM",
"-pubout",
],
capture_output=True,
text=True,
check=False,
)
if process.returncode == 0:
logging.info("Public key generated successfully.", exc_info=True)
else:
logging.error(
f"Error with the following code... {process.returncode}", exc_info=True
)
shutil.chown(keyfile, uid, gid)
if AppConfig.PUBLICKEY.exists():
crypted__tunnel = [str(file) for file in path_of_crypted_tunnel.glob("*.dat")]
if len([str(file) for file in crypted_tunnel.glob("*.dat")]) == 0:
pass
else:
crypted__tunnel = [str(file) for file in crypted_tunnel.glob("*.dat")]
for tunnel_path in crypted__tunnel:
@ -74,11 +53,13 @@ if AppConfig.PUBLICKEY.exists():
check=False,
)
shutil.chown(f"{AppConfig.TEMP_DIR}/{base_name}.conf", uid, gid)
logging.info(f"Processing of the file: {tunnel_path}", exc_info=True)
# Output from Openssl Error
if process.stderr:
logging.error(
f"{process.stderr} Error by [{tunnel_path}] Code: {process.returncode}",
exc_info=True,
MessageDialog(
"erro",
_(
f"{process.stderr} Error by [{tunnel_path}] Code: {process.returncode}"
),
title="Error decrypt",
)

View File

@ -2,16 +2,19 @@
""" This Script encrypt Wireguardfiles for Wirepy users for more Security """
import argparse
import logging
from pathlib import Path
import pwd
import shutil
from subprocess import CompletedProcess, run
from shared_libs.wp_app_config import AppConfig, logging
from shared_libs.wp_app_config import AppConfig
from shared_libs.common_tools import LogConfig
parser = argparse.ArgumentParser()
parser.add_argument("--user", required=True, help="Username of the target file system")
args = parser.parse_args()
LogConfig.logger(f"/home/{args.user}/.local/share/lxlogs/wirepy.log")
try:
# Retrieve UID and GID
user_info = pwd.getpwnam(args.user)

View File

@ -9,6 +9,7 @@ from subprocess import run, CompletedProcess
import secrets
from shared_libs.wp_app_config import AppConfig, Msg
from shared_libs.common_tools import LxTools, CryptoUtil
from shared_libs.message import MessageDialog
# Translate
_ = AppConfig.setup_translations()
@ -172,12 +173,8 @@ class Tunnel:
CryptoUtil.decrypt(getpass.getuser())
if len([file.name for file in AppConfig.TEMP_DIR.glob("*.conf")]) == 0:
LxTools.msg_window(
AppConfig.IMAGE_PATHS["icon_info"],
AppConfig.IMAGE_PATHS["icon_msg"],
Msg.STR["sel_tl"],
Msg.STR["tl_first"],
)
MessageDialog("info", Msg.STR["tl_first"], title=Msg.STR["sel_tl"])
return False
else:
wg_tar: str = f"{AppConfig.BASE_DIR}/{now_datetime}"
@ -186,22 +183,20 @@ class Tunnel:
with zipfile.ZipFile(f"{wg_tar}.zip", "r") as zf:
if zf.namelist():
LxTools.msg_window(
AppConfig.IMAGE_PATHS["icon_info"],
AppConfig.IMAGE_PATHS["icon_vpn"],
Msg.STR["exp_succ"],
MessageDialog(
"info",
Msg.STR["exp_in_home"],
title=Msg.STR["exp_succ"],
)
else:
logging.error(
"There was a mistake at creating the Zip file. File is empty."
)
LxTools.msg_window(
AppConfig.IMAGE_PATHS["icon_error"],
AppConfig.IMAGE_PATHS["icon_msg"],
Msg.STR["exp_err"],
Msg.STR["exp_zip"],
MessageDialog(
"error", Msg.STR["exp_zip"], title=Msg.STR["exp_err"]
)
return False
return True
except PermissionError:
@ -217,12 +212,7 @@ class Tunnel:
pass
except Exception as e:
logging.error(f"Export failed: {str(e)}")
LxTools.msg_window(
AppConfig.IMAGE_PATHS["icon_error"],
AppConfig.IMAGE_PATHS["icon_msg"],
Msg.STR["exp_err"],
Msg.STR["exp_try"],
)
MessageDialog("error", Msg.STR["exp_try"], title=Msg.STR["exp_err"])
return False
finally:

View File

@ -8,11 +8,12 @@ import shutil
import sys
import tkinter as tk
import webbrowser
from functools import partial
from pathlib import Path
from subprocess import CompletedProcess, run
from tkinter import TclError, filedialog, ttk
from tunnel import Tunnel
from shared_libs.message import MessageDialog
from shared_libs.gitea import GiteaUpdate
from shared_libs.common_tools import (
LxTools,
@ -462,10 +463,6 @@ class FrameWidgets(ttk.Frame):
"""
a tk.Toplevel window
"""
def link_btn() -> None:
webbrowser.open("https://git.ilunix.de/punix/Wire-Py")
msg_t = _(
"Wire-Py a simple Wireguard Gui for Linux systems.\n\n"
"Wire-Py is open source software written in Python.\n\n"
@ -473,13 +470,17 @@ class FrameWidgets(ttk.Frame):
"Use without warranty!\n"
)
LxTools.msg_window(
AppConfig.IMAGE_PATHS["icon_vpn"],
AppConfig.IMAGE_PATHS["icon_vpn"],
_("Info"),
MessageDialog(
"info",
msg_t,
_("Go to Wire-Py git"),
link_btn,
buttons=["OK", _("Go to Wire-Py git")],
title=_("Info"),
commands=[
None,
partial(webbrowser.open, "https://git.ilunix.de/punix/Wire-Py"),
],
icon=AppConfig.IMAGE_PATHS["icon_vpn"],
wraplength=420,
)
def update_setting(self, update_res) -> None:
@ -848,6 +849,7 @@ class FrameWidgets(ttk.Frame):
self.selected_option.set(1)
self.autoconnect_var.set("")
self.auto_con = ConfigManager.get("autostart")
AppConfig.get_autostart_content()
else:
self.selected_option.set(0)
@ -1144,10 +1146,9 @@ class FrameWidgets(ttk.Frame):
if __name__ == "__main__":
AppConfig.ensure_directories()
AppConfig.create_default_settings()
CryptoUtil.decrypt(getpass.getuser(), AppConfig.CONFIG_DIR)
_ = AppConfig.setup_translations()
LxTools.sigi(AppConfig.TEMP_DIR)
CryptoUtil.decrypt(getpass.getuser())
window = Wirepy()
LogConfig.logger(ConfigManager.get("logfile"))
"""

View File

@ -57,7 +57,7 @@ class AppConfig:
# Updates
# 1 = 1. Year, 09 = Month of the Year, 2924 = Day and Year of the Year
VERSION: str = "v. 2.04.1725"
VERSION: str = "v. 2.06.0725"
UPDATE_URL: str = "https://git.ilunix.de/api/v1/repos/punix/Wire-Py/releases"
DOWNLOAD_URL: str = "https://git.ilunix.de/punix/Wire-Py/archive"
@ -153,6 +153,8 @@ class AppConfig:
text=True,
check=False,
)
if process.returncode == 0:
logging.info(process.stdout, exc_info=True)
if process.stderr:
logging.error(f"{process.stderr} Code: {process.returncode}", exc_info=True)