korreckturen throughout code
This commit is contained in:
parent
f6204c9071
commit
1a853d4ff1
51
.idea/workspace.xml
generated
51
.idea/workspace.xml
generated
@ -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">{
|
||||
"associatedIndex": 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">{
|
||||
"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>
|
||||
}</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>
|
||||
|
Binary file not shown.
352
cls_mth_fc.py
352
cls_mth_fc.py
@ -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
|
@ -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)
|
||||
|
@ -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])
|
||||
|
14
wirepy.py
14
wirepy.py
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user