korreckturen throughout code

This commit is contained in:
Désiré Werner Menrath 2025-04-26 00:28:34 +02:00
parent f6204c9071
commit 1a853d4ff1
6 changed files with 255 additions and 222 deletions

51
.idea/workspace.xml generated
View File

@ -9,7 +9,6 @@
<change beforePath="$PROJECT_DIR$/cls_mth_fc.py" beforeDir="false" afterPath="$PROJECT_DIR$/cls_mth_fc.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ssl_decrypt.py" beforeDir="false" afterPath="$PROJECT_DIR$/ssl_decrypt.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ssl_encrypt.py" beforeDir="false" afterPath="$PROJECT_DIR$/ssl_encrypt.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/start_wg.py" beforeDir="false" afterPath="$PROJECT_DIR$/start_wg.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/wirepy.py" beforeDir="false" afterPath="$PROJECT_DIR$/wirepy.py" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
@ -34,8 +33,7 @@
<option name="UPDATE_TYPE" value="REBASE" />
</component>
<component name="HighlightingSettingsPerFile">
<setting file="file://$PROJECT_DIR$/wg_func.py" root0="SKIP_INSPECTION" />
<setting file="file://$PROJECT_DIR$/wg_main.py" root0="FORCE_HIGHLIGHTING" />
<setting file="file:///usr/local/bin/ssl_decrypt.py" root0="SKIP_INSPECTION" />
</component>
<component name="ProjectColorInfo">{
&quot;associatedIndex&quot;: 3
@ -48,28 +46,28 @@
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent"><![CDATA[{
"keyToString": {
"ASKED_ADD_EXTERNAL_FILES": "true",
"Python.INSTALL.executor": "Run",
"Python.cls_mth_fc.executor": "Run",
"Python.install.executor": "Run",
"Python.main.executor": "Run",
"Python.messagebox.executor": "Run",
"Python.start_wg.executor": "Run",
"Python.testtheme.executor": "Run",
"Python.wg_func.executor": "Run",
"Python.wg_main.executor": "Run",
"Python.wirepy.executor": "Run",
"RunOnceActivity.ShowReadmeOnStart": "true",
"RunOnceActivity.git.unshallow": "true",
"Shell Script.install.executor": "Run",
"Shell Script.run_as.executor": "Run",
"git-widget-placeholder": "21-04-2025-new-tooltip",
"last_opened_file_path": "/home/punix/Pyapps/wire-py",
"settings.editor.selected.configurable": "ml.llm.LLMConfigurable"
<component name="PropertiesComponent">{
&quot;keyToString&quot;: {
&quot;ASKED_ADD_EXTERNAL_FILES&quot;: &quot;true&quot;,
&quot;Python.INSTALL.executor&quot;: &quot;Run&quot;,
&quot;Python.cls_mth_fc.executor&quot;: &quot;Run&quot;,
&quot;Python.install.executor&quot;: &quot;Run&quot;,
&quot;Python.main.executor&quot;: &quot;Run&quot;,
&quot;Python.messagebox.executor&quot;: &quot;Run&quot;,
&quot;Python.start_wg.executor&quot;: &quot;Run&quot;,
&quot;Python.testtheme.executor&quot;: &quot;Run&quot;,
&quot;Python.wg_func.executor&quot;: &quot;Run&quot;,
&quot;Python.wg_main.executor&quot;: &quot;Run&quot;,
&quot;Python.wirepy.executor&quot;: &quot;Run&quot;,
&quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
&quot;RunOnceActivity.git.unshallow&quot;: &quot;true&quot;,
&quot;Shell Script.install.executor&quot;: &quot;Run&quot;,
&quot;Shell Script.run_as.executor&quot;: &quot;Run&quot;,
&quot;git-widget-placeholder&quot;: &quot;21-04-2025-new-tooltip&quot;,
&quot;last_opened_file_path&quot;: &quot;/home/punix/Pyapps/wire-py&quot;,
&quot;settings.editor.selected.configurable&quot;: &quot;ml.llm.LLMConfigurable&quot;
}
}]]></component>
}</component>
<component name="RecentsManager">
<key name="CopyFile.RECENT_KEYS">
<recent name="$PROJECT_DIR$/lx-icons" />
@ -630,6 +628,11 @@
<line>1128</line>
<option name="timeStamp" value="3" />
</line-breakpoint>
<line-breakpoint enabled="true" suspend="THREAD" type="python-line">
<url>file://$PROJECT_DIR$/ssl_decrypt.py</url>
<line>3</line>
<option name="timeStamp" value="4" />
</line-breakpoint>
</breakpoints>
</breakpoint-manager>
</component>

View File

@ -8,11 +8,12 @@ import signal
import subprocess
import sys
import tkinter as tk
from typing import Optional, Dict, Any, NoReturn, TextIO, Tuple, List
import zipfile
from datetime import datetime
from pathlib import Path
from subprocess import check_call
from tkinter import ttk
from subprocess import check_call, CompletedProcess
from tkinter import ttk, Toplevel
import requests
@ -32,15 +33,15 @@ class Create:
"""
@staticmethod
def dir_and_files():
def dir_and_files() -> None:
"""
check and create folders and files if not present
"""
pth = Path.home() / ".config/wire_py"
pth: Path = Path.home() / ".config/wire_py"
pth.mkdir(parents=True, exist_ok=True)
sett = Path.home() / ".config/wire_py/settings"
ks = Path.home() / ".config/wire_py/keys"
sett: Path = Path.home() / ".config/wire_py/settings"
ks: Path = Path.home() / ".config/wire_py/keys"
if sett.exists():
pass
@ -56,14 +57,14 @@ class Create:
ks.touch()
@staticmethod
def files_for_autostart():
def files_for_autostart() -> None:
"""
check and create file for auto start if not present and enable the service
check and create a file for auto start if not present and enable the service
"""
pth2 = Path.home() / ".config/systemd/user"
pth2: Path = Path.home() / ".config/systemd/user"
pth2.mkdir(parents=True, exist_ok=True)
wg_ser = Path.home() / ".config/systemd/user/wg_start.service"
wg_ser: Path = Path.home() / ".config/systemd/user/wg_start.service"
if wg_ser.exists():
pass
@ -76,24 +77,24 @@ class Create:
check_call(["systemctl", "--user", "enable", "wg_start.service"])
@staticmethod
def make_dir():
"""Dirname "tlecdewg" = Tunnel Encrypt Decrypt Wireguard"""
def make_dir() -> None:
"""Folder Name "tlecdewg" = Tunnel Encrypt Decrypt Wireguard"""
dirname = Path("/tmp/tlecdcwg/")
if dirname.exists():
folder_path: Path = Path("/tmp/tlecdcwg/")
if folder_path.exists():
pass
else:
dirname.mkdir()
folder_path.mkdir()
@staticmethod
def decrypt():
def decrypt() -> None:
"""
This start ssl_decrypt file
Starts SSL dencrypt
"""
process = subprocess.run(["pkexec", "/usr/local/bin/ssl_decrypt.py"], stdout=subprocess.PIPE, text=True,
check=True)
path = Path.home() / ".config/wire_py/"
file_in_path = list(path.rglob("*.dat"))
process: CompletedProcess[str] = subprocess.run(["pkexec", "/usr/local/bin/ssl_decrypt.py"],
stdout=subprocess.PIPE, text=True, check=True)
path: Path = Path.home() / ".config/wire_py/"
file_in_path: list[Path] = list(path.rglob("*.dat"))
if file_in_path:
if process.returncode == 0:
print("File successfully decrypted...")
@ -103,12 +104,12 @@ class Create:
print(_("Ready for import"))
@staticmethod
def encrypt():
def encrypt() -> None:
"""
this start ssl_encrypt file
Starts SSL encryption
"""
process = subprocess.run(["pkexec", "/usr/local/bin/ssl_encrypt.py"], stdout=subprocess.PIPE, text=True,
check=True)
process: CompletedProcess[str] = subprocess.run(["pkexec", "/usr/local/bin/ssl_encrypt.py"],
stdout=subprocess.PIPE, text=True, check=True)
print(process.stdout)
if process.returncode == 0:
print("All Files successfully encrypted...")
@ -121,38 +122,37 @@ class LxTools(tk.Tk):
Class LinuxTools methods that can also be used for other apps
"""
def __init__(self, *args, **kwargs):
def __init__(self, *args: Any, **kwargs: Any) -> None:
super().__init__(*args, **kwargs)
@staticmethod
def uos():
def uos() -> None:
"""
uos = LOGIN USERNAME
This method displays the user name of the logged-in user,
This method displays the username of the logged-in user,
even if you are rooted in a shell
"""
logname = f"{Path.home()}"[6:]
file = Path.home() / "/tmp/.loguser"
log_name: str = f"{Path.home()}"[6:]
file: Path = Path.home() / "/tmp/.log_user"
with open(file, "w", encoding="utf-8") as f:
f.write(logname)
f.write(log_name)
@staticmethod
def clean_files(dirname=None, file=None):
def clean_files(folder_path: Path = None, file: Path = None) -> None:
"""
method that can be added after need to delete a folder and a file when quitting.
Args:
dirname (_folder_, optional): _path to folder_. Defaults to None.
file (_file_, optional): _path to file_. Defaults to None.
:param file: default None
:param folder_path: default None
"""
if dirname is not None:
shutil.rmtree(dirname)
if folder_path is not None:
shutil.rmtree(folder_path)
if file is not None:
Path.unlink(file)
@staticmethod
def if_tip(path):
def if_tip(path: Path) -> bool:
"""
method that writes in file whether tooltip is displayed or not
"""
@ -165,83 +165,93 @@ class LxTools(tk.Tk):
return tip
@staticmethod
def msg_window(img_w, img_i, w_title, w_txt, txt2=None, com=None):
def msg_window(img_w: str, img_i: str, w_title: str, w_txt: str, txt2: Optional[str] = None,
com: Optional[str] = None) -> None:
"""
Method for different message windows for the user. with 4 arguments to be passed.
To create messages with your own images, icons, and titles.
As an alternative to Python Messagebox.
Paths to images must be specified: r'/usr/share/icons/lx-icons/64/info.png'
img_w = Image for Tk Window
img_i = Image for Icon
w_title = Windows Title
w_txt = Text for Tk Window
txt2 = Text for Button two
com = function for Button command
Creates message windows
:argument img_w = Image for Tk Window
:argument img_i = Image for Icon
:argument w_title = Windows Title
:argument w_txt = Text for Tk Window
:argument txt2 = Text for Button two
:argument com = function for Button command
"""
msg = tk.Toplevel()
msg: tk.Toplevel = tk.Toplevel()
msg.resizable(width=False, height=False)
msg.title(w_title)
msg.configure(pady=15, padx=15)
msg.img = tk.PhotoImage(file=img_w)
msg.i_window = tk.Label(msg, image=msg.img)
label = tk.Label(msg, text=w_txt)
label: tk.Label = tk.Label(msg, text=w_txt)
label.grid(column=1, row=0)
if txt2 is not None and com is not None:
label.config(font=("Ubuntu", 11), padx=15, justify="left")
msg.i_window.grid(column=0, row=0, sticky="nw")
button2 = ttk.Button(msg, text=f"{txt2}", command=com, padding=4)
button2: ttk.Button = ttk.Button(msg, text=f"{txt2}", command=com, padding=4)
button2.grid(column=0, row=1, sticky="e", columnspan=2)
button = ttk.Button(msg, text="OK", command=msg.destroy, padding=4)
button: ttk.Button = ttk.Button(msg, text="OK", command=msg.destroy, padding=4)
button.grid(column=0, row=1, sticky="w", columnspan=2)
else:
label.config(font=("Ubuntu", 11), padx=15)
msg.i_window.grid(column=0, row=0)
button = ttk.Button(msg, text="OK", command=msg.destroy, padding=4)
button: ttk.Button = ttk.Button(msg, text="OK", command=msg.destroy, padding=4)
button.grid(column=0, columnspan=2, row=1)
img_i = tk.PhotoImage(file=img_i)
img_i: tk.PhotoImage = tk.PhotoImage(file=img_i)
msg.iconphoto(True, img_i)
msg.columnconfigure(0, weight=1)
msg.rowconfigure(0, weight=1)
msg.winfo_toplevel()
@staticmethod
def sigi(dirname=None, file=None):
def sigi(file_path: Optional[Path] = None, file: Optional[Path] = None) -> None:
"""
function for clean up after break
Function for cleanup after a program interruption
:param file: Optional - File to be deleted
:param file_path: Optional - Directory to be deleted
"""
def signal_handler(signum, frame):
def signal_handler(signum: int, frame: Any) -> NoReturn:
"""
Determine clear text names for signal numbers
Determines clear text names for signal numbers and handles signals
Args:
signum: The signal number
frame: The current stack frame
Returns:
NoReturn since the function either exits the program or continues execution
"""
signals_to_names_dict = dict(
(getattr(signal, n), n)
for n in dir(signal)
if n.startswith("SIG") and "_" not in n
)
signame = signals_to_names_dict.get(signum, f"Unnamed signal: {signum}")
signals_to_names_dict: Dict[int, str] = dict((getattr(signal, n), n) for n in dir(signal)
if n.startswith("SIG") and "_" not in n)
signal_name: str = signals_to_names_dict.get(signum, f"Unnamed signal: {signum}")
# End program for certain signals, report to others only reception
if signum in (signal.SIGINT, signal.SIGTERM):
exit_code = 1
print(f"\nSignal {signame} {(signum)} received. => Aborting with exit code {exit_code}.")
LxTools.clean_files(dirname, file)
exit_code: int = 1
print(f"\nSignal {signal_name} {signum} received. => Aborting with exit code {exit_code}.")
LxTools.clean_files(file_path, file)
print("Breakdown by user...")
sys.exit(exit_code)
else:
print(f"Signal {signum} received and ignored.")
LxTools.clean_files(dirname, file)
LxTools.clean_files(file_path, file)
print("Process unexpectedly ended...")
# Register signal handlers for various signals
signal.signal(signal.SIGINT, signal_handler)
signal.signal(signal.SIGTERM, signal_handler)
signal.signal(signal.SIGHUP, signal_handler)
class GiteaUpdate:
"""
Calling download requests the download URL of the running script,
@ -250,63 +260,76 @@ class GiteaUpdate:
"""
@staticmethod
def api_down(update_api_url, version, file=None):
def api_down(update_api_url: str, version: str, file: Optional[Path] = None) -> str:
"""
Calling api_down requests the URL and the version of the running script.
Example: version = 'v. 1.1.1.1' GiteaUpdate.api_down(http://example.de, version)
Checks for updates via API
Args:
update_api_url: Update API URL
version: Current version
file: Optional - Configuration file
Returns:
New version or status message
"""
try:
response = requests.get(update_api_url, timeout=10)
response_dict = response.json()
response_dict = response_dict[0]
response: requests.Response = requests.get(update_api_url, timeout=10)
response_dict: Any = response.json()
response_dict: Dict[str, Any] = response_dict[0]
with open(file, "r", encoding="utf-8") as set_f:
set_f = set_f.read()
if "on\n" in set_f:
if version[3:] != response_dict["tag_name"]:
req = response_dict["tag_name"]
req: str = response_dict["tag_name"]
else:
req = "No Updates"
req: str = "No Updates"
else:
req = "False"
req: str = "False"
return req
except requests.exceptions.RequestException:
req = "No Internet Connection!"
req: str = "No Internet Connection!"
return req
@staticmethod
def download(urld, down_ok_image, down_not_ok_image, res):
def download(urld: str, down_ok_image: str, down_not_ok_image: str, res: str) -> None:
"""
this is for download new Version of wirepy
Downloads new version of wirepy
Args:
urld: Download URL
down_ok_image: Path to success image
down_not_ok_image: Path to error image
res: Result filename
"""
try:
to_down = f"wget -qP {Path.home()} {" "} {urld}"
result = subprocess.call(to_down, shell=True)
to_down: str = f"wget -qP {Path.home()} {" "} {urld}"
result: int = subprocess.call(to_down, shell=True)
if result == 0:
shutil.chown(f"{Path.home()}/{res}.zip", 1000, 1000)
# img_w, img_i, w_title, w_txt hand over
iw = r"/usr/share/icons/lx-icons/64/info.png"
ii = down_ok_image
wt = _("Download Successful")
msg_t = _("Your zip file is in home directory")
# Message window variables
iw: str = r"/usr/share/icons/lx-icons/64/info.png"
ii: str = down_ok_image
wt: str = _("Download Successful")
msg_t: str = _("Your zip file is in home directory")
LxTools.msg_window(iw, ii, wt, msg_t)
else:
# img_w, img_i, w_title, w_txt hand over
iw = r"/usr/share/icons/lx-icons/64/error.png"
ii = down_not_ok_image
wt = _("Download error")
msg_t = _("Download failed! Please try again")
# Error message window variables
iw: str = r"/usr/share/icons/lx-icons/64/error.png"
ii: str = down_not_ok_image
wt: str = _("Download error")
msg_t: str = _("Download failed! Please try again")
LxTools.msg_window(iw, ii, wt, msg_t)
except subprocess.CalledProcessError:
# img_w, img_i, w_title, w_txt hand over
iw = r"/usr/share/icons/lx-icons/64/error.png"
ii = down_not_ok_image
wt = _("Download error")
msg_t = _("Download failed! No internet connection!")
# Exception message window variables
iw: str = r"/usr/share/icons/lx-icons/64/error.png"
ii: str = down_not_ok_image
wt: str = _("Download error")
msg_t: str = _("Download failed! No internet connection!")
LxTools.msg_window(iw, ii, wt, msg_t)
@ -316,15 +339,14 @@ class Tunnel:
"""
@classmethod
def con_to_dict(cls, file):
def con_to_dict(cls, file: TextIO) -> Tuple[str, str, str, Optional[str]]:
"""
The config file is packed into a dictionary,
to display the values Address , DNS and Peer in the labels
Returns tuple of (address, dns, endpoint, pre_key)
"""
dictlist = []
dictlist: List[str] = []
for lines in file.readlines():
line_plit = lines.split()
line_plit: List[str] = lines.split()
dictlist = dictlist + line_plit
dictlist.remove("[Interface]")
dictlist.remove("[Peer]")
@ -336,33 +358,33 @@ class Tunnel:
# Here is the beginning (Loop) of convert List to Dictionary
for _ in dictlist:
a = [dictlist[0], dictlist[1]]
b = [dictlist[2], dictlist[3]]
c = [dictlist[4], dictlist[5]]
d = [dictlist[6], dictlist[7]]
e = [dictlist[8], dictlist[9]]
f = [dictlist[10], dictlist[11]]
g = [dictlist[12], dictlist[13]]
h = [dictlist[14], dictlist[15]]
new_list = [a, b, c, d, e, f, g, h]
final_dict = {}
a: List[str] = [dictlist[0], dictlist[1]]
b: List[str] = [dictlist[2], dictlist[3]]
c: List[str] = [dictlist[4], dictlist[5]]
d: List[str] = [dictlist[6], dictlist[7]]
e: List[str] = [dictlist[8], dictlist[9]]
f: List[str] = [dictlist[10], dictlist[11]]
g: List[str] = [dictlist[12], dictlist[13]]
h: List[str] = [dictlist[14], dictlist[15]]
new_list: List[List[str]] = [a, b, c, d, e, f, g, h]
final_dict: Dict[str, str] = {}
for elements in new_list:
final_dict[elements[0]] = elements[1]
# end... result a Dictionary
address = final_dict["Address"]
dns = final_dict["DNS"]
address: str = final_dict["Address"]
dns: str = final_dict["DNS"]
if "," in dns:
dns = dns[:-1]
endpoint = final_dict["Endpoint"]
pre_key = final_dict.get("PresharedKey")
endpoint: str = final_dict["Endpoint"]
pre_key: Optional[str] = final_dict.get("PresharedKey")
if pre_key is None:
pre_key = final_dict.get("PreSharedKey")
pre_key: Optional[str] = final_dict.get("PreSharedKey")
return address, dns, endpoint, pre_key
@staticmethod
def active():
def active() -> str:
"""
Shows the Active Tunnel
"""
@ -375,59 +397,59 @@ class Tunnel:
return active
@staticmethod
def list():
def list() -> List[str]:
"""
Shows all existing Wireguard tunnels a login user
Returns a list of Wireguard tunnel names
"""
dirname = Path("/tmp/tlecdcwg/")
wg_s = os.listdir(dirname)
folder_path: Path = Path("/tmp/tlecdcwg/")
wg_s: List[str] = os.listdir(folder_path)
return wg_s
@staticmethod
def export():
def export() -> None:
"""
This will export the tunnels.
A zipfile with current date and time is created
in the user's home directory with correct right
A zipfile with the current date and time is created
in the user's home directory with the correct right
"""
now_time = datetime.now()
now_datetime = now_time.strftime("wg-exp-%m-%d-%Y-%H:%M")
tl = Tunnel.list()
now_time: datetime = datetime.now()
now_datetime: str = now_time.strftime("wg-exp-%m-%d-%Y-%H:%M")
tl: List[str] = Tunnel.list()
try:
if len(tl) != 0:
wg_tar = f"{Path.home()}/{now_datetime}"
wg_tar: str = f"{Path.home()}/{now_datetime}"
shutil.copytree("/tmp/tlecdcwg/", "/tmp/wire_py", dirs_exist_ok=True)
source = Path("/tmp/wire_py")
source: Path = Path("/tmp/wire_py")
shutil.make_archive(wg_tar, "zip", source)
shutil.rmtree(source)
with zipfile.ZipFile(f"{wg_tar}.zip", "r") as zf:
if len(zf.namelist()) != 0:
# img_w, img_i, w_title, w_txt hand over
iw = r"/usr/share/icons/lx-icons/64/info.png"
ii = r"/usr/share/icons/lx-icons/48/wg_vpn.png"
wt = _("Export Successful")
msg_t = _("Your zip file is in home directory")
# Message window variables
iw: str = r"/usr/share/icons/lx-icons/64/info.png"
ii: str = r"/usr/share/icons/lx-icons/48/wg_vpn.png"
wt: str = _("Export Successful")
msg_t: str = _("Your zip file is in home directory")
LxTools.msg_window(iw, ii, wt, msg_t)
else:
# img_w, img_i, w_title, w_txt hand over
iw = r"/usr/share/icons/lx-icons/64/error.png"
ii = r"/usr/share/icons/lx-icons/48/wg_msg.png"
wt = _("Export error")
msg_t = _("Export failed! Please try again")
# Error message window variables
iw: str = r"/usr/share/icons/lx-icons/64/error.png"
ii: str = r"/usr/share/icons/lx-icons/48/wg_msg.png"
wt: str = _("Export error")
msg_t: str = _("Export failed! Please try again")
LxTools.msg_window(iw, ii, wt, msg_t)
else:
# img_w, img_i, w_title, w_txt hand over
iw = r"/usr/share/icons/lx-icons/64/info.png"
ii = r"/usr/share/icons/lx-icons/48/wg_msg.png"
wt = _("Select tunnel")
msg_t = _("Please first import tunnel")
# Message window variables
iw: str = r"/usr/share/icons/lx-icons/64/info.png"
ii: str = r"/usr/share/icons/lx-icons/48/wg_msg.png"
wt: str = _("Select tunnel")
msg_t: str = _("Please first import tunnel")
LxTools.msg_window(iw, ii, wt, msg_t)
except TypeError:
@ -438,43 +460,51 @@ class Tooltip:
"""
class for Tooltip
imoprt Tooltip
import Tooltip
example: Tooltip(label, "Show tooltip on label")
examble: Tooltip(button, "Show tooltip on button")
info: label and button is parrent.
example: Tooltip(button, "Show tooltip on button")
info: label and button are parent.
"""
def __init__(self, widget, text, tips=None):
self.widget = widget
self.text = text
self.tooltip_window = None
def __init__(self, widget: Any, text: str, tips: Optional[bool] = None) -> None:
"""
Tooltip Class
"""
self.widget: Any = widget
self.text: str = text
self.tooltip_window: Optional[Toplevel] = None
if tips:
self.widget.bind("<Enter>", self.show_tooltip)
self.widget.bind("<Leave>", self.hide_tooltip)
def show_tooltip(self, event=None):
def show_tooltip(self, event: Optional[Any] = None) -> None:
"""
shows the tooltip
Shows the tooltip
"""
if self.tooltip_window or not self.text:
return
x, y, _, _ = self.widget.bbox("insert")
x: int
y: int
cx: int
cy: int
x, y, cx, cy = self.widget.bbox("insert")
x += self.widget.winfo_rootx() + 65
y += self.widget.winfo_rooty() + 40
self.tooltip_window = tw = tk.Toplevel(self.widget)
tw.wm_overrideredirect(True)
tw.wm_geometry(f"+{x}+{y}")
label = tk.Label(tw, text=self.text, background="lightgreen", foreground="black", relief="solid", borderwidth=1,
padx=5, pady=5)
label: tk.Label = tk.Label(tw, text=self.text, background="lightgreen", foreground="black", relief="solid",
borderwidth=1, padx=5, pady=5)
label.grid()
def hide_tooltip(self, event=None):
def hide_tooltip(self, event: Optional[Any] = None) -> None:
"""
hide the tooltip
Hides the tooltip
"""
if self.tooltip_window:
self.tooltip_window.destroy()
self.tooltip_window = None
self.tooltip_window = None

View File

@ -1,35 +1,35 @@
#!/usr/bin/python3
""" This Script decrypt Wireguardfiles for Wirepy users """
""" This Script decrypt Wireguard files for Wirepy users """
import os
import shutil
from pathlib import Path
from subprocess import check_call
uname = Path("/tmp/.loguser")
uname: Path = Path("/tmp/.log_user")
with open(uname, "r", encoding="utf-8") as f:
logname = f.readline()
log_name = f.readline()
# Dirname "tlecdewg" = Tunnel Encrypt Decrypt Wireguard
dirname = Path("/tmp/tlecdcwg/")
keyfile = Path(f"/home/{logname}/.config/wire_py/pbwgk.pem")
PKEYFILE = "/usr/local/etc/ssl/pwgk.pem"
# Folder Name "tlecdewg" = Tunnel Encrypt Decrypt Wireguard
folder_path: Path = Path("/tmp/tlecdcwg/")
keyfile: Path = Path(f"/home/{log_name}/.config/wire_py/pbwgk.pem")
PKEYFILE: Path = "/usr/local/etc/ssl/pwgk.pem"
if not keyfile.is_file():
check_call(["openssl", "rsa", "-in", PKEYFILE, "-out", keyfile, "-outform", "PEM", "-pubout"])
shutil.chown(keyfile, 1000, 1000)
dirname2 = f"/home/{logname}/.config/wire_py/"
detl = os.listdir(dirname2)
os.chdir(dirname2)
folder_path2 = f"/home/{log_name}/.config/wire_py/"
detl: list[str] = os.listdir(folder_path2)
os.chdir(folder_path2)
detl.remove("keys")
detl.remove("settings")
if os.path.exists(f"{dirname2}pbwgk.pem"):
if os.path.exists(f"{folder_path2}pbwgk.pem"):
detl.remove("pbwgk.pem")
for detunnels in detl:
tlname2 = f"{detunnels[:-4]}.conf"
extpath = f"{dirname}/{tlname2}"
extpath = f"{folder_path}/{tlname2}"
check_call(["openssl", "pkeyutl", "-decrypt", "-inkey", PKEYFILE, "-in", detunnels, "-out", extpath])
shutil.chown(extpath, 1000, 1000)

View File

@ -6,13 +6,13 @@ import shutil
from pathlib import Path
from subprocess import check_call
uname = Path("/tmp/.loguser")
uname: Path = Path("/tmp/.log_user")
with open(uname, "r", encoding="utf-8") as f:
logname = f.readline()
log_name: str = f.readline()
keyfile = Path(f"/home/{logname}/.config/wire_py/pbwgk.pem")
dirname = Path("/tmp/tlecdcwg/")
keyfile: Path = Path(f"/home/{log_name}/.config/wire_py/pbwgk.pem")
folder_path: Path = Path("/tmp/tlecdcwg/")
PKEYFILE = "/usr/local/etc/ssl/pwgk.pem"
if not keyfile.is_file():
@ -20,28 +20,28 @@ if not keyfile.is_file():
check_call(["openssl", "rsa", "-in", PKEYFILE, "-out", keyfile, "-outform", "PEM", "-pubout"])
shutil.chown(keyfile, 1000, 1000)
if dirname.exists():
tl = os.listdir(f"{dirname}")
CPTH = f"{keyfile}"
CRYPTFILES = CPTH[:-9]
if folder_path.exists():
tl = os.listdir(f"{folder_path}")
CPTH: str = f"{keyfile}"
CRYPTFILES: str = CPTH[:-9]
if keyfile.exists() and len(tl) != 0:
for tunnels in tl:
sourcetl = f"{dirname}/{tunnels}"
tlname = f"{CRYPTFILES}{tunnels[:-5]}.dat"
sourcetl: str = f"{folder_path}/{tunnels}"
tlname: str = f"{CRYPTFILES}{tunnels[:-5]}.dat"
check_call(["openssl", "pkeyutl", "-encrypt", "-inkey", keyfile, "-pubin", "-in", sourcetl, "-out",
tlname,])
else:
if dirname.exists():
tl = os.listdir(f"{dirname}")
CPTH = f"{keyfile}"
CRYPTFILES = CPTH[:-9]
if folder_path.exists():
tl: list[str] = os.listdir(f"{folder_path}")
CPTH: str = f"{keyfile}"
CRYPTFILES: str = CPTH[:-9]
if keyfile.exists() and len(tl) != 0:
for tunnels in tl:
sourcetl = f"{dirname}/{tunnels}"
tlname = f"{CRYPTFILES}{tunnels[:-5]}.dat"
check_call(
["openssl", "pkeyutl", "-encrypt", "-inkey", keyfile, "-pubin", "-in", sourcetl, "-out", tlname])
sourcetl: str = f"{folder_path}/{tunnels}"
tlname: str = f"{CRYPTFILES}{tunnels[:-5]}.dat"
check_call(["openssl", "pkeyutl", "-encrypt", "-inkey", keyfile, "-pubin", "-in", sourcetl, "-out",
tlname])

View File

@ -21,14 +21,14 @@ Create.dir_and_files()
Create.make_dir()
Create.decrypt()
tcl_path = Path("/usr/share/TK-Themes")
set_file = Path(Path.home() / ".config/wire_py/settings")
tcl_path: Path = Path("/usr/share/TK-Themes")
set_file: Path = Path(Path.home() / ".config/wire_py/settings")
tips = LxTools.if_tip(set_file)
dirname = Path("/tmp/tlecdcwg/")
userfile = Path("/tmp/.loguser")
folder_path: Path = Path("/tmp/tlecdcwg/")
userfile = Path("/tmp/.log_user")
# 1 = 1. Year, 09 = Month of the Year, 2924 = Day and Year of the Year
VERSION = "v. 2.04.1725"
VERSION: str = "v. 2.04.1725"
res = GiteaUpdate.api_down("https://git.ilunix.de/api/v1/repos/punix/Wire-Py/releases", VERSION, set_file)
@ -40,7 +40,7 @@ gettext.bindtextdomain(APP, LOCALE_DIR)
gettext.textdomain(APP)
_ = gettext.gettext
LxTools.sigi(dirname, userfile)
LxTools.sigi(folder_path, userfile)
class Wirepy(tk.Tk):
@ -917,5 +917,5 @@ if __name__ == "__main__":
window.tk.call("set", "::tk::dialog::file::showHiddenVar", "0")
window.mainloop()
LxTools.clean_files(dirname, userfile)
LxTools.clean_files(folder_path, userfile)
sys.exit(0)