Compare commits

...

14 Commits

Author SHA1 Message Date
ea750b0cfc fix tooltip "True" and "False" back to True and False 2025-04-19 14:40:37 +02:00
980ce3c7a7 Gitea response improved 2025-04-19 14:28:34 +02:00
28cc423138 class to functions and check=True to subprocess.run 2025-04-18 22:12:18 +02:00
39550b392d format with blank and pylint 2025-04-18 20:50:32 +02:00
582ef21042 reformat files 2025-04-18 15:04:22 +02:00
ca58ac86a4 fix ssldecrypt 2025-04-17 16:25:24 +02:00
177fa1cc34 fix installer 2025-04-13 20:44:28 +02:00
ca1a7a6b94 - Installer update for Open Suse Tumbleweed and Leap
- add symbolic link wirepy.py
2025-04-13 20:38:02 +02:00
a49c5b00e1 - Installer update python311 to python313 for Open Suse
- add symbolic link wirepy.py
2025-04-13 13:04:51 +02:00
75a247797d add install >/dev/null 2>&1 2025-04-09 08:51:18 +02:00
4b019b0c1f fix2 install 2025-04-09 08:27:21 +02:00
ab78eb4f59 fix installer 2025-04-09 08:16:25 +02:00
9f3f0246b4 Installer now with query and remove
icons merged
2025-04-09 08:08:48 +02:00
5302aae807 Installers will support other systems again
Installer is now finished clean with wrong password
Rename wg_main to wirepy
2025-04-07 12:46:45 +02:00
55 changed files with 1991 additions and 1520 deletions

View File

@ -6,7 +6,29 @@ My standard System: Linux Mint 22 Cinnamon
- os import in cls_mth_fc.py replaced by other methods - os import in cls_mth_fc.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
- Crypt and Decrypt Config Files in ~/.config/wire_py
### Added
13-04-0725
- Installer update for Open Suse Tumbleweed and Leap
- add symbolic link wirepy.py
### Added
09-04-0725
- Installer now with query and remove
- Icons merged
### Added
07-04-0725
- Installers will support other systems again
- Installer is now finished clean with wrong password
- Rename wg_main to wirepy
### Added ### Added
03-03-2025 03-03-2025

View File

@ -1,7 +1,7 @@
[Desktop Entry] [Desktop Entry]
Type=Application Type=Application
Name=Wire-Py Name=Wire-Py
Exec=/usr/local/bin/wg_main.py Exec=/usr/local/bin/wirepy.py
Terminal=false Terminal=false
Categories=Network; Categories=Network;
Icon=/usr/share/icons/wp-icons/128/wg_vpn.png Icon=/usr/share/icons/lx-icons/128/wg_vpn.png

View File

@ -1,49 +1,55 @@
""" Classes Method and functions for lx apps """ """ Classes Method and Functions for lx Apps """
import gettext import gettext
import locale import locale
import os import os
import shutil import shutil
from subprocess import check_call
import subprocess import subprocess
import tkinter as tk import tkinter as tk
import zipfile import zipfile
from datetime import datetime from datetime import datetime
from pathlib import Path from pathlib import Path
from subprocess import check_call
from tkinter import ttk from tkinter import ttk
import requests import requests
APP = "wirepy"
APP = 'wirepy'
LOCALE_DIR = "/usr/share/locale/" LOCALE_DIR = "/usr/share/locale/"
locale.bindtextdomain(APP, LOCALE_DIR) locale.bindtextdomain(APP, LOCALE_DIR)
gettext.bindtextdomain(APP, LOCALE_DIR) gettext.bindtextdomain(APP, LOCALE_DIR)
gettext.textdomain(APP) gettext.textdomain(APP)
_ = gettext.gettext _ = 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 This class is for the creation of the folders and files
required by Wire-Py, as well as for decryption required by Wire-Py, as well as for decryption
the tunnel from the user's home directory the tunnel from the user's home directory
""" """
@staticmethod @staticmethod
def dir_and_files(): def dir_and_files():
"""
check and create folders and files if not present
"""
pth = Path.home() / '.config/wire_py' pth = Path.home() / ".config/wire_py"
pth.mkdir(parents=True, exist_ok=True) pth.mkdir(parents=True, exist_ok=True)
sett = Path.home() / '.config/wire_py/settings' sett = Path.home() / ".config/wire_py/settings"
ks = Path.home() / '.config/wire_py/keys' ks = Path.home() / ".config/wire_py/keys"
if sett.exists(): if sett.exists():
pass pass
else: else:
sett.touch() 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(): if ks.exists():
pass pass
@ -53,26 +59,31 @@ class Create():
@staticmethod @staticmethod
def files_for_autostart(): def files_for_autostart():
"""
check and create file for auto start if not present and enable the service
"""
pth2 = Path.home() / '.config/systemd/user' pth2 = Path.home() / ".config/systemd/user"
pth2.mkdir(parents=True, exist_ok=True) 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(): if wg_ser.exists():
pass pass
else: else:
wg_ser.touch() wg_ser.touch()
wg_ser.write_text('[Unit]\nDescription=Automatic Tunnel Start\nAfter=network-online.target' wg_ser.write_text(
'\n\n[Service]\nType=oneshot\nExecStartPre=/bin/sleep 5\nExecStart=/usr/' "[Unit]\nDescription=Automatic Tunnel Start\nAfter=network-online.target"
'local/bin/start_wg.py\n[Install]\nWantedBy=default.target') "\n\n[Service]\nType=oneshot\nExecStartPre=/bin/sleep 5\nExecStart=/usr/"
check_call(['systemctl', '--user', 'enable', 'wg_start.service']) "local/bin/start_wg.py\n[Install]\nWantedBy=default.target"
)
check_call(["systemctl", "--user", "enable", "wg_start.service"])
@staticmethod @staticmethod
def make_dir(): 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(): if dirname.exists():
pass pass
else: else:
@ -80,102 +91,122 @@ class Create():
@staticmethod @staticmethod
def decrypt(): def decrypt():
process = subprocess.run(['pkexec', '/usr/local/bin/ssl_decrypt.py'], stdout=subprocess.PIPE, text=True) """
#print(process.stdout) This start ssl_decrypt file
"""
process = subprocess.run(
["pkexec", "/usr/local/bin/ssl_decrypt.py"],
stdout=subprocess.PIPE,
text=True,
check=True,
)
# print(process.stdout)
if process.returncode == 0: if process.returncode == 0:
print('File successfully decrypted...') print("File successfully decrypted...")
else: else:
print(f'Error with the following code... {process.returncode}') print(f"Error with the following code... {process.returncode}")
@staticmethod @staticmethod
def encrypt(): def encrypt():
process = subprocess.run(['pkexec', '/usr/local/bin/ssl_encrypt.py'], stdout=subprocess.PIPE, text=True) """
this start ssl_encrypt file
"""
process = subprocess.run(
["pkexec", "/usr/local/bin/ssl_encrypt.py"],
stdout=subprocess.PIPE,
text=True,
check=True,
)
print(process.stdout) print(process.stdout)
if process.returncode == 0: if process.returncode == 0:
print('All Files successfully encrypted...') print("All Files successfully encrypted...")
else: else:
print(f'Error with the following code... {process.returncode}') print(f"Error with the following code... {process.returncode}")
class UOS:
""" def uos():
The class is only for unixoidal systems "UOS" = UnixOS
""" """
""" uos = LOGIN USERNAME
This method displays the user name of the logged-in user,
This method displays the user name of the logged-in user,
even if you are rooted in a shell even if you are rooted in a shell
""" """
@staticmethod logname = str(Path.home())[6:]
def username(): file = Path.home() / "/tmp/.loguser"
logname = str(Path.home())[6:] with open(file, "w", encoding="utf-8") as f:
file = Path.home() / '/tmp/.loguser' f.write(logname)
with open(file, "w") as f:
f.write(logname)
class GiteaUpdate: class GiteaUpdate:
""" """
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)
Calling download requests the download URL of the running script, Calling download requests the download URL of the running script,
the taskbar image for the Download OK window, the taskbar image for the the taskbar image for the Download OK window, the taskbar image for the
Download error window and the variable res Download error window and the variable res
""" """
@staticmethod @staticmethod
def api_down(update_api_url, version): def api_down(update_api_url, version):
"""
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)
"""
try: try:
response = requests.get(update_api_url) response = requests.get(update_api_url, timeout=10)
response_dict = response.json() response_dict = response.json()
response_dict = response_dict[0] response_dict = response_dict[0]
with open(wg_set, 'r') as set_file: with open(wg_set, "r", encoding="utf-8") as set_file:
set_file = set_file.read() set_file = set_file.read()
if 'on\n' in set_file: if "on\n" in set_file:
if version[3:] != response_dict['tag_name']: if version[3:] != response_dict["tag_name"]:
return response_dict['tag_name'] req = response_dict["tag_name"]
else: else:
return 'No Updates' req = "No Updates"
else: else:
return 'False' req = "False"
except requests.exceptions.ConnectionError: return req
return 'No Internet Connection!' except requests.exceptions.RequestException:
req = "No Internet Connection!"
return req
@staticmethod @staticmethod
def download(urld, down_ok_image, down_not_ok_image, res): def download(urld, down_ok_image, down_not_ok_image, res):
"""
this is for download new Version of wirepy
"""
try: try:
to_down = 'wget -qP ' + str(Path.home()) + ' ' + urld to_down = "wget -qP " + str(Path.home()) + " " + urld
result = subprocess.call(to_down, shell=True) result = subprocess.call(to_down, shell=True)
if result == 0: 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""" # 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 ii = down_ok_image
wt = _('Download Successful') wt = _("Download Successful")
msg_t = _('Your zip file is in home directory') msg_t = _("Your zip file is in home directory")
msg_window(iw, ii, wt, msg_t) msg_window(iw, ii, wt, msg_t)
else: else:
"""img_w, img_i, w_title, w_txt hand over""" # 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 ii = down_not_ok_image
wt = _('Download error') wt = _("Download error")
msg_t = _('Download failed! Please try again') msg_t = _("Download failed! Please try again")
msg_window(iw, ii, wt, msg_t) msg_window(iw, ii, wt, msg_t)
except subprocess.CalledProcessError: except subprocess.CalledProcessError:
"""img_w, img_i, w_title, w_txt hand over""" # 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 ii = down_not_ok_image
wt = _('Download error') wt = _("Download error")
msg_t = _('Download failed! No internet connection!') msg_t = _("Download failed! No internet connection!")
msg_window(iw, ii, wt, msg_t) msg_window(iw, ii, wt, msg_t)
def msg_window(img_w, img_i, w_title, w_txt, txt2=None, com=None): def msg_window(img_w, img_i, w_title, w_txt, txt2=None, com=None):
""" """
Function for different message windows for the user. with 4 arguments to be passed. Function 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. 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' Paths to images must be specified: r'/usr/share/icons/lx-icons/64/info.png'
img_w = Image for Tk Window img_w = Image for Tk Window
img_i = Image for Icon img_i = Image for Icon
@ -196,17 +227,17 @@ def msg_window(img_w, img_i, w_title, w_txt, txt2=None, com=None):
label.grid(column=1, row=0) label.grid(column=1, row=0)
if txt2 is not None and com is not None: if txt2 is not None and com is not None:
label.config(font=('Ubuntu', 11), padx=15, justify='left') label.config(font=("Ubuntu", 11), padx=15, justify="left")
msg.i_window.grid(column=0, row=0, sticky='nw') msg.i_window.grid(column=0, row=0, sticky="nw")
button2 = ttk.Button(msg, text=f'{txt2}', command=com, padding=4) button2 = ttk.Button(msg, text=f"{txt2}", command=com, padding=4)
button2.grid(column=0, row=1, sticky='e', columnspan=2) button2.grid(column=0, row=1, sticky="e", columnspan=2)
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, row=1, sticky='w', columnspan=2) button.grid(column=0, row=1, sticky="w", columnspan=2)
else: else:
label.config(font=('Ubuntu', 11), padx=15) label.config(font=("Ubuntu", 11), padx=15)
msg.i_window.grid(column=0, row=0) 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) button.grid(column=0, columnspan=2, row=1)
img_i = tk.PhotoImage(file=img_i) img_i = tk.PhotoImage(file=img_i)
@ -221,26 +252,26 @@ class Tunnel:
Class of Methods for Wire-Py Class of Methods for Wire-Py
""" """
"""
The config file is packed into a dictionary,
to display the values Address , DNS and Peer in the labels
"""
@classmethod @classmethod
def con_to_dict(cls, file): def con_to_dict(cls, file):
"""
The config file is packed into a dictionary,
to display the values Address , DNS and Peer in the labels
"""
dictlist = [] dictlist = []
for lines in file.readlines(): for lines in file.readlines():
line_plit = lines.split() line_plit = lines.split()
dictlist = dictlist + line_plit dictlist = dictlist + line_plit
dictlist.remove('[Interface]') dictlist.remove("[Interface]")
dictlist.remove('[Peer]') dictlist.remove("[Peer]")
for items in dictlist: for items in dictlist:
if items == '=': if items == "=":
dictlist.remove(items)
if items == "::/0":
dictlist.remove(items) dictlist.remove(items)
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: for _ in dictlist:
a = [dictlist[0], dictlist[1]] a = [dictlist[0], dictlist[1]]
b = [dictlist[2], dictlist[3]] b = [dictlist[2], dictlist[3]]
@ -255,107 +286,105 @@ class Tunnel:
for elements in new_list: for elements in new_list:
final_dict[elements[0]] = elements[1] final_dict[elements[0]] = elements[1]
''' end... result a Dictionary ''' # end... result a Dictionary
address = final_dict['Address'] address = final_dict["Address"]
dns = final_dict['DNS'] dns = final_dict["DNS"]
if ',' in dns: if "," in dns:
dns = dns[:-1] dns = dns[:-1]
endpoint = final_dict['Endpoint'] endpoint = final_dict["Endpoint"]
if 'PresharedKey' in final_dict: if "PresharedKey" in final_dict:
pre_key = final_dict['PresharedKey'] pre_key = final_dict["PresharedKey"]
else: else:
pre_key = final_dict['PreSharedKey'] pre_key = final_dict["PreSharedKey"]
return address, dns, endpoint, pre_key return address, dns, endpoint, pre_key
"""
Shows the Active Tunnel
"""
@staticmethod @staticmethod
def active(): def active():
"""
active = os.popen('nmcli con show --active | grep -iPo "(.*)(wireguard)"').read().split() Shows the Active Tunnel
"""
active = (
os.popen('nmcli con show --active | grep -iPo "(.*)(wireguard)"')
.read()
.split()
)
if not active: if not active:
active = '' active = ""
else: else:
active = active[0] active = active[0]
return active return active
"""
Shows all existing Wireguard tunnels a login user
"""
@staticmethod @staticmethod
def list(): def list():
"""
dirname = Path('/tmp/tlecdcwg/') Shows all existing Wireguard tunnels a login user
"""
dirname = Path("/tmp/tlecdcwg/")
wg_s = os.listdir(dirname) wg_s = os.listdir(dirname)
return wg_s 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 @staticmethod
def export(): def export():
"""
This will export the tunnels.
A zipfile with current date and time is created
in the user's home directory with correct right
"""
now_time = datetime.now() 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() tl = Tunnel.list()
try: try:
if len(tl) != 0: if len(tl) != 0:
wg_tar = str(Path.home()) + '/' + now_datetime wg_tar = str(Path.home()) + "/" + now_datetime
shutil.copytree('/tmp/tlecdcwg/', '/tmp/wire_py', dirs_exist_ok=True) shutil.copytree("/tmp/tlecdcwg/", "/tmp/wire_py", dirs_exist_ok=True)
source = Path('/tmp/wire_py') source = Path("/tmp/wire_py")
shutil.make_archive(wg_tar, 'zip', source) shutil.make_archive(wg_tar, "zip", source)
#shutil.chown(wg_tar + '.zip', 1000, 1000) # shutil.chown(wg_tar + '.zip', 1000, 1000)
shutil.rmtree(source) 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: if len(zf.namelist()) != 0:
"""img_w, img_i, w_title, w_txt hand over""" # 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 = r'/usr/share/icons/wp-icons/48/wg_vpn.png' ii = r"/usr/share/icons/lx-icons/48/wg_vpn.png"
wt = _('Export Successful') wt = _("Export Successful")
msg_t = _('Your zip file is in home directory') msg_t = _("Your zip file is in home directory")
msg_window(iw, ii, wt, msg_t) msg_window(iw, ii, wt, msg_t)
else: else:
"""img_w, img_i, w_title, w_txt hand over""" # 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 = r'/usr/share/icons/wp-icons/48/wg_msg.png' ii = r"/usr/share/icons/lx-icons/48/wg_msg.png"
wt = _('Export error') wt = _("Export error")
msg_t = _('Export failed! Please try again') msg_t = _("Export failed! Please try again")
msg_window(iw, ii, wt, msg_t) msg_window(iw, ii, wt, msg_t)
else: else:
"""img_w, img_i, w_title, w_txt hand over""" # 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 = r'/usr/share/icons/wp-icons/48/wg_msg.png' ii = r"/usr/share/icons/lx-icons/48/wg_msg.png"
wt = _('Select tunnel') wt = _("Select tunnel")
msg_t = _('Please first import tunnel') msg_t = _("Please first import tunnel")
msg_window(iw, ii, wt, msg_t) msg_window(iw, ii, wt, msg_t)
except TypeError: except TypeError:
pass pass
class Tipi: def if_tip(path):
""" """
Class for Tooltip setting write in File method that writes in file whether tooltip is displayed or not
Calling request path to file
""" """
@staticmethod with open(path, "r", encoding="utf-8") as set_file2:
def if_tip(path): lines2 = set_file2.readlines()
with open(path, 'r') as set_file2: if "False\n" in lines2:
lines2 = set_file2.readlines() tip = False
if 'False\n' in lines2: else:
return False tip = True
else: return tip
return True

313
install
View File

@ -8,128 +8,221 @@ install_file_with(){
clear clear
mkdir -p ~/.config/wire_py && touch ~/.config/wire_py/keys && cp -u settings ~/.config/wire_py/ && \ mkdir -p ~/.config/wire_py && touch ~/.config/wire_py/keys && cp -u settings ~/.config/wire_py/ && \
mkdir -p ~/.config/systemd/user && cp -u wg_start.service ~/.config/systemd/user/ && \ mkdir -p ~/.config/systemd/user && cp -u wg_start.service ~/.config/systemd/user/ && \
systemctl --user enable wg_start.service systemctl --user enable wg_start.service >/dev/null 2>&1
sudo cp -f org.sslcrypt.policy /usr/share/polkit-1/actions/ && \ sudo cp -f org.sslcrypt.policy /usr/share/polkit-1/actions/
sudo apt install python3-tk && \ if [ $? -ne 0 ]
sudo cp -fv wg_main.py start_wg.py cls_mth_fc.py ssl_encrypt.py ssl_decrypt.py /usr/local/bin/ && \ then
sudo cp -uR wp-icons lx-icons /usr/share/icons/ && sudo cp -uR TK-Themes /usr/share/ && \ systemctl --user disable wg_start.service
sudo cp -u languages/de/*.mo /usr/share/locale/de/LC_MESSAGES/ && \ rm -r ~/.config/wire_py && rm -r ~/.config/systemd
sudo ln -sf /usr/local/bin/wg_main.py /usr/local/bin/wirepy && \ exit 0
sudo cp -f Wire-Py.desktop /usr/share/applications/ else
sudo apt install python3-tk && \
sudo cp -fv wirepy.py start_wg.py cls_mth_fc.py ssl_encrypt.py ssl_decrypt.py /usr/local/bin/ && \
sudo cp -uR lx-icons /usr/share/icons/ && sudo cp -uR TK-Themes /usr/share/ && \
sudo cp -u languages/de/*.mo /usr/share/locale/de/LC_MESSAGES/ && \
sudo cp -fv Wire-Py.desktop /usr/share/applications/ && \
sudo ln -sf /usr/local/bin/wirepy.py /usr/local/bin/wirepy
sudo mkdir -p /usr/local/etc/ssl
if [ ! -f /usr/local/etc/ssl/pwgk.pem ]
then
sudo openssl genrsa -out /usr/local/etc/ssl/pwgk.pem 4096
fi
fi
} }
install_arch_d(){ install_arch_d(){
clear clear
sudo pacman -S --noconfirm tk python3 python-requests && \ mkdir -p ~/.config/wire_py && touch ~/.config/wire_py/keys && cp -u settings ~/.config/wire_py/ && \
sudo cp -u wg_main.py start_wg.py cls_mth_fc.py && \ mkdir -p ~/.config/systemd/user && cp -u wg_start.service ~/.config/systemd/user/ && \
sudo mkdir -p /etc/wire_py && sudo touch /etc/wire_py/keys && sudo cp -u settings /etc/wire_py/ && \ systemctl --user enable wg_start.service >/dev/null 2>&1
sudo cp -uR wp-icons lx-icons /usr/share/icons/ && sudo cp -uR TK-Themes /usr/share/ && \ sudo cp -f org.sslcrypt.policy /usr/share/polkit-1/actions/
sudo chown -R root:root /etc/wire_py && sudo chmod 755 /etc/wire_py && \ if [ $? -ne 0 ]
sudo cp -u languages/de/*.mo /usr/share/locale/de/LC_MESSAGES/ && \ then
sudo ln -sf /usr/bin/wirepy.py /usr/local/bin/wirepy && \ systemctl --user disable wg_start.service
sudo cp -u org.wirepy.policy /usr/share/polkit-1/actions/ && \ rm -r ~/.config/wire_py && rm -r ~/.config/systemd
sudo cp -u Wire-Py.desktop /usr/share/applications/ && \ exit 0
sudo cp -u org.sslcrypt.policy /usr/share/polkit-1/actions/ && \ else
sudo cp -u wg_start.service /lib/systemd/system/ && \ sudo pacman -S --noconfirm tk python3 python-requests && \
sudo systemctl enable wg_start.service sudo cp -fv wirepy.py start_wg.py cls_mth_fc.py ssl_encrypt.py ssl_decrypt.py /usr/local/bin/ && \
sudo cp -uR lx-icons /usr/share/icons/ && sudo cp -uR TK-Themes /usr/share/ && \
sudo cp -u languages/de/*.mo /usr/share/locale/de/LC_MESSAGES/ && \
sudo cp -fv Wire-Py.desktop /usr/share/applications/ && \
sudo ln -sf /usr/local/bin/wirepy.py /usr/local/bin/wirepy
sudo mkdir -p /usr/local/etc/ssl
if [ ! -f /usr/local/etc/ssl/pwgk.pem ]
then
sudo openssl genrsa -out /usr/local/etc/ssl/pwgk.pem 4096
fi
fi
} }
if grep -i 'debian' /etc/os-release > /dev/null 2>&1 install(){
then if grep -i 'debian' /etc/os-release > /dev/null 2>&1
groups > /tmp/isgroup then
if grep 'sudo' /tmp/isgroup groups > /tmp/isgroup
then if grep 'sudo' /tmp/isgroup
then
install_file_with install_file_with
else
echo -e "$BLUE"The installer found that they are not in the group sudo.""
echo -e "with "$RED"su -"$BLUE" "they can enter the root shell in which they then""
echo -e "enter "$GREEN""usermod -aG sudo $USER.""$BLUE""
echo -e ""after logging in from the system, they can then run Wire-Py install again." $NORMAL"
read -n 1 -s -r -p $"Press Enter to exit"
clear
exit 0
else fi
elif grep -i 'mint\|ubuntu\|pop|' /etc/os-release > /dev/null 2>&1
then
install_file_with
elif grep -i 'arch' /etc/os-release > /dev/null 2>&1
then
groups > /tmp/isgroup
clear
if grep 'wheel' /tmp/isgroup
then
install_arch_d
else
echo "The installer found that they are not in the group sudo."
echo "The sudoers file must be edited with"
echo -e "$RED""su -""$NORMAL"
echo -e "$GREEN"""EDITOR=nano visudo"""$NORMAL"
echo "Find the line:"
echo "## Uncomment to allow members of group wheel to execute any command"
echo "remove '#' on # %wheel ALL=(ALL) ALL and save the file"
echo -e "then enter "$GREEN"gpasswd -a $USER wheel.""$NORMAL"
echo "after logging in from the system, they can then run Wire-Py install again."
read -n 1 -s -r -p $"Press Enter to exit"
clear
exit 0
fi
elif grep -i '|manjaro\|garuda\|endeavour|' /etc/os-release > /dev/null 2>&1
then
install_arch_d
elif grep -i 'fedora' /etc/os-release > /dev/null 2>&1
then
clear
mkdir -p ~/.config/wire_py && touch ~/.config/wire_py/keys && cp -u settings ~/.config/wire_py/ && \
mkdir -p ~/.config/systemd/user && cp -u wg_start.service ~/.config/systemd/user/ && \
systemctl --user enable wg_start.service >/dev/null 2>&1
sudo cp -f org.sslcrypt.policy /usr/share/polkit-1/actions/
if [ $? -ne 0 ]
then
systemctl --user disable wg_start.service
rm -r ~/.config/wire_py && rm -r ~/.config/systemd
exit 0
else
sudo dnf install python3-tkinter -y
sudo cp -fv wirepy.py start_wg.py cls_mth_fc.py ssl_encrypt.py ssl_decrypt.py /usr/local/bin/ && \
sudo cp -uR lx-icons /usr/share/icons/ && sudo cp -uR TK-Themes /usr/share/ && \
sudo cp -u languages/de/*.mo /usr/share/locale/de/LC_MESSAGES/ && \
sudo cp -fv Wire-Py.desktop /usr/share/applications/ && \
sudo ln -sf /usr/local/bin/wirepy.py /usr/local/bin/wirepy
sudo mkdir -p /usr/local/etc/ssl
if [ ! -f /usr/local/etc/ssl/pwgk.pem ]
then
sudo openssl genrsa -out /usr/local/etc/ssl/pwgk.pem 4096
fi
fi
elif grep -i 'suse' /etc/os-release > /dev/null 2>&1
then
clear
mkdir -p ~/.config/wire_py && touch ~/.config/wire_py/keys && cp -u settings ~/.config/wire_py/ && \
mkdir -p ~/.config/systemd/user && cp -u wg_start.service ~/.config/systemd/user/ && \
systemctl --user enable wg_start.service >/dev/null 2>&1
sudo cp -f org.sslcrypt.policy /usr/share/polkit-1/actions/
if [ $? -ne 0 ]
then
systemctl --user disable wg_start.service
rm -r ~/.config/wire_py && rm -r ~/.config/systemd
exit 0
else
sudo cp -fv wirepy.py start_wg.py cls_mth_fc.py ssl_encrypt.py ssl_decrypt.py /usr/local/bin/ && \
sudo cp -uR lx-icons /usr/share/icons/ && sudo cp -uR TK-Themes /usr/share/ && \
sudo cp -u languages/de/*.mo /usr/share/locale/de/LC_MESSAGES/ && \
sudo cp -fv Wire-Py.desktop /usr/share/applications/ && \
sudo ln -sf /usr/local/bin/wirepy.py /usr/local/bin/wirepy
sudo mkdir -p /usr/local/etc/ssl
if [ ! -f /usr/local/etc/ssl/pwgk.pem ]
then
sudo openssl genrsa -out /usr/local/etc/ssl/pwgk.pem 4096
fi
if grep -i 'Tumbleweed' /etc/os-release > /dev/null 2>&1
then
sudo zypper install python313-tk
else
sudo zypper install python36-tk
fi
fi
else
clear
echo $"Your System could not be determined."
echo
read -n 1 -s -r -p $"Press Enter to exit"
clear
exit 0
fi
#clear
read -n 1 -s -r -p $"Press Enter to exit"
clear
}
remove(){
sudo rm -f /usr/local/bin/wirepy /usr/local/bin/wirepy.py /usr/local/bin/start_wg.py \
/usr/local/bin/cls_mth_fc.py /usr/local/bin/ssl_encrypt.py /usr/local/bin/ssl_decrypt.py
if [ $? -ne 0 ]
then
exit 0
else
systemctl --user disable wg_start.service
rm -r ~/.config/wire_py && rm -r ~/.config/systemd
sudo rm /usr/share/applications/Wire-Py.desktop
sudo rm /usr/share/locale/de/LC_MESSAGES/languages/de/wirepy.mo
sudo rm -r /usr/local/etc/ssl
which syncpy >/dev/null
if [ $? -ne 0 ]
then
sudo rm -r /usr/share/icons/lx-icons && sudo rm -r /usr/share/TK-Themes
fi
echo
read -p "Press Enter to exit..."
echo -e "$BLUE"The installer found that they are not in the group sudo.""
echo -e "with "$RED"su -"$BLUE" "they can enter the root shell in which they then""
echo -e "enter "$GREEN""usermod -aG sudo $USER.""$BLUE""
echo -e ""after logging in from the system, they can then run Wire-Py install again." $NORMAL"
read -n 1 -s -r -p $"To close the Window press a button"
clear
exit 0
fi fi
}
elif grep -i 'mint\|ubuntu\|pop|' /etc/os-release > /dev/null 2>&1 which wirepy >/dev/null
then if [ $? -eq 0 ]
install_file_with
elif grep -i 'arch' /etc/os-release > /dev/null 2>&1
then then
groups > /tmp/isgroup echo "Do you want to update/reinstall or uninstall wirepy?"
echo
echo "Update/reinstall: press y, uninstall press r"
echo
read -n 1 -s -r -p "Cancel with any other key..." result
case $result in
[y]* ) clear; install; exit;;
[Y]* ) clear; install; exit;;
[j]* ) clear; install; exit;;
[J]* ) clear; install; exit;;
[r]* ) clear; remove; exit;;
[R]* ) clear; remove; exit;;
esac
clear clear
if grep 'wheel' /tmp/isgroup
then
install_arch_d
else
echo "The installer found that they are not in the group sudo."
echo "The sudoers file must be edited with"
echo -e "$RED""su -""$NORMAL"
echo -e "$GREEN"""EDITOR=nano visudo"""$NORMAL"
echo "Find the line:"
echo "## Uncomment to allow members of group wheel to execute any command"
echo "remove '#' on # %wheel ALL=(ALL) ALL and save the file"
echo -e "then enter "$GREEN"gpasswd -a $USER wheel.""$NORMAL"
echo "after logging in from the system, they can then run Wire-Py install again."
read -n 1 -s -r -p $"To close the Window press a button"
clear
exit 0
fi
elif grep -i '|manjaro\|garuda\|endeavour|' /etc/os-release > /dev/null 2>&1
then
install_arch_d
elif grep -i 'fedora' /etc/os-release > /dev/null 2>&1
then
if ! which python3-tkinter &> /dev/null
then sudo dnf install python3-tkinter -y
sudo cp -u wg_main.py start_wg.py cls_mth_fc.py && \
sudo mkdir -p /etc/wire_py && sudo touch /etc/wire_py/keys && \
sudo cp -u settings /etc/wire_py/ && \
sudo cp -u languages/de/*.mo /usr/share/locale/de/LC_MESSAGES/ && \
sudo cp -uR wp-icons lx-icons /usr/share/icons/ && sudo cp -uR TK-Themes /usr/share/ && \
sudo chown -R root:root /etc/wire_py && sudo chmod 755 /etc/wire_py && \
sudo ln -sf /usr/bin/wirepy.py /usr/local/bin/wirepy && \
sudo cp -u org.wirepy.policy /usr/share/polkit-1/actions/ && \
sudo cp -u Wire-Py.desktop /usr/share/applications/ && \
sudo cp -u wg_start.service /lib/systemd/system/ && \
sudo systemctl enable wg_start.service
fi
elif grep -i 'suse' /etc/os-release > /dev/null 2>&1
then
if ! which python311-tk &> /dev/null
then sudo zypper install python311-tk
sudo cp -u wg_main.py start_wg.py cls_mth_fc.py && \
sudo mkdir -p /etc/wire_py && sudo touch /etc/wire_py/keys && \
sudo cp -u settings /etc/wire_py/ && \
sudo cp -u languages/de/*.mo /usr/share/locale/de/LC_MESSAGES/ && \
sudo cp -uR wp-icons lx-icons /usr/share/icons/ && sudo cp -uR TK-Themes /usr/share/ && \
sudo chown -R root:root /etc/wire_py && sudo chmod 755 /etc/wire_py && \
sudo ln -sf /usr/bin/wirepy.py /usr/local/bin/wirepy && \
sudo cp -u org.wirepy.policy /usr/share/polkit-1/actions/ && \
sudo cp -u Wire-Py.desktop /usr/share/applications/ && \
sudo cp -u wg_start.service /lib/systemd/system/ && \
sudo systemctl enable wg_start.service
fi
else else
clear install
echo $"Your System could not be determined."
echo fi
read -n 1 -s -r -p $"To close the window press a button"
clear
exit 0
fi
#clear
read -n 1 -s -r -p $"To close the Window press a button"
clear

View File

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

View File

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB

View File

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View File

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

View File

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View File

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

Before

Width:  |  Height:  |  Size: 6.1 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

View File

Before

Width:  |  Height:  |  Size: 6.0 KiB

After

Width:  |  Height:  |  Size: 6.0 KiB

View File

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 5.7 KiB

View File

Before

Width:  |  Height:  |  Size: 6.1 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

View File

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 6.2 KiB

View File

Before

Width:  |  Height:  |  Size: 6.1 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

View File

Before

Width:  |  Height:  |  Size: 5.8 KiB

After

Width:  |  Height:  |  Size: 5.8 KiB

View File

Before

Width:  |  Height:  |  Size: 7.3 KiB

After

Width:  |  Height:  |  Size: 7.3 KiB

View File

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View File

Before

Width:  |  Height:  |  Size: 7.0 KiB

After

Width:  |  Height:  |  Size: 7.0 KiB

View File

Before

Width:  |  Height:  |  Size: 7.3 KiB

After

Width:  |  Height:  |  Size: 7.3 KiB

View File

Before

Width:  |  Height:  |  Size: 7.3 KiB

After

Width:  |  Height:  |  Size: 7.3 KiB

View File

Before

Width:  |  Height:  |  Size: 7.1 KiB

After

Width:  |  Height:  |  Size: 7.1 KiB

View File

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View File

Before

Width:  |  Height:  |  Size: 9.0 KiB

After

Width:  |  Height:  |  Size: 9.0 KiB

View File

Before

Width:  |  Height:  |  Size: 8.2 KiB

After

Width:  |  Height:  |  Size: 8.2 KiB

View File

Before

Width:  |  Height:  |  Size: 8.2 KiB

After

Width:  |  Height:  |  Size: 8.2 KiB

View File

Before

Width:  |  Height:  |  Size: 8.3 KiB

After

Width:  |  Height:  |  Size: 8.3 KiB

View File

Before

Width:  |  Height:  |  Size: 9.0 KiB

After

Width:  |  Height:  |  Size: 9.0 KiB

View File

Before

Width:  |  Height:  |  Size: 8.7 KiB

After

Width:  |  Height:  |  Size: 8.7 KiB

View File

Before

Width:  |  Height:  |  Size: 8.4 KiB

After

Width:  |  Height:  |  Size: 8.4 KiB

View File

@ -1,28 +1,59 @@
#!/usr/bin/python3 #!/usr/bin/python3
''' This Script decrypt Wireguardfiles for Wirepy users ''' """ This Script decrypt Wireguardfiles for Wirepy users """
import os import os
from subprocess import check_call
from pathlib import Path
import shutil 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", encoding="utf-8") as f:
logname = f.readline() logname = f.readline()
''' Dirname "tlecdewg" = Tunnel Encrypt Decrypt Wireguard '''
dirname = Path('/tmp/tlecdcwg/')
keyfile = '/usr/local/etc/ssl/pwgk.pem'
dirname2 = ('/home/' + logname + '/.config/wire_py/') # 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",
]
)
shutil.chown(keyfile, 1000, 1000)
dirname2 = "/home/" + logname + "/.config/wire_py/"
detl = os.listdir(dirname2) detl = os.listdir(dirname2)
os.chdir(dirname2) os.chdir(dirname2)
detl.remove('keys') detl.remove("keys")
detl.remove('settings') detl.remove("settings")
if os.path.exists(dirname2 + 'pbwgk.pem'): if os.path.exists(dirname2 + "pbwgk.pem"):
detl.remove('pbwgk.pem') detl.remove("pbwgk.pem")
for detunnels in detl: for detunnels in detl:
tlname2 = detunnels[:-4] + '.conf' tlname2 = detunnels[:-4] + ".conf"
extpath = str(dirname) + '/' + tlname2 extpath = str(dirname) + "/" + tlname2
check_call(['openssl', 'pkeyutl', '-decrypt', '-inkey', keyfile, '-in', detunnels, '-out', extpath]) check_call(
shutil.chown(extpath, 1000, 1000) [
"openssl",
"pkeyutl",
"-decrypt",
"-inkey",
PKEYFILE,
"-in",
detunnels,
"-out",
extpath,
]
)
shutil.chown(extpath, 1000, 1000)

View File

@ -1,49 +1,83 @@
#!/usr/bin/python3 #!/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 import os
from subprocess import check_call
from pathlib import Path
import shutil 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", encoding="utf-8") as f:
logname = f.readline() logname = f.readline()
keyfile = Path(f'/home/{logname}/.config/wire_py/pbwgk.pem') keyfile = Path(f"/home/{logname}/.config/wire_py/pbwgk.pem")
dirname = Path('/tmp/tlecdcwg/') dirname = Path("/tmp/tlecdcwg/")
pkeyfile = '/usr/local/etc/ssl/pwgk.pem' PKEYFILE = "/usr/local/etc/ssl/pwgk.pem"
if not keyfile.is_file(): 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) shutil.chown(keyfile, 1000, 1000)
if dirname.exists(): if dirname.exists():
tl = os.listdir(str(dirname)) tl = os.listdir(str(dirname))
cpth = str(keyfile) CPTH = str(keyfile)
cryptfiles = cpth[:-9] CRYPTFILES = CPTH[:-9]
if keyfile.exists() and len(tl) != 0: if keyfile.exists() and len(tl) != 0:
for tunnels in tl: for tunnels in tl:
sourcetl = str(dirname) + '/' + tunnels sourcetl = str(dirname) + "/" + tunnels
tlname = cryptfiles + tunnels[:-5] + '.dat' tlname = CRYPTFILES + tunnels[:-5] + ".dat"
check_call(['openssl', 'pkeyutl', '-encrypt', '-inkey', keyfile, '-pubin', '-in', sourcetl, '-out', tlname]) check_call(
[
"openssl",
"pkeyutl",
"-encrypt",
"-inkey",
keyfile,
"-pubin",
"-in",
sourcetl,
"-out",
tlname,
]
)
else: else:
if dirname.exists(): if dirname.exists():
tl = os.listdir(str(dirname)) tl = os.listdir(str(dirname))
cpth = str(keyfile) CPTH = str(keyfile)
cryptfiles = cpth[:-9] CRYPTFILES = CPTH[:-9]
if keyfile.exists() and len(tl) != 0: if keyfile.exists() and len(tl) != 0:
for tunnels in tl: for tunnels in tl:
sourcetl = str(dirname) + '/' + tunnels sourcetl = str(dirname) + "/" + tunnels
tlname = cryptfiles + tunnels[:-5] + '.dat' tlname = CRYPTFILES + tunnels[:-5] + ".dat"
check_call(['openssl', 'pkeyutl', '-encrypt', '-inkey', keyfile, '-pubin', '-in', sourcetl, '-out', tlname]) check_call(
[
"openssl",
"pkeyutl",
"-encrypt",
"-inkey",
keyfile,
"-pubin",
"-in",
sourcetl,
"-out",
tlname,
]
)

View File

@ -1,14 +1,17 @@
#!/usr/bin/python3 #!/usr/bin/python3
from subprocess import check_call """
This script belongs to wirepy and is for the auto start of the tunnel
"""
from pathlib import Path 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", encoding="utf-8") as a_con:
# This funtion is for the independent autostart of the previously selected tunnel
lines = a_con.readlines() lines = a_con.readlines()
a_con = lines[7].strip() a_con = lines[7].strip()
if a_con != 'off': if a_con != "off":
check_call(['nmcli', 'connection', 'up', a_con]) check_call(["nmcli", "connection", "up", a_con])
else: else:
pass pass

1211
wg_main.py

File diff suppressed because it is too large Load Diff

1470
wirepy.py Executable file

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB