Compare commits

..

No commits in common. "main" and "2.03.0325" have entirely different histories.

55 changed files with 1520 additions and 2175 deletions

@ -6,29 +6,7 @@ My standard System: Linux Mint 22 Cinnamon
- os import in cls_mth_fc.py replaced by other methods
- If Wire-Py already runs, prevent further start
- for loops with lists replaced by List Comprehensions
### 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
- Crypt and Decrypt Config Files in ~/.config/wire_py
### Added
03-03-2025

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

Binary file not shown.

@ -1,30 +1,29 @@
""" 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"
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,23 +32,18 @@ class Create:
@staticmethod
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)
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
@ -59,31 +53,26 @@ class Create:
@staticmethod
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)
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:
@ -91,125 +80,102 @@ class Create:
@staticmethod
def decrypt():
"""
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)
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():
"""
this start ssl_encrypt file
"""
process = subprocess.run(
["pkexec", "/usr/local/bin/ssl_encrypt.py"],
stdout=subprocess.PIPE,
text=True,
check=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:
"""
The class is only for unixoidal systems "UOS" = UnixOS
def uos():
"""
uos = LOGIN USERNAME
"""
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", encoding="utf-8") 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.
Example: version = 'v. 1.1.1.1' GiteaUpdate.api_down(http://example.de, version)
Calling download requests the download URL of the running script,
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):
"""
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:
response = requests.get(update_api_url, timeout=10)
response = requests.get(update_api_url)
response_dict = response.json()
response_dict = response_dict[0]
with open(wg_set, "r", encoding="utf-8") 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"]:
req = response_dict["tag_name"]
if 'on\n' in set_file:
if version[3:] != response_dict['tag_name']:
return response_dict['tag_name']
else:
req = "No Updates"
return 'No Updates'
else:
req = "False"
return req
except requests.exceptions.RequestException:
req = "No Internet Connection!"
return req
return 'False'
except requests.exceptions.ConnectionError:
return 'No Internet Connection!'
@staticmethod
def download(urld, down_ok_image, down_not_ok_image, res):
"""
this is for download new Version of wirepy
"""
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)
# img_w, img_i, w_title, w_txt hand over
iw = r"/usr/share/icons/lx-icons/64/info.png"
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'
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"
"""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")
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"
"""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!")
wt = _('Download error')
msg_t = _('Download failed! No internet connection!')
msg_window(iw, ii, wt, msg_t)
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.
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'
img_w = Image for Tk Window
img_i = Image for Icon
@ -230,17 +196,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)
@ -255,26 +221,26 @@ class Tunnel:
Class of Methods for Wire-Py
"""
@classmethod
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
"""
@classmethod
def con_to_dict(cls, file):
dictlist = []
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]]
@ -289,141 +255,107 @@ 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"]
pre_key = final_dict.get("PresharedKey")
if pre_key is None:
pre_key = final_dict.get("PreSharedKey")
endpoint = final_dict['Endpoint']
if 'PresharedKey' in final_dict:
pre_key = final_dict['PresharedKey']
else:
pre_key = final_dict['PreSharedKey']
return address, dns, endpoint, pre_key
@staticmethod
def active():
"""
Shows the Active Tunnel
"""
active = (
os.popen('nmcli con show --active | grep -iPo "(.*)(wireguard)"')
.read()
.split()
)
@staticmethod
def active():
active = os.popen('nmcli con show --active | grep -iPo "(.*)(wireguard)"').read().split()
if not active:
active = ""
active = ''
else:
active = active[0]
return active
@staticmethod
def list():
"""
Shows all existing Wireguard tunnels a login user
"""
dirname = Path("/tmp/tlecdcwg/")
@staticmethod
def list():
dirname = Path('/tmp/tlecdcwg/')
wg_s = os.listdir(dirname)
return wg_s
@staticmethod
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
"""
@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)
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")
"""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/wp-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")
"""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/wp-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")
"""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/wp-icons/48/wg_msg.png'
wt = _('Select tunnel')
msg_t = _('Please first import tunnel')
msg_window(iw, ii, wt, msg_t)
except TypeError:
pass
def if_tip(path):
class Tipi:
"""
method that writes in file whether tooltip is displayed or not
Class for Tooltip setting write in File
Calling request path to file
"""
with open(path, "r", encoding="utf-8") as set_file2:
@staticmethod
def if_tip(path):
with open(path, 'r') as set_file2:
lines2 = set_file2.readlines()
if "False\n" in lines2:
tip = False
if 'False\n' in lines2:
return False
else:
tip = True
return tip
class Tooltip:
"""
class for Tooltip
imoprt Tooltip
example: Tooltip(label, "Show tooltip on label")
examble: Tooltip(button, "Show tooltip on button")
info: label and button is parrent.
"""
def __init__(self, widget, text):
self.widget = widget
self.text = text
self.tooltip_window = None
self.widget.bind("<Enter>", self.show_tooltip)
self.widget.bind("<Leave>", self.hide_tooltip)
def show_tooltip(self, event=None):
if self.tooltip_window or not self.text:
return
x, y, _, _ = self.widget.bbox("insert")
x += self.widget.winfo_rootx() + 25
y += self.widget.winfo_rooty() + 20
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, relief="solid", borderwidth=1, padx=5, pady=5)
label.grid()
def hide_tooltip(self, event=None):
if self.tooltip_window:
self.tooltip_window.destroy()
self.tooltip_window = None
return True

215
install

@ -8,78 +8,57 @@ install_file_with(){
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
systemctl --user enable wg_start.service
sudo cp -f org.sslcrypt.policy /usr/share/polkit-1/actions/ && \
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 -fv wg_main.py start_wg.py cls_mth_fc.py ssl_encrypt.py ssl_decrypt.py /usr/local/bin/ && \
sudo cp -uR wp-icons 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
sudo ln -sf /usr/local/bin/wg_main.py /usr/local/bin/wirepy && \
sudo cp -f Wire-Py.desktop /usr/share/applications/
}
install_arch_d(){
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 pacman -S --noconfirm tk python3 python-requests && \
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 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 -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 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
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 org.sslcrypt.policy /usr/share/polkit-1/actions/ && \
sudo cp -u wg_start.service /lib/systemd/system/ && \
sudo systemctl enable wg_start.service
}
install(){
if grep -i 'debian' /etc/os-release > /dev/null 2>&1
if grep -i 'debian' /etc/os-release > /dev/null 2>&1
then
groups > /tmp/isgroup
if grep 'sudo' /tmp/isgroup
then
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"
read -n 1 -s -r -p $"To close the Window press a button"
clear
exit 0
fi
elif grep -i 'mint\|ubuntu\|pop|' /etc/os-release > /dev/null 2>&1
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
elif grep -i 'arch' /etc/os-release > /dev/null 2>&1
then
groups > /tmp/isgroup
clear
@ -96,133 +75,61 @@ install(){
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"
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
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
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/ && \
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 -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
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
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/ && \
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 -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
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
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
else
clear
echo $"Your System could not be determined."
echo
read -n 1 -s -r -p $"Press Enter to exit"
read -n 1 -s -r -p $"To close the window press a button"
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..."
fi
}
which wirepy >/dev/null
if [ $? -eq 0 ]
then
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
else
install
fi
#clear
read -n 1 -s -r -p $"To close the Window press a button"
clear

@ -1,59 +1,28 @@
#!/usr/bin/python3
""" This Script decrypt Wireguardfiles for Wirepy users """
''' This Script decrypt Wireguardfiles for Wirepy users '''
import os
import shutil
from pathlib import Path
from subprocess import check_call
from pathlib import Path
import shutil
uname = Path('/tmp/.loguser')
uname = Path("/tmp/.loguser")
with open(uname, "r", encoding="utf-8") as f:
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 = '/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/"
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', keyfile, '-in', detunnels, '-out', extpath])
shutil.chown(extpath, 1000, 1000)

@ -1,83 +1,49 @@
#!/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 shutil
from pathlib import Path
from subprocess import check_call
from pathlib import Path
import shutil
uname = Path("/tmp/.loguser")
uname = Path('/tmp/.loguser')
with open(uname, "r", encoding="utf-8") 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():
tl = os.listdir(str(dirname))
CPTH = str(keyfile)
CRYPTFILES = CPTH[:-9]
cpth = str(keyfile)
cryptfiles = cpth[:-9]
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:
if dirname.exists():
tl = os.listdir(str(dirname))
CPTH = str(keyfile)
CRYPTFILES = CPTH[:-9]
cpth = str(keyfile)
cryptfiles = cpth[:-9]
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])

@ -1,18 +1,14 @@
#!/usr/bin/python3
"""
This script belongs to wirepy and is for the auto start of the tunnel
"""
from pathlib import Path
from subprocess import check_call
from pathlib import Path
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", encoding="utf-8") as a_con:
# This funtion is for the independent autostart of the previously selected tunnel
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

1211
wg_main.py Executable file

File diff suppressed because it is too large Load Diff

1614
wirepy.py

File diff suppressed because it is too large Load Diff

BIN
wp-icons/128/error.png Normal file

Binary file not shown.

After

(image error) Size: 5.7 KiB

BIN
wp-icons/128/info.png Normal file

Binary file not shown.

After

(image error) Size: 5.7 KiB

Before

(image error) Size: 16 KiB

After

(image error) Size: 16 KiB

Before

(image error) Size: 13 KiB

After

(image error) Size: 13 KiB

Before

(image error) Size: 14 KiB

After

(image error) Size: 14 KiB

Before

(image error) Size: 14 KiB

After

(image error) Size: 14 KiB

Before

(image error) Size: 16 KiB

After

(image error) Size: 16 KiB

Before

(image error) Size: 15 KiB

After

(image error) Size: 15 KiB

Before

(image error) Size: 14 KiB

After

(image error) Size: 14 KiB

BIN
wp-icons/256/error.png Normal file

Binary file not shown.

After

(image error) Size: 12 KiB

BIN
wp-icons/256/info.png Normal file

Binary file not shown.

After

(image error) Size: 10 KiB

Before

(image error) Size: 28 KiB

After

(image error) Size: 28 KiB

Before

(image error) Size: 32 KiB

After

(image error) Size: 32 KiB

Before

(image error) Size: 18 KiB

After

(image error) Size: 18 KiB

Before

(image error) Size: 24 KiB

After

(image error) Size: 24 KiB

Before

(image error) Size: 26 KiB

After

(image error) Size: 26 KiB

Before

(image error) Size: 24 KiB

After

(image error) Size: 24 KiB

Before

(image error) Size: 18 KiB

After

(image error) Size: 18 KiB

BIN
wp-icons/32/error.png Normal file

Binary file not shown.

After

(image error) Size: 5.1 KiB

BIN
wp-icons/32/info.png Normal file

Binary file not shown.

After

(image error) Size: 1.6 KiB

Before

(image error) Size: 6.1 KiB

After

(image error) Size: 6.1 KiB

Before

(image error) Size: 6.0 KiB

After

(image error) Size: 6.0 KiB

Before

(image error) Size: 5.7 KiB

After

(image error) Size: 5.7 KiB

Before

(image error) Size: 6.1 KiB

After

(image error) Size: 6.1 KiB

Before

(image error) Size: 6.2 KiB

After

(image error) Size: 6.2 KiB

Before

(image error) Size: 6.1 KiB

After

(image error) Size: 6.1 KiB

Before

(image error) Size: 5.8 KiB

After

(image error) Size: 5.8 KiB

BIN
wp-icons/48/error.png Normal file

Binary file not shown.

After

(image error) Size: 5.7 KiB

BIN
wp-icons/48/info.png Normal file

Binary file not shown.

After

(image error) Size: 2.2 KiB

Before

(image error) Size: 7.3 KiB

After

(image error) Size: 7.3 KiB

Before

(image error) Size: 17 KiB

After

(image error) Size: 17 KiB

Before

(image error) Size: 7.0 KiB

After

(image error) Size: 7.0 KiB

Before

(image error) Size: 7.3 KiB

After

(image error) Size: 7.3 KiB

Before

(image error) Size: 7.3 KiB

After

(image error) Size: 7.3 KiB

Before

(image error) Size: 7.1 KiB

After

(image error) Size: 7.1 KiB

Before

(image error) Size: 17 KiB

After

(image error) Size: 17 KiB

BIN
wp-icons/64/error.png Normal file

Binary file not shown.

After

(image error) Size: 2.7 KiB

BIN
wp-icons/64/info.png Normal file

Binary file not shown.

After

(image error) Size: 2.7 KiB

Before

(image error) Size: 9.0 KiB

After

(image error) Size: 9.0 KiB

Before

(image error) Size: 8.2 KiB

After

(image error) Size: 8.2 KiB

Before

(image error) Size: 8.2 KiB

After

(image error) Size: 8.2 KiB

Before

(image error) Size: 8.3 KiB

After

(image error) Size: 8.3 KiB

Before

(image error) Size: 9.0 KiB

After

(image error) Size: 9.0 KiB

Before

(image error) Size: 8.7 KiB

After

(image error) Size: 8.7 KiB

Before

(image error) Size: 8.4 KiB

After

(image error) Size: 8.4 KiB