reformat files

This commit is contained in:
Désiré Werner Menrath 2025-04-18 15:04:22 +02:00
parent ca58ac86a4
commit 582ef21042
5 changed files with 1042 additions and 704 deletions

View File

@ -1,29 +1,30 @@
''' Classes Method and functions for lx apps '''
""" Classes Method and functions for lx apps """
import gettext
import locale
import os
import shutil
from subprocess import check_call
import subprocess
import tkinter as tk
import zipfile
from datetime import datetime
from pathlib import Path
from subprocess import check_call
from tkinter import ttk
import requests
APP = 'wirepy'
LOCALE_DIR = '/usr/share/locale/'
APP = "wirepy"
LOCALE_DIR = "/usr/share/locale/"
locale.bindtextdomain(APP, LOCALE_DIR)
gettext.bindtextdomain(APP, LOCALE_DIR)
gettext.textdomain(APP)
_ = gettext.gettext
wg_set = Path(Path.home() / '.config/wire_py/settings')
wg_set = Path(Path.home() / ".config/wire_py/settings")
class Create():
class Create:
"""
This class is for the creation of the folders and files
required by Wire-Py, as well as for decryption
@ -33,17 +34,19 @@ class Create():
@staticmethod
def dir_and_files():
pth = Path.home() / '.config/wire_py'
pth = 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.home() / ".config/wire_py/settings"
ks = Path.home() / ".config/wire_py/keys"
if sett.exists():
pass
else:
sett.touch()
sett.write_text('[UPDATES]\non\n[THEME]\nlight\n[TOOLTIP]\nTrue\n[AUTOSTART ON]\noff\n')
sett.write_text(
"[UPDATES]\non\n[THEME]\nlight\n[TOOLTIP]\nTrue\n[AUTOSTART ON]\noff\n"
)
if ks.exists():
pass
@ -54,25 +57,27 @@ class Create():
@staticmethod
def files_for_autostart():
pth2 = Path.home() / '.config/systemd/user'
pth2 = 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.home() / ".config/systemd/user/wg_start.service"
if wg_ser.exists():
pass
else:
wg_ser.touch()
wg_ser.write_text('[Unit]\nDescription=Automatic Tunnel Start\nAfter=network-online.target'
'\n\n[Service]\nType=oneshot\nExecStartPre=/bin/sleep 5\nExecStart=/usr/'
'local/bin/start_wg.py\n[Install]\nWantedBy=default.target')
check_call(['systemctl', '--user', 'enable', 'wg_start.service'])
wg_ser.write_text(
"[Unit]\nDescription=Automatic Tunnel Start\nAfter=network-online.target"
"\n\n[Service]\nType=oneshot\nExecStartPre=/bin/sleep 5\nExecStart=/usr/"
"local/bin/start_wg.py\n[Install]\nWantedBy=default.target"
)
check_call(["systemctl", "--user", "enable", "wg_start.service"])
@staticmethod
def make_dir():
''' Dirname "tlecdewg" = Tunnel Encrypt Decrypt Wireguard '''
"""Dirname "tlecdewg" = Tunnel Encrypt Decrypt Wireguard"""
dirname = Path('/tmp/tlecdcwg/')
dirname = Path("/tmp/tlecdcwg/")
if dirname.exists():
pass
else:
@ -80,21 +85,30 @@ class Create():
@staticmethod
def decrypt():
process = subprocess.run(['pkexec', '/usr/local/bin/ssl_decrypt.py'], stdout=subprocess.PIPE, text=True)
#print(process.stdout)
process = subprocess.run(
["pkexec", "/usr/local/bin/ssl_decrypt.py"],
stdout=subprocess.PIPE,
text=True,
)
# print(process.stdout)
if process.returncode == 0:
print('File successfully decrypted...')
print("File successfully decrypted...")
else:
print(f'Error with the following code... {process.returncode}')
print(f"Error with the following code... {process.returncode}")
@staticmethod
def encrypt():
process = subprocess.run(['pkexec', '/usr/local/bin/ssl_encrypt.py'], stdout=subprocess.PIPE, text=True)
process = subprocess.run(
["pkexec", "/usr/local/bin/ssl_encrypt.py"],
stdout=subprocess.PIPE,
text=True,
)
print(process.stdout)
if process.returncode == 0:
print('All Files successfully encrypted...')
print("All Files successfully encrypted...")
else:
print(f'Error with the following code... {process.returncode}')
print(f"Error with the following code... {process.returncode}")
class UOS:
"""
@ -106,15 +120,15 @@ class UOS:
This method displays the user name of the logged-in user,
even if you are rooted in a shell
"""
@staticmethod
def username():
logname = str(Path.home())[6:]
file = Path.home() / '/tmp/.loguser'
with open(file, 'w') as f:
file = Path.home() / "/tmp/.loguser"
with open(file, "w") as f:
f.write(logname)
class GiteaUpdate:
"""
Calling api_down requests the URL and the version of the running script.
@ -124,51 +138,52 @@ class GiteaUpdate:
the taskbar image for the Download OK window, the taskbar image for the
Download error window and the variable res
"""
@staticmethod
def api_down(update_api_url, version):
try:
response = requests.get(update_api_url)
response_dict = response.json()
response_dict = response_dict[0]
with open(wg_set, 'r') as set_file:
with open(wg_set, "r") as set_file:
set_file = set_file.read()
if 'on\n' in set_file:
if version[3:] != response_dict['tag_name']:
return response_dict['tag_name']
if "on\n" in set_file:
if version[3:] != response_dict["tag_name"]:
return response_dict["tag_name"]
else:
return 'No Updates'
return "No Updates"
else:
return 'False'
return "False"
except requests.exceptions.ConnectionError:
return 'No Internet Connection!'
return "No Internet Connection!"
@staticmethod
def download(urld, down_ok_image, down_not_ok_image, res):
try:
to_down = 'wget -qP ' + str(Path.home()) + ' ' + urld
to_down = "wget -qP " + str(Path.home()) + " " + urld
result = subprocess.call(to_down, shell=True)
if result == 0:
shutil.chown(str(Path.home()) + f'/{res}.zip', 1000, 1000)
shutil.chown(str(Path.home()) + f"/{res}.zip", 1000, 1000)
"""img_w, img_i, w_title, w_txt hand over"""
iw = r'/usr/share/icons/lx-icons/64/info.png'
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')
wt = _("Download Successful")
msg_t = _("Your zip file is in home directory")
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'
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')
wt = _("Download error")
msg_t = _("Download failed! Please try again")
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'
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!')
wt = _("Download error")
msg_t = _("Download failed! No internet connection!")
msg_window(iw, ii, wt, msg_t)
@ -196,17 +211,17 @@ def msg_window(img_w, img_i, w_title, w_txt, txt2=None, com=None):
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.grid(column=0, row=1, sticky='e', columnspan=2)
button = ttk.Button(msg, text='OK', command=msg.destroy, padding=4)
button.grid(column=0, row=1, sticky='w', columnspan=2)
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.grid(column=0, row=1, sticky="e", columnspan=2)
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)
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(msg, text="OK", command=msg.destroy, padding=4)
button.grid(column=0, columnspan=2, row=1)
img_i = tk.PhotoImage(file=img_i)
@ -225,6 +240,7 @@ class Tunnel:
The config file is packed into a dictionary,
to display the values Address , DNS and Peer in the labels
"""
@classmethod
def con_to_dict(cls, file):
@ -232,15 +248,15 @@ class Tunnel:
for lines in file.readlines():
line_plit = lines.split()
dictlist = dictlist + line_plit
dictlist.remove('[Interface]')
dictlist.remove('[Peer]')
dictlist.remove("[Interface]")
dictlist.remove("[Peer]")
for items in dictlist:
if items == '=':
if items == "=":
dictlist.remove(items)
if items == '::/0':
if items == "::/0":
dictlist.remove(items)
''' Here is the beginning (Loop) of convert List to Dictionary '''
""" Here is the beginning (Loop) of convert List to Dictionary """
for _ in dictlist:
a = [dictlist[0], dictlist[1]]
b = [dictlist[2], dictlist[3]]
@ -255,28 +271,33 @@ class Tunnel:
for elements in new_list:
final_dict[elements[0]] = elements[1]
''' end... result a Dictionary '''
""" end... result a Dictionary """
address = final_dict['Address']
dns = final_dict['DNS']
if ',' in dns:
address = final_dict["Address"]
dns = final_dict["DNS"]
if "," in dns:
dns = dns[:-1]
endpoint = final_dict['Endpoint']
if 'PresharedKey' in final_dict:
pre_key = final_dict['PresharedKey']
endpoint = final_dict["Endpoint"]
if "PresharedKey" in final_dict:
pre_key = final_dict["PresharedKey"]
else:
pre_key = final_dict['PreSharedKey']
pre_key = final_dict["PreSharedKey"]
return address, dns, endpoint, pre_key
"""
Shows the Active Tunnel
"""
@staticmethod
def active():
active = os.popen('nmcli con show --active | grep -iPo "(.*)(wireguard)"').read().split()
active = (
os.popen('nmcli con show --active | grep -iPo "(.*)(wireguard)"')
.read()
.split()
)
if not active:
active = ''
active = ""
else:
active = active[0]
@ -285,60 +306,61 @@ class Tunnel:
"""
Shows all existing Wireguard tunnels a login user
"""
@staticmethod
def list():
dirname = Path('/tmp/tlecdcwg/')
dirname = Path("/tmp/tlecdcwg/")
wg_s = os.listdir(dirname)
return wg_s
"""
This will export the tunnels.
A zipfile with current date and time is created
in the user's home directory with correct right
"""
@staticmethod
def export():
now_time = datetime.now()
now_datetime = now_time.strftime('wg-exp-' + '%m-%d-%Y' + '-' + '%H:%M')
now_datetime = now_time.strftime("wg-exp-" + "%m-%d-%Y" + "-" + "%H:%M")
tl = Tunnel.list()
try:
if len(tl) != 0:
wg_tar = str(Path.home()) + '/' + now_datetime
shutil.copytree('/tmp/tlecdcwg/', '/tmp/wire_py', dirs_exist_ok=True)
source = Path('/tmp/wire_py')
shutil.make_archive(wg_tar, 'zip', source)
#shutil.chown(wg_tar + '.zip', 1000, 1000)
wg_tar = str(Path.home()) + "/" + now_datetime
shutil.copytree("/tmp/tlecdcwg/", "/tmp/wire_py", dirs_exist_ok=True)
source = Path("/tmp/wire_py")
shutil.make_archive(wg_tar, "zip", source)
# shutil.chown(wg_tar + '.zip', 1000, 1000)
shutil.rmtree(source)
with zipfile.ZipFile((wg_tar + '.zip'), 'r') as zf:
with zipfile.ZipFile((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')
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")
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')
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")
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')
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")
msg_window(iw, ii, wt, msg_t)
except TypeError:
@ -350,12 +372,12 @@ class Tipi:
Class for Tooltip setting write in File
Calling request path to file
"""
@staticmethod
def if_tip(path):
with open(path, 'r') as set_file2:
with open(path, "r") as set_file2:
lines2 = set_file2.readlines()
if 'False\n' in lines2:
if "False\n" in lines2:
return False
else:
return True

View File

@ -1,34 +1,59 @@
#!/usr/bin/python3
''' This Script decrypt Wireguardfiles for Wirepy users '''
""" This Script decrypt Wireguardfiles for Wirepy users """
import os
from subprocess import check_call
from pathlib import Path
import shutil
uname = Path('/tmp/.loguser')
from pathlib import Path
from subprocess import check_call
with open(uname, 'r') as f:
uname = Path("/tmp/.loguser")
with open(uname, "r") as f:
logname = 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'
""" 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"
if not keyfile.is_file():
check_call(['openssl', 'rsa', '-in', pkeyfile, '-out', keyfile, '-outform', 'PEM', '-pubout'])
check_call(
[
"openssl",
"rsa",
"-in",
pkeyfile,
"-out",
keyfile,
"-outform",
"PEM",
"-pubout",
]
)
shutil.chown(keyfile, 1000, 1000)
dirname2 = ('/home/' + logname + '/.config/wire_py/')
dirname2 = "/home/" + logname + "/.config/wire_py/"
detl = os.listdir(dirname2)
os.chdir(dirname2)
detl.remove('keys')
detl.remove('settings')
if os.path.exists(dirname2 + 'pbwgk.pem'):
detl.remove('pbwgk.pem')
detl.remove("keys")
detl.remove("settings")
if os.path.exists(dirname2 + "pbwgk.pem"):
detl.remove("pbwgk.pem")
for detunnels in detl:
tlname2 = detunnels[:-4] + '.conf'
extpath = str(dirname) + '/' + tlname2
check_call(['openssl', 'pkeyutl', '-decrypt', '-inkey', pkeyfile, '-in', detunnels, '-out', extpath])
tlname2 = detunnels[:-4] + ".conf"
extpath = str(dirname) + "/" + tlname2
check_call(
[
"openssl",
"pkeyutl",
"-decrypt",
"-inkey",
pkeyfile,
"-in",
detunnels,
"-out",
extpath,
]
)
shutil.chown(extpath, 1000, 1000)

View File

@ -1,23 +1,35 @@
#!/usr/bin/python3
''' This Script encrypt Wireguardfiles for Wirepy users for more Security'''
""" This Script encrypt Wireguardfiles for Wirepy users for more Security"""
import os
from subprocess import check_call
from pathlib import Path
import shutil
from pathlib import Path
from subprocess import check_call
uname = Path('/tmp/.loguser')
uname = Path("/tmp/.loguser")
with open(uname, 'r') as f:
with open(uname, "r") as f:
logname = f.readline()
keyfile = Path(f'/home/{logname}/.config/wire_py/pbwgk.pem')
dirname = Path('/tmp/tlecdcwg/')
pkeyfile = '/usr/local/etc/ssl/pwgk.pem'
keyfile = Path(f"/home/{logname}/.config/wire_py/pbwgk.pem")
dirname = Path("/tmp/tlecdcwg/")
pkeyfile = "/usr/local/etc/ssl/pwgk.pem"
if not keyfile.is_file():
check_call(['openssl', 'rsa', '-in', pkeyfile, '-out', keyfile, '-outform', 'PEM', '-pubout'])
check_call(
[
"openssl",
"rsa",
"-in",
pkeyfile,
"-out",
keyfile,
"-outform",
"PEM",
"-pubout",
]
)
shutil.chown(keyfile, 1000, 1000)
if dirname.exists():
@ -27,9 +39,22 @@ if not keyfile.is_file():
if keyfile.exists() and len(tl) != 0:
for tunnels in tl:
sourcetl = str(dirname) + '/' + tunnels
tlname = cryptfiles + tunnels[:-5] + '.dat'
check_call(['openssl', 'pkeyutl', '-encrypt', '-inkey', keyfile, '-pubin', '-in', sourcetl, '-out', tlname])
sourcetl = str(dirname) + "/" + tunnels
tlname = cryptfiles + tunnels[:-5] + ".dat"
check_call(
[
"openssl",
"pkeyutl",
"-encrypt",
"-inkey",
keyfile,
"-pubin",
"-in",
sourcetl,
"-out",
tlname,
]
)
else:
@ -40,10 +65,19 @@ else:
if keyfile.exists() and len(tl) != 0:
for tunnels in tl:
sourcetl = str(dirname) + '/' + tunnels
tlname = cryptfiles + tunnels[:-5] + '.dat'
check_call(['openssl', 'pkeyutl', '-encrypt', '-inkey', keyfile, '-pubin', '-in', sourcetl, '-out', tlname])
sourcetl = str(dirname) + "/" + tunnels
tlname = cryptfiles + tunnels[:-5] + ".dat"
check_call(
[
"openssl",
"pkeyutl",
"-encrypt",
"-inkey",
keyfile,
"-pubin",
"-in",
sourcetl,
"-out",
tlname,
]
)

View File

@ -1,14 +1,13 @@
#!/usr/bin/python3
from subprocess import check_call
from pathlib import Path
from subprocess import check_call
path_to_file = Path(Path.home() / '.config/wire_py/settings')
path_to_file = Path(Path.home() / ".config/wire_py/settings")
with open(path_to_file, 'r') as a_con:
with open(path_to_file, "r") as a_con:
lines = a_con.readlines()
a_con = lines[7].strip()
if a_con != 'off':
check_call(['nmcli', 'connection', 'up', a_con])
if a_con != "off":
check_call(["nmcli", "connection", "up", a_con])
else:
pass

1328
wirepy.py

File diff suppressed because it is too large Load Diff