Merge pull request 'Fix msg_window and remove x , y argument' (#16) from 1.10.0424 into main

Reviewed-on: https://git.ilunix.de/punix/Wire-Py/pulls/16
This commit is contained in:
Désiré Werner Menrath 2024-10-04 21:01:26 +02:00
commit f9d4256679
6 changed files with 319 additions and 152 deletions

View File

@ -4,9 +4,11 @@
<option name="autoReloadType" value="SELECTIVE" /> <option name="autoReloadType" value="SELECTIVE" />
</component> </component>
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="940e1630-c825-4d4c-be80-bc11f543c122" name="Changes" comment="fix installer add .keys file"> <list default="true" id="940e1630-c825-4d4c-be80-bc11f543c122" name="Changes" comment="Changelog create When exporting, the folder is now copied to /tmp and the non .conf files are deleted before the zip file is created. In main.py os import removed. Since os have been replaced by pathlib and shutil.&#10;Start with version number 1.4.7&#10;Message window size corrected so text is displayed better">
<change afterPath="$PROJECT_DIR$/Changelog" afterDir="false" /> <change afterPath="$PROJECT_DIR$/wire-py1.10.0424.tar.gz" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Changelog" beforeDir="false" afterPath="$PROJECT_DIR$/Changelog" afterDir="false" />
<change beforePath="$PROJECT_DIR$/install" beforeDir="false" afterPath="$PROJECT_DIR$/install" afterDir="false" />
<change beforePath="$PROJECT_DIR$/wg_func.py" beforeDir="false" afterPath="$PROJECT_DIR$/wg_func.py" afterDir="false" /> <change beforePath="$PROJECT_DIR$/wg_func.py" beforeDir="false" afterPath="$PROJECT_DIR$/wg_func.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/wg_main.py" beforeDir="false" afterPath="$PROJECT_DIR$/wg_main.py" afterDir="false" /> <change beforePath="$PROJECT_DIR$/wg_main.py" beforeDir="false" afterPath="$PROJECT_DIR$/wg_main.py" afterDir="false" />
</list> </list>
@ -42,23 +44,23 @@
<option name="hideEmptyMiddlePackages" value="true" /> <option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" /> <option name="showLibraryContents" value="true" />
</component> </component>
<component name="PropertiesComponent"><![CDATA[{ <component name="PropertiesComponent">{
"keyToString": { &quot;keyToString&quot;: {
"ASKED_ADD_EXTERNAL_FILES": "true", &quot;ASKED_ADD_EXTERNAL_FILES&quot;: &quot;true&quot;,
"Python.INSTALL.executor": "Run", &quot;Python.INSTALL.executor&quot;: &quot;Run&quot;,
"Python.install.executor": "Run", &quot;Python.install.executor&quot;: &quot;Run&quot;,
"Python.main.executor": "Run", &quot;Python.main.executor&quot;: &quot;Run&quot;,
"Python.messagebox.executor": "Run", &quot;Python.messagebox.executor&quot;: &quot;Run&quot;,
"Python.start_wg.executor": "Run", &quot;Python.start_wg.executor&quot;: &quot;Run&quot;,
"Python.wg_func.executor": "Run", &quot;Python.wg_func.executor&quot;: &quot;Run&quot;,
"Python.wg_main.executor": "Run", &quot;Python.wg_main.executor&quot;: &quot;Run&quot;,
"RunOnceActivity.ShowReadmeOnStart": "true", &quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
"Shell Script.install.executor": "Run", &quot;Shell Script.install.executor&quot;: &quot;Run&quot;,
"git-widget-placeholder": "main", &quot;git-widget-placeholder&quot;: &quot;main&quot;,
"last_opened_file_path": "/home/punix/Pyapps/wire-py", &quot;last_opened_file_path&quot;: &quot;/home/punix/Pyapps/wire-py&quot;,
"settings.editor.selected.configurable": "preferences.lookFeel" &quot;settings.editor.selected.configurable&quot;: &quot;preferences.lookFeel&quot;
} }
}]]></component> }</component>
<component name="RecentsManager"> <component name="RecentsManager">
<key name="CopyFile.RECENT_KEYS"> <key name="CopyFile.RECENT_KEYS">
<recent name="$PROJECT_DIR$" /> <recent name="$PROJECT_DIR$" />
@ -135,14 +137,6 @@
<option name="presentableId" value="Default" /> <option name="presentableId" value="Default" />
<updated>1723279982210</updated> <updated>1723279982210</updated>
</task> </task>
<task id="LOCAL-00007" summary="add Label Interface and Peer to new FrameWidget one and two. when import Tunnel then add to list works and remove of list when Tunnel delete.(with Label active on and off) &#10;add to class and methods open a avtive Tunnel when Wire-Py open, when import and start a Tunnel">
<option name="closed" value="true" />
<created>1724102937260</created>
<option name="number" value="00007" />
<option name="presentableId" value="LOCAL-00007" />
<option name="project" value="LOCAL" />
<updated>1724102937260</updated>
</task>
<task id="LOCAL-00008" summary="add file dict_to_address for &#10;address a active Tunnel. Label green pack in Class.&#10;add Class to convert fileoutput as String to Dictionary"> <task id="LOCAL-00008" summary="add file dict_to_address for &#10;address a active Tunnel. Label green pack in Class.&#10;add Class to convert fileoutput as String to Dictionary">
<option name="closed" value="true" /> <option name="closed" value="true" />
<created>1724233806458</created> <created>1724233806458</created>
@ -527,7 +521,15 @@
<option name="project" value="LOCAL" /> <option name="project" value="LOCAL" />
<updated>1727380793216</updated> <updated>1727380793216</updated>
</task> </task>
<option name="localTasksCounter" value="56" /> <task id="LOCAL-00056" summary="Changelog create When exporting, the folder is now copied to /tmp and the non .conf files are deleted before the zip file is created. In main.py os import removed. Since os have been replaced by pathlib and shutil.&#10;Start with version number 1.4.7&#10;Message window size corrected so text is displayed better">
<option name="closed" value="true" />
<created>1727525609727</created>
<option name="number" value="00056" />
<option name="presentableId" value="LOCAL-00056" />
<option name="project" value="LOCAL" />
<updated>1727525609728</updated>
</task>
<option name="localTasksCounter" value="57" />
<servers /> <servers />
</component> </component>
<component name="UnknownFeatures"> <component name="UnknownFeatures">
@ -568,7 +570,6 @@
</component> </component>
<component name="VcsManagerConfiguration"> <component name="VcsManagerConfiguration">
<option name="ADD_EXTERNAL_FILES_SILENTLY" value="true" /> <option name="ADD_EXTERNAL_FILES_SILENTLY" value="true" />
<MESSAGE value="in delete replace open with Path&#10;install fixes" />
<MESSAGE value="new format little fixes icons sort add policy add .desktop File install Part 2" /> <MESSAGE value="new format little fixes icons sort add policy add .desktop File install Part 2" />
<MESSAGE value="install fix for set dir right" /> <MESSAGE value="install fix for set dir right" />
<MESSAGE value="fix checkbox disable and policy rename main.py to wg_main.py" /> <MESSAGE value="fix checkbox disable and policy rename main.py to wg_main.py" />
@ -593,6 +594,7 @@
<MESSAGE value="little fixes" /> <MESSAGE value="little fixes" />
<MESSAGE value="fix msg_boxes when tunnel list = 0 a Start, Delete and Export" /> <MESSAGE value="fix msg_boxes when tunnel list = 0 a Start, Delete and Export" />
<MESSAGE value="fix installer add .keys file" /> <MESSAGE value="fix installer add .keys file" />
<option name="LAST_COMMIT_MESSAGE" value="fix installer add .keys file" /> <MESSAGE value="Changelog create When exporting, the folder is now copied to /tmp and the non .conf files are deleted before the zip file is created. In main.py os import removed. Since os have been replaced by pathlib and shutil.&#10;Start with version number 1.4.7&#10;Message window size corrected so text is displayed better" />
<option name="LAST_COMMIT_MESSAGE" value="Changelog create When exporting, the folder is now copied to /tmp and the non .conf files are deleted before the zip file is created. In main.py os import removed. Since os have been replaced by pathlib and shutil.&#10;Start with version number 1.4.7&#10;Message window size corrected so text is displayed better" />
</component> </component>
</project> </project>

View File

@ -1,15 +1,44 @@
Changelog for Wire-Py Changelog for Wire-Py
My standard System: Linux Mint 22 Cinnamon
## [Unreleased] ## [Unreleased]
- os import in wg_func replaced by other methods - os import in wg_func replaced by other methods
- Autoupdate in Options - Autoupdate in Options
- Guide to menu '?' with pictures - Guide to menu '?' with pictures
- Create file for settings (Autoupdate) - 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 - In Gitea Readme enter text, images
- Dark Theme for Wire-Py - Dark Theme for Wire-Py
- Own filedialog for import - 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 ### Added
28-09-2024 28-09-2024
@ -25,3 +54,5 @@ Changelog for Wire-Py
- Message window size corrected so text is displayed better - Message window size corrected so text is displayed better
- Version lobster assigned to a variable

136
install
View File

@ -1,33 +1,125 @@
#!/bin/bash #!/bin/bash
NORMAL='\033[0m'
GREEN='\033[1;32m'
RED='\033[31;1;42m'
BLUE='\033[30;1;34m'
which sudo >/dev/null install_file_with(){
if [ $? -ne 0 ] clear
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
else
sudo apt install python3-tk && \ sudo apt install python3-tk && \
sudo cp wg_main.py start_wg.py wg_func.py wirepy.py /usr/bin/ && \ 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 -R wp-icons /usr/share/icons/ && \ 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 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 ln -sf /usr/bin/wirepy.py /usr/local/bin/wirepy && \
sudo cp org.wirepy.policy /usr/share/polkit-1/actions/ && \ sudo cp -u org.wirepy.policy /usr/share/polkit-1/actions/ && \
sudo cp Wire-Py.desktop /usr/share/applications/ && \ sudo cp -u Wire-Py.desktop /usr/share/applications/ && \
sudo cp wg_start.service /lib/systemd/system/ && \ 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
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 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
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 fi
clear
read -n 1 -s -r -p $"To close the Window press a button" read -n 1 -s -r -p $"To close the Window press a button"
clear

View File

@ -1,4 +1,5 @@
# Wireguard functions for Wire-Py """ Wireguard Classes and Method for Wire-Py """
import os import os
import shutil import shutil
import subprocess import subprocess
@ -15,7 +16,7 @@ path_to_file = Path('/etc/wire_py/wg_py')
_u = Path.read_text(Path('/tmp/_u')) _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. 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.
@ -24,17 +25,10 @@ def msg_window(img_w, img_i, w_title, w_txt, x, y):
img_i = Image for Icon img_i = Image for Icon
w_title = Windows Title w_title = Windows Title
w_txt = Text for Tk Window w_txt = Text for Tk Window
x = Window width
y = Window height
""" """
msg = tk.Toplevel() msg = tk.Toplevel()
msg.resizable(width=False, height=False) msg.resizable(width=False, height=False)
msg.x_width = x
msg.y_height = y
msg.title(w_title) 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.configure(pady=15)
msg.img = tk.PhotoImage(file=img_w) msg.img = tk.PhotoImage(file=img_w)
msg.i_window = tk.Label(msg, image=msg.img) msg.i_window = tk.Label(msg, image=msg.img)
@ -58,10 +52,12 @@ class GreenLabel:
""" """
def __init__(self): def __init__(self):
self.StrVar = None self.StrVar = None
self.lb_tunnel = None self.lb_tunnel = None
def green_show_label(self): def green_show_label(self):
self.lb_tunnel = tk.Label(self, textvariable=self.StrVar, fg='green') self.lb_tunnel = tk.Label(self, textvariable=self.StrVar, fg='green')
self.lb_tunnel.config(font=('Ubuntu', 11, 'bold')) self.lb_tunnel.config(font=('Ubuntu', 11, 'bold'))
self.lb_tunnel.grid(column=2, padx=10, row=0) self.lb_tunnel.grid(column=2, padx=10, row=0)
@ -81,6 +77,7 @@ class StartStopBTN:
""" """
def __init__(self): def __init__(self):
self.lb_frame_btn_lbox = None self.lb_frame_btn_lbox = None
self.wg_switch = None self.wg_switch = None
self.btn_stst = 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') self.wg_vpn_stop = tk.PhotoImage(file=r'/usr/share/icons/wp-icons/48/wg_vpn-stop.png')
def button_stop(self): 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 = 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) self.btn_stst.grid(column=0, row=0, padx=15, pady=8)
def button_start(self): 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 = 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) self.btn_stst.grid(column=0, row=0, padx=15, pady=8)
@ -104,6 +103,7 @@ class ConToDict:
@classmethod @classmethod
def covert_to_dict(cls, file): def covert_to_dict(cls, file):
dictlist = [] dictlist = []
for lines in file.readlines(): for lines in file.readlines():
line_plit = lines.split() line_plit = lines.split()
@ -113,7 +113,9 @@ class ConToDict:
for items in dictlist: for items in dictlist:
if items == '=': if items == '=':
dictlist.remove(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]] a = [dictlist[0], dictlist[1]]
b = [dictlist[2], dictlist[3]] b = [dictlist[2], dictlist[3]]
c = [dictlist[4], dictlist[5]] c = [dictlist[4], dictlist[5]]
@ -127,7 +129,8 @@ class ConToDict:
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:
@ -146,7 +149,8 @@ class TunnelActiv:
""" """
@staticmethod @staticmethod
def active(): # Shows the active tunnel def active():
active = os.popen('nmcli con show --active | grep -iPo "(.*)(wireguard)"').read().split() active = os.popen('nmcli con show --active | grep -iPo "(.*)(wireguard)"').read().split()
if not active: if not active:
active = '' active = ''
@ -163,6 +167,7 @@ class ShowAddress:
""" """
def __init__(self): def __init__(self):
self.lb_frame2 = None self.lb_frame2 = None
self.lb_frame = None self.lb_frame = None
self.endpoint = None self.endpoint = None
@ -173,7 +178,8 @@ class ShowAddress:
self.add = None self.add = None
def init_and_report(self, data=None): def init_and_report(self, data=None):
# Address Label
""" Address Label """
self.add = tk.StringVar() self.add = tk.StringVar()
self.add.set('Address: ' + data[0]) self.add.set('Address: ' + data[0])
self.DNS = tk.StringVar() self.DNS = tk.StringVar()
@ -182,20 +188,24 @@ class ShowAddress:
self.enp.set('Endpoint: ' + data[2]) self.enp.set('Endpoint: ' + data[2])
def label_empty(self): def label_empty(self):
self.add.set('') self.add.set('')
self.DNS.set('') self.DNS.set('')
self.enp.set('') self.enp.set('')
def show_data(self): def show_data(self):
# Address Label
""" Address Label """
self.address = tk.Label(self.lb_frame, textvariable=self.add, fg='blue') 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.grid(column=0, row=4, sticky='w', padx=10, pady=6)
self.address.config(font=('Ubuntu', 9)) self.address.config(font=('Ubuntu', 9))
# DNS Label
''' DNS Label '''
self.dns = tk.Label(self.lb_frame, textvariable=self.DNS, fg='blue') 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.grid(column=0, row=6, sticky='w', padx=10, pady=6)
self.dns.config(font=('Ubuntu', 9)) self.dns.config(font=('Ubuntu', 9))
# Endpoint Label
''' Endpoint Label '''
self.endpoint = tk.Label(self.lb_frame2, textvariable=self.enp, fg='blue') 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.grid(column=0, row=7, sticky='w', padx=10, pady=10)
self.endpoint.config(font=('Ubuntu', 9)) self.endpoint.config(font=('Ubuntu', 9))
@ -209,7 +219,9 @@ class ListTunnels:
@staticmethod @staticmethod
def tl_list(): def tl_list():
wg_s = os.popen('nmcli con show | grep -iPo "(.*)(wireguard)"').read().split() 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 return tl
@ -236,6 +248,7 @@ class ImportTunnel:
self.l_box = None self.l_box = None
def wg_import_select(self): def wg_import_select(self):
try: try:
filepath = filedialog.askopenfilename(initialdir=str(_u), title='Select Wireguard config File', filepath = filedialog.askopenfilename(initialdir=str(_u), title='Select Wireguard config File',
filetypes=[('WG config files', '*.conf')], ) filetypes=[('WG config files', '*.conf')], )
@ -245,6 +258,7 @@ class ImportTunnel:
path_split = filepath.split('/') path_split = filepath.split('/')
path_split1 = path_split[-1] path_split1 = path_split[-1]
self.a = TunnelActiv.active() self.a = TunnelActiv.active()
if 'PrivateKey = ' in read and 'PublicKey = ' in read: if 'PrivateKey = ' in read and 'PublicKey = ' in read:
with open(filepath, 'r') as file: with open(filepath, 'r') as file:
key = ConToDict.covert_to_dict(file) key = ConToDict.covert_to_dict(file)
@ -258,10 +272,10 @@ class ImportTunnel:
ii = r'/usr/share/icons/wp-icons/48/wg_msg.png' ii = r'/usr/share/icons/wp-icons/48/wg_msg.png'
wt = 'Import Error' wt = 'Import Error'
msg_t = 'Tunnel already available!\nPlease use another file for import' msg_t = 'Tunnel already available!\nPlease use another file for import'
x = 340 # width msg_window(iw, ii, wt, msg_t)
y = 140 # height
msg_window(iw, ii, wt, msg_t, x, y)
else: else:
with open('/etc/wire_py/.keys', 'a') as keyfile: with open('/etc/wire_py/.keys', 'a') as keyfile:
keyfile.write(pre_key + '\r') keyfile.write(pre_key + '\r')
if len(path_split1) > 17: if len(path_split1) > 17:
@ -296,21 +310,21 @@ class ImportTunnel:
wg_read = Path('/etc/wire_py') / str(self.a + '.conf') wg_read = Path('/etc/wire_py') / str(self.a + '.conf')
with open(wg_read, 'r') as file_for_key: with open(wg_read, 'r') as file_for_key:
data = ConToDict.covert_to_dict(file_for_key) data = ConToDict.covert_to_dict(file_for_key)
# Address Label
''' Address Label '''
ShowAddress.init_and_report(self, data) ShowAddress.init_and_report(self, data)
ShowAddress.show_data(self) ShowAddress.show_data(self)
check_call(['nmcli', 'con', 'mod', self.a, 'connection.autoconnect', 'no']) check_call(['nmcli', 'con', 'mod', self.a, 'connection.autoconnect', 'no'])
Path.chmod(wg_read, 0o600) Path.chmod(wg_read, 0o600)
if 'PrivateKey = ' not in read: 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' iw = r'/usr/share/icons/wp-icons/64/error.png'
ii = r'/usr/share/icons/wp-icons/48/wg_msg.png' ii = r'/usr/share/icons/wp-icons/48/wg_msg.png'
wt = 'Import Error' wt = 'Import Error'
msg_t = 'Oh... no valid Wireguard File!\nPlease select a valid Wireguard File' msg_t = 'Oh... no valid Wireguard File!\nPlease select a valid Wireguard File'
x = 340 # width msg_window(iw, ii, wt, msg_t)
y = 140 # height
msg_window(iw, ii, wt, msg_t, x, y)
except EOFError: except EOFError:
pass pass
except TypeError: except TypeError:
@ -318,6 +332,7 @@ class ImportTunnel:
except FileNotFoundError: except FileNotFoundError:
pass pass
except subprocess.CalledProcessError: except subprocess.CalledProcessError:
print('Tunnel exist!') print('Tunnel exist!')
@ -339,16 +354,21 @@ class FileHandle:
self.l_box = None self.l_box = None
def box_set(self): def box_set(self):
try: try:
select_tunnel = self.l_box.curselection() select_tunnel = self.l_box.curselection()
select_tl = self.l_box.get(select_tunnel[0]) select_tl = self.l_box.get(select_tunnel[0])
if self.selected_option.get() == 0: if self.selected_option.get() == 0:
Path.unlink(path_to_file) Path.unlink(path_to_file)
tl = ListTunnels.tl_list() tl = ListTunnels.tl_list()
if len(tl) == 0: if len(tl) == 0:
self.wg_autostart.configure(state='disabled') self.wg_autostart.configure(state='disabled')
if self.selected_option.get() >= 1: if self.selected_option.get() >= 1:
Path.write_text(path_to_file, select_tl) Path.write_text(path_to_file, select_tl)
except IndexError: except IndexError:
self.selected_option.set(1) self.selected_option.set(1)
@ -363,6 +383,7 @@ class OnOff:
""" """
def __init__(self): def __init__(self):
self.wg_autostart = None self.wg_autostart = None
self.selected_option = None self.selected_option = None
self.auto_con = None self.auto_con = None
@ -371,13 +392,16 @@ class OnOff:
self.lb_frame_buttons = None self.lb_frame_buttons = None
def on_off(self): def on_off(self):
if Path.exists(path_to_file): if Path.exists(path_to_file):
self.selected_option.set(1) self.selected_option.set(1)
self.autoconnect_var.set('') self.autoconnect_var.set('')
if not Path.is_dir(Path('/etc/wire_py')): if not Path.is_dir(Path('/etc/wire_py')):
Path.mkdir(Path('/etc/wire_py')) Path.mkdir(Path('/etc/wire_py'))
self.auto_con = Path.read_text(path_to_file) self.auto_con = Path.read_text(path_to_file)
else: else:
self.wg_autostart.configure(state='disabled') self.wg_autostart.configure(state='disabled')
self.auto_con = 'no Autoconnect' self.auto_con = 'no Autoconnect'
self.autoconnect_var.set('') self.autoconnect_var.set('')
@ -401,6 +425,7 @@ class ExportTunnels:
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 = ListTunnels.tl_list() tl = ListTunnels.tl_list()
try: try:
if len(tl) != 0: if len(tl) != 0:
wg_tar = str(_u) + '/' + now_datetime wg_tar = str(_u) + '/' + now_datetime
@ -413,34 +438,31 @@ class ExportTunnels:
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/wp-icons/64/info.png' iw = r'/usr/share/icons/wp-icons/64/info.png'
ii = r'/usr/share/icons/wp-icons/48/wg_vpn.png' ii = r'/usr/share/icons/wp-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'
x = 340 # width msg_window(iw, ii, wt, msg_t)
y = 140 # height
msg_window(iw, ii, wt, msg_t, x, y)
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/wp-icons/64/error.png' iw = r'/usr/share/icons/wp-icons/64/error.png'
ii = r'/usr/share/icons/wp-icons/48/wg_msg.png' ii = r'/usr/share/icons/wp-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'
x = 340 # width msg_window(iw, ii, wt, msg_t)
y = 140 # height
msg_window(iw, ii, wt, msg_t, x, y)
else: 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' iw = r'/usr/share/icons/wp-icons/64/info.png'
ii = r'/usr/share/icons/wp-icons/48/wg_msg.png' ii = r'/usr/share/icons/wp-icons/48/wg_msg.png'
wt = 'Select tunnel' wt = 'Select tunnel'
msg_t = 'Please first import tunnel.' msg_t = 'Please first import tunnel.'
x = 280 # width msg_window(iw, ii, wt, msg_t)
y = 130 # height
msg_window(iw, ii, wt, msg_t, x, y)
except TypeError: except TypeError:
pass pass

View File

@ -11,6 +11,8 @@ from wg_func import (TunnelActiv, ListTunnels, ImportTunnel, ConToDict, GreenLab
font_color = '#4011a7' font_color = '#4011a7'
dk_theme = '#2e2e2e' 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): class MainWindow(tk.Tk):
@ -31,7 +33,8 @@ class MainWindow(tk.Tk):
self.rowconfigure(0, weight=1) self.rowconfigure(0, weight=1)
self.style = ttk.Style(self) self.style = ttk.Style(self)
self.style.theme_use('clam') 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') self.wg_icon = tk.PhotoImage(file=r'/usr/share/icons/wp-icons/48/wg_vpn.png')
# Set it as the window icon. # Set it as the window icon.
self.iconphoto(True, self.wg_icon) self.iconphoto(True, self.wg_icon)
@ -40,7 +43,7 @@ class MainWindow(tk.Tk):
self.app_menu = tk.Menu(self, borderwidth=0) self.app_menu = tk.Menu(self, borderwidth=0)
self.configure(menu=self.app_menu) 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='Options')
self.app_menu.add_cascade(label='?') 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.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') 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() self.a = TunnelActiv.active()
# Label Frame 1
''' Label Frame 1 '''
self.lb_frame_btn_lbox = ttk.Frame(self) self.lb_frame_btn_lbox = ttk.Frame(self)
self.lb_frame_btn_lbox.configure(relief='flat') self.lb_frame_btn_lbox.configure(relief='flat')
self.lb_frame_btn_lbox.grid(column=0, rowspan=4, row=0) self.lb_frame_btn_lbox.grid(column=0, rowspan=4, row=0)
self.columnconfigure(0, weight=1) self.columnconfigure(0, weight=1)
self.rowconfigure(0, weight=1) self.rowconfigure(0, weight=1)
# Label Frame 2
''' Label Frame 2 '''
self.lb_frame = ttk.Frame(self) self.lb_frame = ttk.Frame(self)
self.lb_frame.configure(relief='solid') self.lb_frame.configure(relief='solid')
self.lb_frame.grid(column=2, row=1, sticky='snew', padx=20, pady=5) self.lb_frame.grid(column=2, row=1, sticky='snew', padx=20, pady=5)
self.columnconfigure(2, weight=1) self.columnconfigure(2, weight=1)
self.rowconfigure(1, weight=1) self.rowconfigure(1, weight=1)
# Label Frame 3
''' Label Frame 3 '''
self.lb_frame2 = ttk.Frame(self) self.lb_frame2 = ttk.Frame(self)
self.lb_frame2.configure(relief='solid') self.lb_frame2.configure(relief='solid')
self.lb_frame2.grid(column=2, row=2, sticky='snew', padx=20, pady=5) self.lb_frame2.grid(column=2, row=2, sticky='snew', padx=20, pady=5)
self.columnconfigure(2, weight=1) self.columnconfigure(2, weight=1)
self.rowconfigure(2, weight=1) self.rowconfigure(2, weight=1)
# Show active Label ''' Show active Label '''
self.select_tunnel = None self.select_tunnel = None
self.lb = tk.Label(self, text='Active: ') self.lb = tk.Label(self, text='Active: ')
self.lb.config(font=('Ubuntu', 11, 'bold')) self.lb.config(font=('Ubuntu', 11, 'bold'))
self.lb.grid(column=2, row=0, padx=15, sticky='w') self.lb.grid(column=2, row=0, padx=15, sticky='w')
self.columnconfigure(2, weight=1) self.columnconfigure(2, weight=1)
self.rowconfigure(0, weight=1) self.rowconfigure(0, weight=1)
# Label to Show active Tunnel
''' Label to Show active Tunnel '''
self.StrVar = tk.StringVar(value=self.a) self.StrVar = tk.StringVar(value=self.a)
GreenLabel.green_show_label(self) GreenLabel.green_show_label(self)
# Interface Label
''' Interface Label '''
self.interface = tk.Label(self.lb_frame, text='Interface', fg=font_color) 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.grid(column=0, row=2, sticky='we', padx=120)
self.interface.config(font=('Ubuntu', 9)) self.interface.config(font=('Ubuntu', 9))
# Peer Label ''' Peer Label '''
self.peer = tk.Label(self.lb_frame2, text='Peer', fg=font_color) self.peer = tk.Label(self.lb_frame2, text='Peer', fg=font_color)
self.peer.config(font=('Ubuntu', 9)) self.peer.config(font=('Ubuntu', 9))
self.peer.grid(column=0, row=3, sticky='we', padx=130) self.peer.grid(column=0, row=3, sticky='we', padx=130)
# Listbox with Scrollbar ''' Listbox with Scrollbar '''
def enable_check_box(event): def enable_check_box(event):
tl = ListTunnels.tl_list() tl = ListTunnels.tl_list()
if len(tl) != 0: if len(tl) != 0:
@ -127,29 +135,33 @@ class FrameWidgets(ttk.Frame):
self.l_box.configure(yscrollcommand=self.scrollbar.set) self.l_box.configure(yscrollcommand=self.scrollbar.set)
self.rowconfigure(0, weight=1) self.rowconfigure(0, weight=1)
# Tunnel List ''' Tunnel List '''
self.tl = ListTunnels.tl_list() self.tl = ListTunnels.tl_list()
for tunnels in self.tl: for tunnels in self.tl:
self.l_box.insert("end", tunnels) self.l_box.insert("end", tunnels)
self.l_box.update() self.l_box.update()
# Button Vpn
''' Button Vpn '''
if self.a != '': if self.a != '':
StartStopBTN.button_stop(self) StartStopBTN.button_stop(self)
wg_read = Path('/etc/wire_py') / str(self.a + '.conf') wg_read = Path('/etc/wire_py') / str(self.a + '.conf')
with open(wg_read, 'r') as file: with open(wg_read, 'r') as file:
data = ConToDict.covert_to_dict(file) data = ConToDict.covert_to_dict(file)
# Address Label
''' Address Label '''
ShowAddress.init_and_report(self, data) ShowAddress.init_and_report(self, data)
ShowAddress.show_data(self) ShowAddress.show_data(self)
else: else:
StartStopBTN.button_start(self) StartStopBTN.button_start(self)
# Address Label
''' Address Label '''
self.add = tk.StringVar() self.add = tk.StringVar()
self.DNS = tk.StringVar() self.DNS = tk.StringVar()
self.enp = tk.StringVar() self.enp = tk.StringVar()
ShowAddress.label_empty(self) ShowAddress.label_empty(self)
ShowAddress.show_data(self) ShowAddress.show_data(self)
# Button Import
''' Button Import '''
self.btn_i = tk.Button(self.lb_frame_btn_lbox, self.btn_i = tk.Button(self.lb_frame_btn_lbox,
image=self.imp_pic, bd=0, image=self.imp_pic, bd=0,
command=lambda: ImportTunnel.wg_import_select(self)) command=lambda: ImportTunnel.wg_import_select(self))
@ -182,7 +194,8 @@ class FrameWidgets(ttk.Frame):
file_one = Path('/etc/wire_py/.keys2') file_one = Path('/etc/wire_py/.keys2')
file_two = file_one.with_name('.keys') file_two = file_one.with_name('.keys')
file_one.replace(file_two) file_one.replace(file_two)
# for disable checkbox when Listbox empty
''' for disable checkbox when Listbox empty '''
tl = ListTunnels.tl_list() tl = ListTunnels.tl_list()
if len(tl) == 0: if len(tl) == 0:
self.wg_autostart.configure(state='disabled') self.wg_autostart.configure(state='disabled')
@ -190,7 +203,8 @@ class FrameWidgets(ttk.Frame):
self.StrVar.set(value='') self.StrVar.set(value='')
StartStopBTN.button_start(self) StartStopBTN.button_start(self)
self.l_box.update() self.l_box.update()
# Address Label
''' Address Label '''
self.add.set('') self.add.set('')
self.DNS.set('') self.DNS.set('')
self.enp.set('') self.enp.set('')
@ -198,33 +212,32 @@ class FrameWidgets(ttk.Frame):
except IndexError: except IndexError:
tl = ListTunnels.tl_list() tl = ListTunnels.tl_list()
if len(tl) != 0: 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' iw = r'/usr/share/icons/wp-icons/64/info.png'
ii = r'/usr/share/icons/wp-icons/48/wg_msg.png' ii = r'/usr/share/icons/wp-icons/48/wg_msg.png'
wt = 'Select tunnel' wt = 'Select tunnel'
msg_t = 'Please select a tunnel from the list.' msg_t = 'Please select a tunnel from the list.'
x = 340 # width msg_window(iw, ii, wt, msg_t)
y = 140 # height
msg_window(iw, ii, wt, msg_t, x, y)
else: 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' iw = r'/usr/share/icons/wp-icons/64/info.png'
ii = r'/usr/share/icons/wp-icons/48/wg_msg.png' ii = r'/usr/share/icons/wp-icons/48/wg_msg.png'
wt = 'Select tunnel' wt = 'Select tunnel'
msg_t = 'Please first import tunnel.' msg_t = 'Please first import tunnel.'
x = 280 # width msg_window(iw, ii, wt, msg_t)
y = 130 # height
msg_window(iw, ii, wt, msg_t, x, y)
# 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 = 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) 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 = 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) 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 = ttk.Entry(self, width=20)
self.lb_rename.grid(column=2, row=4, padx=30, pady=5, sticky='w') self.lb_rename.grid(column=2, row=4, padx=30, pady=5, sticky='w')
self.lb_rename.insert(0, 'Max. 12 characters!') self.lb_rename.insert(0, 'Max. 12 characters!')
@ -234,39 +247,39 @@ class FrameWidgets(ttk.Frame):
special_characters = ['\\', '/', '{', '}', ' '] special_characters = ['\\', '/', '{', '}', ' ']
if len(self.lb_rename.get()) > 12: if len(self.lb_rename.get()) > 12:
"""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/wp-icons/64/info.png' iw = r'/usr/share/icons/wp-icons/64/info.png'
ii = r'/usr/share/icons/wp-icons/48/wg_msg.png' ii = r'/usr/share/icons/wp-icons/48/wg_msg.png'
wt = 'Renaming not possible' wt = 'Renaming not possible'
msg_t = 'The new name may contain only 12 characters.' msg_t = 'The new name may contain only 12 characters.'
x = 420 # width msg_window(iw, ii, wt, msg_t)
y = 140 # height
msg_window(iw, ii, wt, msg_t, x, y)
elif len(self.lb_rename.get()) == 0: 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' iw = r'/usr/share/icons/wp-icons/64/info.png'
ii = r'/usr/share/icons/wp-icons/48/wg_msg.png' ii = r'/usr/share/icons/wp-icons/48/wg_msg.png'
wt = 'Renaming not possible' wt = 'Renaming not possible'
msg_t = 'At least one character must be entered.' msg_t = 'At least one character must be entered.'
x = 380 # width msg_window(iw, ii, wt, msg_t)
y = 140 # height
msg_window(iw, ii, wt, msg_t, x, y)
elif any(ch in special_characters for ch in self.lb_rename.get()): 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' iw = r'/usr/share/icons/wp-icons/64/info.png'
ii = r'/usr/share/icons/wp-icons/48/wg_msg.png' ii = r'/usr/share/icons/wp-icons/48/wg_msg.png'
wt = 'Renaming not possible' wt = 'Renaming not possible'
msg_t = 'No valid sign. These must not be used.\nBlank, Slash, Backslash and { }\n' msg_t = 'No valid sign. These must not be used.\nBlank, Slash, Backslash and { }\n'
x = 370 # width msg_window(iw, ii, wt, msg_t)
y = 130 # height
msg_window(iw, ii, wt, msg_t, x, y)
else: else:
try: try:
self.select_tunnel = self.l_box.curselection() self.select_tunnel = self.l_box.curselection()
select_tl = self.l_box.get(self.select_tunnel[0]) 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()]) check_call(['nmcli', 'connection', 'modify', select_tl, 'connection.id', self.lb_rename.get()])
source = Path('/etc/wire_py') / str(select_tl + '.conf') source = Path('/etc/wire_py') / str(select_tl + '.conf')
destination = source.with_name(str(self.lb_rename.get() + '.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) self.autoconnect_var.set(value=new_a_connect)
Path.write_text(path_to_file, new_a_connect) Path.write_text(path_to_file, new_a_connect)
return select_tl return select_tl
except IndexError: 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' iw = r'/usr/share/icons/wp-icons/64/info.png'
ii = r'/usr/share/icons/wp-icons/48/wg_msg.png' ii = r'/usr/share/icons/wp-icons/48/wg_msg.png'
wt = 'Renaming not possible' wt = 'Renaming not possible'
msg_t = 'Please select a tunnel from the list.' msg_t = 'Please select a tunnel from the list.'
x = 340 # width msg_window(iw, ii, wt, msg_t)
y = 140 # height
msg_window(iw, ii, wt, msg_t, x, y)
# Button Rename ''' Button Rename '''
self.btn_rename = ttk.Button(self, text='Rename', state='disable', command=tl_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') self.btn_rename.grid(column=2, row=4, padx=20, pady=10, sticky='e')
# Check Buttons ''' Check Buttons '''
self.selected_option = tk.IntVar() self.selected_option = tk.IntVar()
self.autoconnect_var = tk.StringVar() self.autoconnect_var = tk.StringVar()
self.autoconnect_var.set(self.auto_con) 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') wg_read = Path('/etc/wire_py') / str(select_tl + '.conf')
with open(wg_read, 'r') as file: with open(wg_read, 'r') as file:
data = ConToDict.covert_to_dict(file) data = ConToDict.covert_to_dict(file)
# Address Label
''' Address Label '''
ShowAddress.init_and_report(self, data) ShowAddress.init_and_report(self, data)
ShowAddress.show_data(self) ShowAddress.show_data(self)
# Button Start/Stop
''' Button Start/Stop '''
StartStopBTN.button_stop(self) StartStopBTN.button_stop(self)
self.a = TunnelActiv.active() self.a = TunnelActiv.active()
self.StrVar = tk.StringVar() self.StrVar = tk.StringVar()
self.StrVar.set(self.a) self.StrVar.set(self.a)
GreenLabel.green_show_label(self) GreenLabel.green_show_label(self)
elif self.a != '': elif self.a != '':
# Button Start/Stop
''' Button Start/Stop '''
StartStopBTN.button_stop(self) StartStopBTN.button_stop(self)
check_call(['nmcli', 'connection', 'down', self.a]) check_call(['nmcli', 'connection', 'down', self.a])
# Button Start/Stop
''' Button Start/Stop '''
StartStopBTN.button_start(self) StartStopBTN.button_start(self)
self.a = TunnelActiv.active() self.a = TunnelActiv.active()
self.StrVar.set('') self.StrVar.set('')
GreenLabel.green_show_label(self) GreenLabel.green_show_label(self)
# Address Label
''' Address Label '''
self.add.set('') self.add.set('')
self.DNS.set('') self.DNS.set('')
self.enp.set('') self.enp.set('')
ShowAddress.show_data(self) ShowAddress.show_data(self)
except IndexError: except IndexError:
tl = ListTunnels.tl_list() tl = ListTunnels.tl_list()
if len(tl) != 0: 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' iw = r'/usr/share/icons/wp-icons/64/info.png'
ii = r'/usr/share/icons/wp-icons/48/wg_msg.png' ii = r'/usr/share/icons/wp-icons/48/wg_msg.png'
wt = 'Select tunnel' wt = 'Select tunnel'
msg_t = 'Please select a tunnel from the list.' msg_t = 'Please select a tunnel from the list.'
x = 340 # width msg_window(iw, ii, wt, msg_t)
y = 140 # height
msg_window(iw, ii, wt, msg_t, x, y)
else: 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' iw = r'/usr/share/icons/wp-icons/64/info.png'
ii = r'/usr/share/icons/wp-icons/48/wg_msg.png' ii = r'/usr/share/icons/wp-icons/48/wg_msg.png'
wt = 'Select tunnel' wt = 'Select tunnel'
msg_t = 'Please first import tunnel.' msg_t = 'Please first import tunnel.'
x = 280 # width msg_window(iw, ii, wt, msg_t)
y = 130 # height
msg_window(iw, ii, wt, msg_t, x, y)
if __name__ == '__main__': if __name__ == '__main__':

BIN
wire-py1.10.0424.tar.gz Normal file

Binary file not shown.