Compare commits
4 Commits
Author | SHA1 | Date | |
---|---|---|---|
e1950cf8bf | |||
794dda346a | |||
a62c061350 | |||
298a3da73b |
21
Changelog
@ -6,11 +6,26 @@ My standard System: Linux Mint 22 Cinnamon
|
|||||||
- os import in common_tools.py replaced by other methods
|
- os import in common_tools.py replaced by other methods
|
||||||
- If Wire-Py already runs, prevent further start
|
- If Wire-Py already runs, prevent further start
|
||||||
- for loops with lists replaced by List Comprehensions
|
- for loops with lists replaced by List Comprehensions
|
||||||
|
- Tunnel in tk.canvas for modern look
|
||||||
|
- Replace Download Button with Lx Tools installer
|
||||||
|
|
||||||
### Added
|
### 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
|
### Added
|
||||||
13-04-20255
|
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.
|
- Tunnels are now read from the directory to view them in the list.
|
||||||
To display only own tunnels, and read errors are minimized.
|
To display only own tunnels, and read errors are minimized.
|
||||||
|
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
10-11-2024
|
10-11-2024
|
||||||
|
|
||||||
- Fix Checkbutton Autostart when first install Wire-Py
|
- Fix Checkbutton Autostart when first install Wire-Py
|
||||||
- Update Translate Files
|
- Update Translate Files
|
||||||
|
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
10-11-2024
|
10-11-2024
|
||||||
|
|
||||||
|
BIN
lx-icons/128/Lunix_Tools.png
Normal file
After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 6.9 KiB |
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 5.5 KiB |
BIN
lx-icons/128/question_mark.png
Normal file
After Width: | Height: | Size: 7.0 KiB |
BIN
lx-icons/128/warning.png
Normal file
After Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 10 KiB |
BIN
lx-icons/256/Lunix_Tools.png
Normal file
After Width: | Height: | Size: 40 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 9.8 KiB |
BIN
lx-icons/256/question_mark.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
lx-icons/256/warning.png
Normal file
After Width: | Height: | Size: 6.2 KiB |
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 20 KiB |
BIN
lx-icons/32/Lunix_Tools.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.2 KiB |
BIN
lx-icons/32/question_mark.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
lx-icons/32/warning.png
Normal file
After Width: | Height: | Size: 838 B |
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 1.9 KiB |
BIN
lx-icons/32/wg_vpn.png
Normal file
After Width: | Height: | Size: 5.8 KiB |
BIN
lx-icons/48/Lunix_Tools.png
Normal file
After Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 1.9 KiB |
BIN
lx-icons/48/question_mark.png
Normal file
After Width: | Height: | Size: 2.3 KiB |
BIN
lx-icons/48/warning.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 7.1 KiB After Width: | Height: | Size: 3.1 KiB |
BIN
lx-icons/64/Lunix_Tools.png
Normal file
After Width: | Height: | Size: 5.3 KiB |
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.5 KiB |
BIN
lx-icons/64/question_mark.png
Normal file
After Width: | Height: | Size: 3.1 KiB |
BIN
lx-icons/64/warning.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 8.7 KiB After Width: | Height: | Size: 4.5 KiB |
@ -5,53 +5,32 @@ from pathlib import Path
|
|||||||
import pwd
|
import pwd
|
||||||
import shutil
|
import shutil
|
||||||
from subprocess import CompletedProcess, run
|
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 = argparse.ArgumentParser()
|
||||||
parser.add_argument("--user", required=True, help="Username of the target file system")
|
parser.add_argument("--user", required=True, help="Username of the target file system")
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
_ = AppConfig.setup_translations()
|
||||||
try:
|
try:
|
||||||
# Retrieve UID and GID
|
# Retrieve UID and GID
|
||||||
user_info = pwd.getpwnam(args.user)
|
user_info = pwd.getpwnam(args.user)
|
||||||
uid = user_info.pw_uid # User ID (e.g., 1000)
|
uid = user_info.pw_uid # User ID (e.g., 1000)
|
||||||
gid = user_info.pw_gid # Group ID (e.g., 1000)
|
gid = user_info.pw_gid # Group ID (e.g., 1000)
|
||||||
except KeyError:
|
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)
|
exit(1)
|
||||||
|
|
||||||
keyfile: Path = Path(f"/home/{args.user}/.config/wire_py/pbwgk.pem")
|
crypted_tunnel: Path = Path(f"/home/{args.user}/.config/wire_py")
|
||||||
path_of_crypted_tunnel: Path = Path(f"/home/{args.user}/.config/wire_py")
|
|
||||||
|
|
||||||
if not keyfile.is_file():
|
if len([str(file) for file in crypted_tunnel.glob("*.dat")]) == 0:
|
||||||
process: CompletedProcess[str] = run(
|
pass
|
||||||
[
|
else:
|
||||||
"openssl",
|
crypted__tunnel = [str(file) for file in crypted_tunnel.glob("*.dat")]
|
||||||
"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")]
|
|
||||||
|
|
||||||
for tunnel_path in crypted__tunnel:
|
for tunnel_path in crypted__tunnel:
|
||||||
|
|
||||||
@ -74,11 +53,13 @@ if AppConfig.PUBLICKEY.exists():
|
|||||||
check=False,
|
check=False,
|
||||||
)
|
)
|
||||||
shutil.chown(f"{AppConfig.TEMP_DIR}/{base_name}.conf", uid, gid)
|
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
|
# Output from Openssl Error
|
||||||
if process.stderr:
|
if process.stderr:
|
||||||
logging.error(
|
MessageDialog(
|
||||||
f"{process.stderr} Error by [{tunnel_path}] Code: {process.returncode}",
|
"erro",
|
||||||
exc_info=True,
|
_(
|
||||||
|
f"{process.stderr} Error by [{tunnel_path}] Code: {process.returncode}"
|
||||||
|
),
|
||||||
|
title="Error decrypt",
|
||||||
)
|
)
|
||||||
|
@ -2,16 +2,19 @@
|
|||||||
""" This Script encrypt Wireguardfiles for Wirepy users for more Security """
|
""" This Script encrypt Wireguardfiles for Wirepy users for more Security """
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
|
import logging
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
import pwd
|
import pwd
|
||||||
import shutil
|
import shutil
|
||||||
from subprocess import CompletedProcess, run
|
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 = argparse.ArgumentParser()
|
||||||
parser.add_argument("--user", required=True, help="Username of the target file system")
|
parser.add_argument("--user", required=True, help="Username of the target file system")
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
LogConfig.logger(f"/home/{args.user}/.local/share/lxlogs/wirepy.log")
|
||||||
try:
|
try:
|
||||||
# Retrieve UID and GID
|
# Retrieve UID and GID
|
||||||
user_info = pwd.getpwnam(args.user)
|
user_info = pwd.getpwnam(args.user)
|
||||||
|
32
tunnel.py
@ -9,6 +9,7 @@ from subprocess import run, CompletedProcess
|
|||||||
import secrets
|
import secrets
|
||||||
from shared_libs.wp_app_config import AppConfig, Msg
|
from shared_libs.wp_app_config import AppConfig, Msg
|
||||||
from shared_libs.common_tools import LxTools, CryptoUtil
|
from shared_libs.common_tools import LxTools, CryptoUtil
|
||||||
|
from shared_libs.message import MessageDialog
|
||||||
|
|
||||||
# Translate
|
# Translate
|
||||||
_ = AppConfig.setup_translations()
|
_ = AppConfig.setup_translations()
|
||||||
@ -172,12 +173,8 @@ class Tunnel:
|
|||||||
CryptoUtil.decrypt(getpass.getuser())
|
CryptoUtil.decrypt(getpass.getuser())
|
||||||
if len([file.name for file in AppConfig.TEMP_DIR.glob("*.conf")]) == 0:
|
if len([file.name for file in AppConfig.TEMP_DIR.glob("*.conf")]) == 0:
|
||||||
|
|
||||||
LxTools.msg_window(
|
MessageDialog("info", Msg.STR["tl_first"], title=Msg.STR["sel_tl"])
|
||||||
AppConfig.IMAGE_PATHS["icon_info"],
|
|
||||||
AppConfig.IMAGE_PATHS["icon_msg"],
|
|
||||||
Msg.STR["sel_tl"],
|
|
||||||
Msg.STR["tl_first"],
|
|
||||||
)
|
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
wg_tar: str = f"{AppConfig.BASE_DIR}/{now_datetime}"
|
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:
|
with zipfile.ZipFile(f"{wg_tar}.zip", "r") as zf:
|
||||||
if zf.namelist():
|
if zf.namelist():
|
||||||
|
|
||||||
LxTools.msg_window(
|
MessageDialog(
|
||||||
AppConfig.IMAGE_PATHS["icon_info"],
|
"info",
|
||||||
AppConfig.IMAGE_PATHS["icon_vpn"],
|
|
||||||
Msg.STR["exp_succ"],
|
|
||||||
Msg.STR["exp_in_home"],
|
Msg.STR["exp_in_home"],
|
||||||
|
title=Msg.STR["exp_succ"],
|
||||||
)
|
)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
logging.error(
|
logging.error(
|
||||||
"There was a mistake at creating the Zip file. File is empty."
|
"There was a mistake at creating the Zip file. File is empty."
|
||||||
)
|
)
|
||||||
LxTools.msg_window(
|
MessageDialog(
|
||||||
AppConfig.IMAGE_PATHS["icon_error"],
|
"error", Msg.STR["exp_zip"], title=Msg.STR["exp_err"]
|
||||||
AppConfig.IMAGE_PATHS["icon_msg"],
|
|
||||||
Msg.STR["exp_err"],
|
|
||||||
Msg.STR["exp_zip"],
|
|
||||||
)
|
)
|
||||||
|
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
except PermissionError:
|
except PermissionError:
|
||||||
@ -217,12 +212,7 @@ class Tunnel:
|
|||||||
pass
|
pass
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.error(f"Export failed: {str(e)}")
|
logging.error(f"Export failed: {str(e)}")
|
||||||
LxTools.msg_window(
|
MessageDialog("error", Msg.STR["exp_try"], title=Msg.STR["exp_err"])
|
||||||
AppConfig.IMAGE_PATHS["icon_error"],
|
|
||||||
AppConfig.IMAGE_PATHS["icon_msg"],
|
|
||||||
Msg.STR["exp_err"],
|
|
||||||
Msg.STR["exp_try"],
|
|
||||||
)
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
finally:
|
finally:
|
||||||
|
27
wirepy.py
@ -8,11 +8,12 @@ import shutil
|
|||||||
import sys
|
import sys
|
||||||
import tkinter as tk
|
import tkinter as tk
|
||||||
import webbrowser
|
import webbrowser
|
||||||
|
from functools import partial
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from subprocess import CompletedProcess, run
|
from subprocess import CompletedProcess, run
|
||||||
from tkinter import TclError, filedialog, ttk
|
from tkinter import TclError, filedialog, ttk
|
||||||
from tunnel import Tunnel
|
from tunnel import Tunnel
|
||||||
|
from shared_libs.message import MessageDialog
|
||||||
from shared_libs.gitea import GiteaUpdate
|
from shared_libs.gitea import GiteaUpdate
|
||||||
from shared_libs.common_tools import (
|
from shared_libs.common_tools import (
|
||||||
LxTools,
|
LxTools,
|
||||||
@ -462,10 +463,6 @@ class FrameWidgets(ttk.Frame):
|
|||||||
"""
|
"""
|
||||||
a tk.Toplevel window
|
a tk.Toplevel window
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def link_btn() -> None:
|
|
||||||
webbrowser.open("https://git.ilunix.de/punix/Wire-Py")
|
|
||||||
|
|
||||||
msg_t = _(
|
msg_t = _(
|
||||||
"Wire-Py a simple Wireguard Gui for Linux systems.\n\n"
|
"Wire-Py a simple Wireguard Gui for Linux systems.\n\n"
|
||||||
"Wire-Py is open source software written in Python.\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"
|
"Use without warranty!\n"
|
||||||
)
|
)
|
||||||
|
|
||||||
LxTools.msg_window(
|
MessageDialog(
|
||||||
AppConfig.IMAGE_PATHS["icon_vpn"],
|
"info",
|
||||||
AppConfig.IMAGE_PATHS["icon_vpn"],
|
|
||||||
_("Info"),
|
|
||||||
msg_t,
|
msg_t,
|
||||||
_("Go to Wire-Py git"),
|
buttons=["OK", _("Go to Wire-Py git")],
|
||||||
link_btn,
|
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:
|
def update_setting(self, update_res) -> None:
|
||||||
@ -848,6 +849,7 @@ class FrameWidgets(ttk.Frame):
|
|||||||
self.selected_option.set(1)
|
self.selected_option.set(1)
|
||||||
self.autoconnect_var.set("")
|
self.autoconnect_var.set("")
|
||||||
self.auto_con = ConfigManager.get("autostart")
|
self.auto_con = ConfigManager.get("autostart")
|
||||||
|
AppConfig.get_autostart_content()
|
||||||
|
|
||||||
else:
|
else:
|
||||||
self.selected_option.set(0)
|
self.selected_option.set(0)
|
||||||
@ -1144,10 +1146,9 @@ class FrameWidgets(ttk.Frame):
|
|||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
AppConfig.ensure_directories()
|
AppConfig.ensure_directories()
|
||||||
AppConfig.create_default_settings()
|
AppConfig.create_default_settings()
|
||||||
CryptoUtil.decrypt(getpass.getuser(), AppConfig.CONFIG_DIR)
|
|
||||||
_ = AppConfig.setup_translations()
|
_ = AppConfig.setup_translations()
|
||||||
LxTools.sigi(AppConfig.TEMP_DIR)
|
LxTools.sigi(AppConfig.TEMP_DIR)
|
||||||
|
CryptoUtil.decrypt(getpass.getuser())
|
||||||
window = Wirepy()
|
window = Wirepy()
|
||||||
LogConfig.logger(ConfigManager.get("logfile"))
|
LogConfig.logger(ConfigManager.get("logfile"))
|
||||||
"""
|
"""
|
||||||
|
@ -57,7 +57,7 @@ class AppConfig:
|
|||||||
|
|
||||||
# Updates
|
# Updates
|
||||||
# 1 = 1. Year, 09 = Month of the Year, 2924 = Day and Year of the Year
|
# 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"
|
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"
|
DOWNLOAD_URL: str = "https://git.ilunix.de/punix/Wire-Py/archive"
|
||||||
|
|
||||||
@ -153,6 +153,8 @@ class AppConfig:
|
|||||||
text=True,
|
text=True,
|
||||||
check=False,
|
check=False,
|
||||||
)
|
)
|
||||||
|
if process.returncode == 0:
|
||||||
|
logging.info(process.stdout, exc_info=True)
|
||||||
|
|
||||||
if process.stderr:
|
if process.stderr:
|
||||||
logging.error(f"{process.stderr} Code: {process.returncode}", exc_info=True)
|
logging.error(f"{process.stderr} Code: {process.returncode}", exc_info=True)
|
||||||
|