diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index f3650aa..c87dd98 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -4,9 +4,11 @@
-
-
+
+
+
+
@@ -42,23 +44,23 @@
- {
+ "keyToString": {
+ "ASKED_ADD_EXTERNAL_FILES": "true",
+ "Python.INSTALL.executor": "Run",
+ "Python.install.executor": "Run",
+ "Python.main.executor": "Run",
+ "Python.messagebox.executor": "Run",
+ "Python.start_wg.executor": "Run",
+ "Python.wg_func.executor": "Run",
+ "Python.wg_main.executor": "Run",
+ "RunOnceActivity.ShowReadmeOnStart": "true",
+ "Shell Script.install.executor": "Run",
+ "git-widget-placeholder": "main",
+ "last_opened_file_path": "/home/punix/Pyapps/wire-py",
+ "settings.editor.selected.configurable": "preferences.lookFeel"
}
-}]]>
+}
@@ -135,14 +137,6 @@
1723279982210
-
-
- 1724102937260
-
-
-
- 1724102937260
-
1724233806458
@@ -527,7 +521,15 @@
1727380793216
-
+
+
+ 1727525609727
+
+
+
+ 1727525609728
+
+
@@ -568,7 +570,6 @@
-
@@ -593,6 +594,7 @@
-
+
+
\ No newline at end of file
diff --git a/Changelog b/Changelog
index 00544a1..2a47cc2 100644
--- a/Changelog
+++ b/Changelog
@@ -1,15 +1,44 @@
Changelog for Wire-Py
+My standard System: Linux Mint 22 Cinnamon
## [Unreleased]
- os import in wg_func replaced by other methods
- Autoupdate in Options
- Guide to menu '?' with pictures
- Create file for settings (Autoupdate)
- - UID and GID for another Systems (Fedora, Arch, ect.)
- - installer optimize for another Systems
- In Gitea Readme enter text, images
- Dark Theme for Wire-Py
- Own filedialog for import
+ - If Wire-Py already runs, prevent further start
+ - for loops with lists replaced by List Comprehensions
+ - Keeping Classes Together
+
+### Added
+04-10-2024
+
+ - Fix msg_window and remove x , y argument
+
+ - Install further adapted and with colored text if user
+ is not in group sudo or wheel.
+
+ - Added to install Opensuse for installation
+
+ - Tested on Arch with Mate, Xfce4, Gnome, LXDE Desktop
+ Open Suse Tumbleweed KDE, Fedora 40 KDE and Debian 12 Mate Desktop
+
+
+### Added
+29-09-2024
+
+ - installer optimize for another Systems
+
+ - Version number changed to:
+ 1 = 1. Year, 01 = Month of the Year, 0124 = Day and Year of the Year
+ Example for this version: 1.09.2924
+
+ - Comments modified by # description to ''' description '''
+ and insert empty lines for better readability
+
### Added
28-09-2024
@@ -25,3 +54,5 @@ Changelog for Wire-Py
- Message window size corrected so text is displayed better
+ - Version lobster assigned to a variable
+
diff --git a/install b/install
index 91f4ca8..500d4c2 100755
--- a/install
+++ b/install
@@ -1,33 +1,125 @@
#!/bin/bash
+NORMAL='\033[0m'
+GREEN='\033[1;32m'
+RED='\033[31;1;42m'
+BLUE='\033[30;1;34m'
-which sudo >/dev/null
-if [ $? -ne 0 ]
+install_file_with(){
+ clear
+ sudo apt install python3-tk && \
+ sudo cp -u wg_main.py start_wg.py wg_func.py wirepy.py /usr/bin/ && \
+ sudo mkdir -p /etc/wire_py && sudo touch /etc/wire_py/.keys && sudo cp -uR wp-icons /usr/share/icons/ && \
+ 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
+ }
+
+install_arch_d(){
+ clear
+ sudo pacman -S --noconfirm tk python3 && \
+ sudo cp -u wg_main.py start_wg.py wg_func.py wirepy.py /usr/bin/ && \
+ sudo mkdir -p /etc/wire_py && sudo touch /etc/wire_py/.keys && sudo cp -uR wp-icons /usr/share/icons/ && \
+ 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
+ }
+
+if grep -i 'debian' /etc/os-release > /dev/null 2>&1
then
- su -
- apt install python3-tk -y && \
- cp wg_main.py start_wg.py wg_func.py wirepy.py /usr/bin/ && \
- mkdir -p /etc/wire_py && touch /etc/wire_py/.keys && cp -R wp-icons /usr/share/icons/ && \
- chown -R root:root /etc/wire_py && chmod 755 /etc/wire_py && \
- ln -sf /usr/bin/wirepy.py /usr/local/bin/wirepy >/dev/null && \
- cp org.wirepy.policy /usr/share/polkit-1/actions/ && \
- cp Wire-Py.desktop /usr/share/applications/ && \
- cp wg_start.services /lib/systemd/system/ && \
- systemctl enable wg_start.service
+ 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 $"To close the Window press a button"
+ clear
+ exit 0
+ 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 $"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 wg_func.py wirepy.py /usr/bin/ && \
+ sudo mkdir -p /etc/wire_py && sudo touch /etc/wire_py/.keys && sudo cp -uR wp-icons /usr/share/icons/ && \
+ 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 wg_func.py wirepy.py /usr/bin/ && \
+ sudo mkdir -p /etc/wire_py && sudo touch /etc/wire_py/.keys && sudo cp -uR wp-icons /usr/share/icons/ && \
+ 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
- sudo apt install python3-tk && \
- sudo cp wg_main.py start_wg.py wg_func.py wirepy.py /usr/bin/ && \
- sudo mkdir -p /etc/wire_py && sudo touch /etc/wire_py/.keys && sudo cp -R wp-icons /usr/share/icons/ && \
- 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 org.wirepy.policy /usr/share/polkit-1/actions/ && \
- sudo cp Wire-Py.desktop /usr/share/applications/ && \
- sudo cp wg_start.service /lib/systemd/system/ && \
- sudo systemctl enable wg_start.service
-
+ clear
+ echo $"Your System could not be determined."
+ echo
+ 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
diff --git a/wg_func.py b/wg_func.py
index b17d029..4c65940 100755
--- a/wg_func.py
+++ b/wg_func.py
@@ -1,4 +1,5 @@
-# Wireguard functions for Wire-Py
+""" Wireguard Classes and Method for Wire-Py """
+
import os
import shutil
import subprocess
@@ -15,7 +16,7 @@ path_to_file = Path('/etc/wire_py/wg_py')
_u = Path.read_text(Path('/tmp/_u'))
-def msg_window(img_w, img_i, w_title, w_txt, x, y):
+def msg_window(img_w, img_i, w_title, w_txt):
"""
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.
@@ -24,17 +25,10 @@ def msg_window(img_w, img_i, w_title, w_txt, x, y):
img_i = Image for Icon
w_title = Windows Title
w_txt = Text for Tk Window
- x = Window width
- y = Window height
"""
msg = tk.Toplevel()
msg.resizable(width=False, height=False)
- msg.x_width = x
- msg.y_height = y
msg.title(w_title)
- msg.monitor_center_x = msg.winfo_screenwidth() / 2 - (msg.x_width / 2)
- msg.monitor_center_y = msg.winfo_screenheight() / 2 - (msg.y_height / 2)
- msg.geometry('%dx%d+%d+%d' % (msg.x_width, msg.y_height, msg.monitor_center_x, msg.monitor_center_y))
msg.configure(pady=15)
msg.img = tk.PhotoImage(file=img_w)
msg.i_window = tk.Label(msg, image=msg.img)
@@ -58,10 +52,12 @@ class GreenLabel:
"""
def __init__(self):
+
self.StrVar = None
self.lb_tunnel = None
def green_show_label(self):
+
self.lb_tunnel = tk.Label(self, textvariable=self.StrVar, fg='green')
self.lb_tunnel.config(font=('Ubuntu', 11, 'bold'))
self.lb_tunnel.grid(column=2, padx=10, row=0)
@@ -81,6 +77,7 @@ class StartStopBTN:
"""
def __init__(self):
+
self.lb_frame_btn_lbox = None
self.wg_switch = None
self.btn_stst = None
@@ -88,10 +85,12 @@ class StartStopBTN:
self.wg_vpn_stop = tk.PhotoImage(file=r'/usr/share/icons/wp-icons/48/wg_vpn-stop.png')
def button_stop(self):
+
self.btn_stst = tk.Button(self.lb_frame_btn_lbox, image=self.wg_vpn_stop, bd=0, command=self.wg_switch)
self.btn_stst.grid(column=0, row=0, padx=15, pady=8)
def button_start(self):
+
self.btn_stst = tk.Button(self.lb_frame_btn_lbox, image=self.wg_vpn_start, bd=0, command=self.wg_switch)
self.btn_stst.grid(column=0, row=0, padx=15, pady=8)
@@ -104,6 +103,7 @@ class ConToDict:
@classmethod
def covert_to_dict(cls, file):
+
dictlist = []
for lines in file.readlines():
line_plit = lines.split()
@@ -113,7 +113,9 @@ class ConToDict:
for items in dictlist:
if items == '=':
dictlist.remove(items)
- for _ in dictlist: # 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]]
c = [dictlist[4], dictlist[5]]
@@ -127,7 +129,8 @@ class ConToDict:
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:
@@ -146,7 +149,8 @@ class TunnelActiv:
"""
@staticmethod
- def active(): # Shows the active tunnel
+ def active():
+
active = os.popen('nmcli con show --active | grep -iPo "(.*)(wireguard)"').read().split()
if not active:
active = ''
@@ -163,6 +167,7 @@ class ShowAddress:
"""
def __init__(self):
+
self.lb_frame2 = None
self.lb_frame = None
self.endpoint = None
@@ -173,7 +178,8 @@ class ShowAddress:
self.add = None
def init_and_report(self, data=None):
- # Address Label
+
+ """ Address Label """
self.add = tk.StringVar()
self.add.set('Address: ' + data[0])
self.DNS = tk.StringVar()
@@ -182,20 +188,24 @@ class ShowAddress:
self.enp.set('Endpoint: ' + data[2])
def label_empty(self):
+
self.add.set('')
self.DNS.set('')
self.enp.set('')
def show_data(self):
- # Address Label
+
+ """ Address Label """
self.address = tk.Label(self.lb_frame, textvariable=self.add, fg='blue')
self.address.grid(column=0, row=4, sticky='w', padx=10, pady=6)
self.address.config(font=('Ubuntu', 9))
- # DNS Label
+
+ ''' DNS Label '''
self.dns = tk.Label(self.lb_frame, textvariable=self.DNS, fg='blue')
self.dns.grid(column=0, row=6, sticky='w', padx=10, pady=6)
self.dns.config(font=('Ubuntu', 9))
- # Endpoint Label
+
+ ''' Endpoint Label '''
self.endpoint = tk.Label(self.lb_frame2, textvariable=self.enp, fg='blue')
self.endpoint.grid(column=0, row=7, sticky='w', padx=10, pady=10)
self.endpoint.config(font=('Ubuntu', 9))
@@ -209,7 +219,9 @@ class ListTunnels:
@staticmethod
def tl_list():
wg_s = os.popen('nmcli con show | grep -iPo "(.*)(wireguard)"').read().split()
- tl = wg_s[::3] # tl = Tunnel list # Show of 4.Element in list
+
+ ''' tl = Tunnel list # Show of 4.Element in list '''
+ tl = wg_s[::3]
return tl
@@ -236,6 +248,7 @@ class ImportTunnel:
self.l_box = None
def wg_import_select(self):
+
try:
filepath = filedialog.askopenfilename(initialdir=str(_u), title='Select Wireguard config File',
filetypes=[('WG config files', '*.conf')], )
@@ -245,6 +258,7 @@ class ImportTunnel:
path_split = filepath.split('/')
path_split1 = path_split[-1]
self.a = TunnelActiv.active()
+
if 'PrivateKey = ' in read and 'PublicKey = ' in read:
with open(filepath, 'r') as file:
key = ConToDict.covert_to_dict(file)
@@ -258,10 +272,10 @@ class ImportTunnel:
ii = r'/usr/share/icons/wp-icons/48/wg_msg.png'
wt = 'Import Error'
msg_t = 'Tunnel already available!\nPlease use another file for import'
- x = 340 # width
- y = 140 # height
- msg_window(iw, ii, wt, msg_t, x, y)
+ msg_window(iw, ii, wt, msg_t)
+
else:
+
with open('/etc/wire_py/.keys', 'a') as keyfile:
keyfile.write(pre_key + '\r')
if len(path_split1) > 17:
@@ -296,21 +310,21 @@ class ImportTunnel:
wg_read = Path('/etc/wire_py') / str(self.a + '.conf')
with open(wg_read, 'r') as file_for_key:
data = ConToDict.covert_to_dict(file_for_key)
- # Address Label
+
+ ''' Address Label '''
ShowAddress.init_and_report(self, data)
ShowAddress.show_data(self)
check_call(['nmcli', 'con', 'mod', self.a, 'connection.autoconnect', 'no'])
Path.chmod(wg_read, 0o600)
if 'PrivateKey = ' not in read:
- """img_w, img_i, w_title, w_txt x, y hand over"""
+ """img_w, img_i, w_title, w_txt hand over"""
iw = r'/usr/share/icons/wp-icons/64/error.png'
ii = r'/usr/share/icons/wp-icons/48/wg_msg.png'
wt = 'Import Error'
msg_t = 'Oh... no valid Wireguard File!\nPlease select a valid Wireguard File'
- x = 340 # width
- y = 140 # height
- msg_window(iw, ii, wt, msg_t, x, y)
+ msg_window(iw, ii, wt, msg_t)
+
except EOFError:
pass
except TypeError:
@@ -318,6 +332,7 @@ class ImportTunnel:
except FileNotFoundError:
pass
except subprocess.CalledProcessError:
+
print('Tunnel exist!')
@@ -339,16 +354,21 @@ class FileHandle:
self.l_box = None
def box_set(self):
+
try:
select_tunnel = self.l_box.curselection()
select_tl = self.l_box.get(select_tunnel[0])
+
if self.selected_option.get() == 0:
Path.unlink(path_to_file)
tl = ListTunnels.tl_list()
+
if len(tl) == 0:
self.wg_autostart.configure(state='disabled')
+
if self.selected_option.get() >= 1:
Path.write_text(path_to_file, select_tl)
+
except IndexError:
self.selected_option.set(1)
@@ -363,6 +383,7 @@ class OnOff:
"""
def __init__(self):
+
self.wg_autostart = None
self.selected_option = None
self.auto_con = None
@@ -371,13 +392,16 @@ class OnOff:
self.lb_frame_buttons = None
def on_off(self):
+
if Path.exists(path_to_file):
self.selected_option.set(1)
self.autoconnect_var.set('')
if not Path.is_dir(Path('/etc/wire_py')):
Path.mkdir(Path('/etc/wire_py'))
self.auto_con = Path.read_text(path_to_file)
+
else:
+
self.wg_autostart.configure(state='disabled')
self.auto_con = 'no Autoconnect'
self.autoconnect_var.set('')
@@ -401,6 +425,7 @@ class ExportTunnels:
now_time = datetime.now()
now_datetime = now_time.strftime('wg-exp-' + '%m-%d-%Y' + '-' + '%H:%M')
tl = ListTunnels.tl_list()
+
try:
if len(tl) != 0:
wg_tar = str(_u) + '/' + now_datetime
@@ -413,34 +438,31 @@ class ExportTunnels:
shutil.rmtree(source)
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/wp-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'
- x = 340 # width
- y = 140 # height
- msg_window(iw, ii, wt, msg_t, x, y)
+ msg_window(iw, ii, wt, msg_t)
+
else:
+
"""img_w, img_i, w_title, w_txt hand over"""
iw = r'/usr/share/icons/wp-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'
- x = 340 # width
- y = 140 # height
- msg_window(iw, ii, wt, msg_t, x, y)
+ msg_window(iw, ii, wt, msg_t)
+
else:
- """img_w, img_i, w_title, w_txt x, y hand over"""
+
+ """img_w, img_i, w_title, w_txt hand over"""
iw = r'/usr/share/icons/wp-icons/64/info.png'
ii = r'/usr/share/icons/wp-icons/48/wg_msg.png'
wt = 'Select tunnel'
msg_t = 'Please first import tunnel.'
- x = 280 # width
- y = 130 # height
- msg_window(iw, ii, wt, msg_t, x, y)
+ msg_window(iw, ii, wt, msg_t)
except TypeError:
pass
-
-
diff --git a/wg_main.py b/wg_main.py
index f34df1f..6636a82 100755
--- a/wg_main.py
+++ b/wg_main.py
@@ -11,6 +11,8 @@ from wg_func import (TunnelActiv, ListTunnels, ImportTunnel, ConToDict, GreenLab
font_color = '#4011a7'
dk_theme = '#2e2e2e'
+''' 1 = 1. Year, 09 = Month of the Year, 2924 = Day and Year of the Year '''
+version = 'v. 1.10.0424'
class MainWindow(tk.Tk):
@@ -31,7 +33,8 @@ class MainWindow(tk.Tk):
self.rowconfigure(0, weight=1)
self.style = ttk.Style(self)
self.style.theme_use('clam')
- # Load the image file from disk.
+
+ ''' Load the image file from disk. '''
self.wg_icon = tk.PhotoImage(file=r'/usr/share/icons/wp-icons/48/wg_vpn.png')
# Set it as the window icon.
self.iconphoto(True, self.wg_icon)
@@ -40,7 +43,7 @@ class MainWindow(tk.Tk):
self.app_menu = tk.Menu(self, borderwidth=0)
self.configure(menu=self.app_menu)
- self.app_menu.add_cascade(label='v. 1.4.7')
+ self.app_menu.add_cascade(label=version)
self.app_menu.add_cascade(label='Options')
self.app_menu.add_cascade(label='?')
@@ -66,48 +69,53 @@ class FrameWidgets(ttk.Frame):
self.exp_pic = tk.PhotoImage(file=r'/usr/share/icons/wp-icons/48/wg_export.png')
self.warning_pic = tk.PhotoImage(file=r'/usr/share/icons/wp-icons/64/error.png')
- # Show active Tunnel
+ ''' Show active Tunnel '''
self.a = TunnelActiv.active()
- # Label Frame 1
+
+ ''' Label Frame 1 '''
self.lb_frame_btn_lbox = ttk.Frame(self)
self.lb_frame_btn_lbox.configure(relief='flat')
self.lb_frame_btn_lbox.grid(column=0, rowspan=4, row=0)
self.columnconfigure(0, weight=1)
self.rowconfigure(0, weight=1)
- # Label Frame 2
+
+ ''' Label Frame 2 '''
self.lb_frame = ttk.Frame(self)
self.lb_frame.configure(relief='solid')
self.lb_frame.grid(column=2, row=1, sticky='snew', padx=20, pady=5)
self.columnconfigure(2, weight=1)
self.rowconfigure(1, weight=1)
- # Label Frame 3
+
+ ''' Label Frame 3 '''
self.lb_frame2 = ttk.Frame(self)
self.lb_frame2.configure(relief='solid')
self.lb_frame2.grid(column=2, row=2, sticky='snew', padx=20, pady=5)
self.columnconfigure(2, weight=1)
self.rowconfigure(2, weight=1)
- # Show active Label
+ ''' Show active Label '''
self.select_tunnel = None
self.lb = tk.Label(self, text='Active: ')
self.lb.config(font=('Ubuntu', 11, 'bold'))
self.lb.grid(column=2, row=0, padx=15, sticky='w')
self.columnconfigure(2, weight=1)
self.rowconfigure(0, weight=1)
- # Label to Show active Tunnel
+
+ ''' Label to Show active Tunnel '''
self.StrVar = tk.StringVar(value=self.a)
GreenLabel.green_show_label(self)
- # Interface Label
+
+ ''' Interface Label '''
self.interface = tk.Label(self.lb_frame, text='Interface', fg=font_color)
self.interface.grid(column=0, row=2, sticky='we', padx=120)
self.interface.config(font=('Ubuntu', 9))
- # Peer Label
+ ''' Peer Label '''
self.peer = tk.Label(self.lb_frame2, text='Peer', fg=font_color)
self.peer.config(font=('Ubuntu', 9))
self.peer.grid(column=0, row=3, sticky='we', padx=130)
- # Listbox with Scrollbar
+ ''' Listbox with Scrollbar '''
def enable_check_box(event):
tl = ListTunnels.tl_list()
if len(tl) != 0:
@@ -127,29 +135,33 @@ class FrameWidgets(ttk.Frame):
self.l_box.configure(yscrollcommand=self.scrollbar.set)
self.rowconfigure(0, weight=1)
- # Tunnel List
+ ''' Tunnel List '''
self.tl = ListTunnels.tl_list()
for tunnels in self.tl:
self.l_box.insert("end", tunnels)
self.l_box.update()
- # Button Vpn
+
+ ''' Button Vpn '''
if self.a != '':
StartStopBTN.button_stop(self)
wg_read = Path('/etc/wire_py') / str(self.a + '.conf')
with open(wg_read, 'r') as file:
data = ConToDict.covert_to_dict(file)
- # Address Label
+
+ ''' Address Label '''
ShowAddress.init_and_report(self, data)
ShowAddress.show_data(self)
else:
StartStopBTN.button_start(self)
- # Address Label
+
+ ''' Address Label '''
self.add = tk.StringVar()
self.DNS = tk.StringVar()
self.enp = tk.StringVar()
ShowAddress.label_empty(self)
ShowAddress.show_data(self)
- # Button Import
+
+ ''' Button Import '''
self.btn_i = tk.Button(self.lb_frame_btn_lbox,
image=self.imp_pic, bd=0,
command=lambda: ImportTunnel.wg_import_select(self))
@@ -182,7 +194,8 @@ class FrameWidgets(ttk.Frame):
file_one = Path('/etc/wire_py/.keys2')
file_two = file_one.with_name('.keys')
file_one.replace(file_two)
- # for disable checkbox when Listbox empty
+
+ ''' for disable checkbox when Listbox empty '''
tl = ListTunnels.tl_list()
if len(tl) == 0:
self.wg_autostart.configure(state='disabled')
@@ -190,7 +203,8 @@ class FrameWidgets(ttk.Frame):
self.StrVar.set(value='')
StartStopBTN.button_start(self)
self.l_box.update()
- # Address Label
+
+ ''' Address Label '''
self.add.set('')
self.DNS.set('')
self.enp.set('')
@@ -198,33 +212,32 @@ class FrameWidgets(ttk.Frame):
except IndexError:
tl = ListTunnels.tl_list()
if len(tl) != 0:
- """img_w, img_i, w_title, w_txt x, y hand over"""
+
+ """img_w, img_i, w_title, w_txt hand over"""
iw = r'/usr/share/icons/wp-icons/64/info.png'
ii = r'/usr/share/icons/wp-icons/48/wg_msg.png'
wt = 'Select tunnel'
msg_t = 'Please select a tunnel from the list.'
- x = 340 # width
- y = 140 # height
- msg_window(iw, ii, wt, msg_t, x, y)
+ msg_window(iw, ii, wt, msg_t)
+
else:
- """img_w, img_i, w_title, w_txt x, y hand over"""
+
+ """img_w, img_i, w_title, w_txt hand over"""
iw = r'/usr/share/icons/wp-icons/64/info.png'
ii = r'/usr/share/icons/wp-icons/48/wg_msg.png'
wt = 'Select tunnel'
msg_t = 'Please first import tunnel.'
- x = 280 # width
- y = 130 # height
- msg_window(iw, ii, wt, msg_t, x, y)
+ msg_window(iw, ii, wt, msg_t)
- # Button Trash
+ ''' Button Trash '''
self.btn_tr = tk.Button(self.lb_frame_btn_lbox, image=self.tr_pic, bd=0, command=delete)
self.btn_tr.grid(column=0, row=2, padx=15, pady=8)
- # Button Export
+ ''' Button Export '''
self.btn_exp = tk.Button(self.lb_frame_btn_lbox, image=self.exp_pic, bd=0, command=ExportTunnels.wg_export)
self.btn_exp.grid(column=0, row=3, padx=15, pady=8)
- # Label Entry
+ ''' Label Entry '''
self.lb_rename = ttk.Entry(self, width=20)
self.lb_rename.grid(column=2, row=4, padx=30, pady=5, sticky='w')
self.lb_rename.insert(0, 'Max. 12 characters!')
@@ -234,39 +247,39 @@ class FrameWidgets(ttk.Frame):
special_characters = ['\\', '/', '{', '}', ' ']
if len(self.lb_rename.get()) > 12:
+
"""img_w, img_i, w_title, w_txt hand over"""
iw = r'/usr/share/icons/wp-icons/64/info.png'
ii = r'/usr/share/icons/wp-icons/48/wg_msg.png'
wt = 'Renaming not possible'
msg_t = 'The new name may contain only 12 characters.'
- x = 420 # width
- y = 140 # height
- msg_window(iw, ii, wt, msg_t, x, y)
+ msg_window(iw, ii, wt, msg_t)
elif len(self.lb_rename.get()) == 0:
- """img_w, img_i, w_title, w_txt x, y hand over"""
+
+ """img_w, img_i, w_title, w_txt hand over"""
iw = r'/usr/share/icons/wp-icons/64/info.png'
ii = r'/usr/share/icons/wp-icons/48/wg_msg.png'
wt = 'Renaming not possible'
msg_t = 'At least one character must be entered.'
- x = 380 # width
- y = 140 # height
- msg_window(iw, ii, wt, msg_t, x, y)
+ msg_window(iw, ii, wt, msg_t)
elif any(ch in special_characters for ch in self.lb_rename.get()):
- """img_w, img_i, w_title, w_txt x, y hand over"""
+
+ """img_w, img_i, w_title, w_txt hand over"""
iw = r'/usr/share/icons/wp-icons/64/info.png'
ii = r'/usr/share/icons/wp-icons/48/wg_msg.png'
wt = 'Renaming not possible'
msg_t = 'No valid sign. These must not be used.\nBlank, Slash, Backslash and { }\n'
- x = 370 # width
- y = 130 # height
- msg_window(iw, ii, wt, msg_t, x, y)
+ msg_window(iw, ii, wt, msg_t)
+
else:
+
try:
self.select_tunnel = self.l_box.curselection()
select_tl = self.l_box.get(self.select_tunnel[0])
- # nmcli connection modify old connection.id iphone
+
+ ''' nmcli connection modify old connection.id iphone '''
check_call(['nmcli', 'connection', 'modify', select_tl, 'connection.id', self.lb_rename.get()])
source = Path('/etc/wire_py') / str(select_tl + '.conf')
destination = source.with_name(str(self.lb_rename.get() + '.conf'))
@@ -286,21 +299,21 @@ class FrameWidgets(ttk.Frame):
self.autoconnect_var.set(value=new_a_connect)
Path.write_text(path_to_file, new_a_connect)
return select_tl
+
except IndexError:
- """img_w, img_i, w_title, w_txt x, y hand over"""
+
+ """img_w, img_i, w_title, w_txt hand over"""
iw = r'/usr/share/icons/wp-icons/64/info.png'
ii = r'/usr/share/icons/wp-icons/48/wg_msg.png'
wt = 'Renaming not possible'
msg_t = 'Please select a tunnel from the list.'
- x = 340 # width
- y = 140 # height
- msg_window(iw, ii, wt, msg_t, x, y)
+ msg_window(iw, ii, wt, msg_t)
- # Button Rename
+ ''' Button Rename '''
self.btn_rename = ttk.Button(self, text='Rename', state='disable', command=tl_rename)
self.btn_rename.grid(column=2, row=4, padx=20, pady=10, sticky='e')
- # Check Buttons
+ ''' Check Buttons '''
self.selected_option = tk.IntVar()
self.autoconnect_var = tk.StringVar()
self.autoconnect_var.set(self.auto_con)
@@ -330,49 +343,56 @@ class FrameWidgets(ttk.Frame):
wg_read = Path('/etc/wire_py') / str(select_tl + '.conf')
with open(wg_read, 'r') as file:
data = ConToDict.covert_to_dict(file)
- # Address Label
+
+ ''' Address Label '''
ShowAddress.init_and_report(self, data)
ShowAddress.show_data(self)
- # Button Start/Stop
+
+ ''' Button Start/Stop '''
StartStopBTN.button_stop(self)
self.a = TunnelActiv.active()
self.StrVar = tk.StringVar()
self.StrVar.set(self.a)
GreenLabel.green_show_label(self)
+
elif self.a != '':
- # Button Start/Stop
+
+ ''' Button Start/Stop '''
StartStopBTN.button_stop(self)
check_call(['nmcli', 'connection', 'down', self.a])
- # Button Start/Stop
+
+ ''' Button Start/Stop '''
StartStopBTN.button_start(self)
self.a = TunnelActiv.active()
self.StrVar.set('')
GreenLabel.green_show_label(self)
- # Address Label
+
+ ''' Address Label '''
self.add.set('')
self.DNS.set('')
self.enp.set('')
ShowAddress.show_data(self)
+
except IndexError:
+
tl = ListTunnels.tl_list()
if len(tl) != 0:
- """img_w, img_i, w_title, w_txt x, y hand over"""
+
+ """img_w, img_i, w_title, w_txt hand over"""
iw = r'/usr/share/icons/wp-icons/64/info.png'
ii = r'/usr/share/icons/wp-icons/48/wg_msg.png'
wt = 'Select tunnel'
msg_t = 'Please select a tunnel from the list.'
- x = 340 # width
- y = 140 # height
- msg_window(iw, ii, wt, msg_t, x, y)
+ msg_window(iw, ii, wt, msg_t)
+
else:
- """img_w, img_i, w_title, w_txt x, y hand over"""
+
+ """img_w, img_i, w_title, w_txt hand over"""
iw = r'/usr/share/icons/wp-icons/64/info.png'
ii = r'/usr/share/icons/wp-icons/48/wg_msg.png'
wt = 'Select tunnel'
msg_t = 'Please first import tunnel.'
- x = 280 # width
- y = 130 # height
- msg_window(iw, ii, wt, msg_t, x, y)
+ msg_window(iw, ii, wt, msg_t)
if __name__ == '__main__':
diff --git a/wire-py1.10.0424.tar.gz b/wire-py1.10.0424.tar.gz
new file mode 100644
index 0000000..56ade47
Binary files /dev/null and b/wire-py1.10.0424.tar.gz differ