diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 32aa9b6..cf6dd78 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -4,7 +4,8 @@
-
+
+
@@ -251,7 +252,15 @@
1724778892233
-
+
+
+ 1725119445803
+
+
+
+ 1725119445803
+
+
@@ -298,6 +307,7 @@
-
+
+
\ No newline at end of file
diff --git a/main.py b/main.py
index 1ff7388..44b7f5a 100755
--- a/main.py
+++ b/main.py
@@ -4,9 +4,10 @@ import tkinter as tk
from tkinter import ttk
from wg_func import (TunnelActiv, ListTunnels, ImportTunnel, ConToDict, GreenLabel, StartStopBTN, ShowAddress,
- ExportTunnels)
+ FileHandle, ExportTunnels)
font_color = '#4011a7'
+replacement = ''
class MainWindow(tk.Tk):
@@ -60,21 +61,18 @@ class FrameWidgets(ttk.Frame):
self.lb_frame = ttk.Frame(self)
self.lb_frame.configure(relief='solid')
self.lb_frame.grid(column=2, row=2, sticky='snew', padx=20, pady=5)
- self.columnconfigure(2, weight=1)
- self.rowconfigure(2, weight=1)
+
# Label Frame 2
self.lb_frame2 = ttk.Frame(self)
self.lb_frame2.configure(relief='solid')
self.lb_frame2.grid(column=2, row=3, sticky='snew', padx=20, pady=5)
- self.columnconfigure(2, weight=1)
- self.rowconfigure(3, weight=1)
+
# 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=1, padx=15, sticky='w')
- self.columnconfigure(2, weight=1)
- self.rowconfigure(1, weight=1)
+
# Label to Show active Tunnel
self.StrVar = tk.StringVar(value=self.a)
GreenLabel.green_show_label(self)
@@ -82,23 +80,28 @@ class FrameWidgets(ttk.Frame):
self.interface = tk.Label(self.lb_frame, text='Interface', fg=font_color)
self.interface.grid(column=0, row=4, sticky='we', padx=120)
self.interface.config(font=('Ubuntu', 9))
- self.columnconfigure(0, weight=1)
- self.rowconfigure(4, weight=1)
+
# 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=7, sticky='we', padx=130)
- self.columnconfigure(0, weight=1)
- self.rowconfigure(7, weight=1)
+
# Listbox with Scrollbar
+ def enable_check_box(event):
+ tl = ListTunnels.tl_list()
+ print(len(tl))
+ if len(tl) != 0:
+ self.wg_autostart.configure(state='normal')
+
self.scrollbar = ttk.Scrollbar(self)
self.l_box = tk.Listbox(self, fg='#606060', selectmode='single')
self.l_box.config(highlightthickness=0, relief='flat')
self.scrollbar.config(command=self.l_box.yview)
self.l_box.config(font=('Ubuntu', 12, 'bold'))
self.l_box.grid(column=1, rowspan=3, row=1)
- self.columnconfigure(1, weight=1)
- self.rowconfigure(1, weight=1)
+ self.l_box.event_add('<>', '')
+ self.l_box.bind('<>', enable_check_box)
+
# Tunnel List
self.tl = ListTunnels.tl_list()
for tunnels in self.tl:
@@ -125,8 +128,6 @@ class FrameWidgets(ttk.Frame):
# Button Import
self.btn_i = tk.Button(self, image=self.imp_pic, bd=0, command=lambda: ImportTunnel.wg_import_select(self))
self.btn_i.grid(column=0, row=2, padx=15, pady=15)
- self.columnconfigure(0, weight=1)
- self.rowconfigure(2, weight=1)
def delete():
try:
@@ -135,45 +136,78 @@ class FrameWidgets(ttk.Frame):
os.system('nmcli connection delete ' + str(select_tl))
self.l_box.delete(self.select_tunnel[0])
os.remove(os.environ['HOME'] + '/tester/' + str(select_tl) + '.conf')
+ try:
+ with open('wg_py.xml', 'r') as fr:
+ lines = fr.readlines()
+
+ with open('wg_py.xml_2', 'w') as fw:
+ for line in lines:
+
+ # strip() is used to remove '\n'
+ # present at the end of each line
+ if line.strip('\n') != select_tl:
+ fw.write(line)
+ print("Deleted")
+ except:
+ print("Oops! someting error")
+
if self.a != '' and self.a == select_tl:
self.StrVar.set(value='')
StartStopBTN.button_start(self)
self.l_box.update()
# Address Label
ShowAddress.label_empty(self)
+ return select_tl
except IndexError:
pass
# Button Trash
self.btn_tr = tk.Button(self, image=self.tr_pic, bd=0, command=delete)
self.btn_tr.grid(column=0, row=3, padx=15, pady=15)
- self.columnconfigure(0, weight=1)
- self.rowconfigure(3, weight=1)
+
# Button Export
self.btn_exp = tk.Button(self, image=self.exp_pic, bd=0, command=ExportTunnels.wg_export)
self.btn_exp.grid(column=0, row=4, padx=15, pady=15)
- self.columnconfigure(0, weight=1)
- self.rowconfigure(4, weight=1)
+
# Button Rename
self.btn_rename = ttk.Button(self, text='Rename')
self.btn_rename.grid(column=2, row=4, padx=20, pady=15, sticky='e')
- self.columnconfigure(3, weight=1)
- self.rowconfigure(4, weight=1)
- # Check Buttons
- self.wg_autostart = tk.Checkbutton(self, text='Autoconnect on PC Start')
- self.wg_autostart.grid(column=1, rowspan=3, row=3)
- self.columnconfigure(1, weight=1)
- self.rowconfigure(3, weight=1)
- self.wg_update = tk.Checkbutton(self, text='Search automatically for\nWire-Py updates')
- self.wg_update.grid(column=1, rowspan=3, row=4)
- self.columnconfigure(1, weight=1)
- self.rowconfigure(4, weight=1)
+ # Check Buttons
+ self.selected_option = tk.IntVar()
+
+ self.wg_autostart = tk.Checkbutton(self,
+ text='Autoconnect on:',
+ variable=self.selected_option,
+ command=lambda: FileHandle.box_set(self))
+ on_or_off = open('wg_py.xml', 'r')
+ res = on_or_off.read()
+ if 'true' in res:
+ self.selected_option.set(1)
+ self.auto_con = res
+ self.auto_con = self.auto_con[5:]
+ print(self.auto_con)
+ else:
+ self.wg_autostart.configure(state='disabled')
+ self.auto_con = 'no Autoconnect'
+ on_or_off.close()
+
+ self.wg_autostart.grid(column=1, row=4, sticky='nw')
+
+ self.autoconnect_var = tk.StringVar()
+ self.autoconnect_var.set(self.auto_con)
+ self.autoconnect = tk.Label(self, textvariable=self.autoconnect_var, bd=2, fg='blue', padx=5)
+ self.autoconnect.config(font=('Ubuntu', 11))
+ self.autoconnect.grid(column=1, row=4, sticky='we')
+
+ #self.wg_update = tk.Checkbutton(self, tex='Search automatically for\nWire-Py updates')
+ #self.wg_update.grid(column=1, rowspan=3, row=5)
def wg_switch(self):
self.a = TunnelActiv.active()
try:
if self.a == '':
+
StartStopBTN.button_start(self)
self.select_tunnel = self.l_box.curselection()
select_tl = self.l_box.get(self.select_tunnel[0])
diff --git a/wg_func.py b/wg_func.py
index 3cd58e5..c4293a5 100755
--- a/wg_func.py
+++ b/wg_func.py
@@ -216,6 +216,9 @@ class ImportTunnel:
ShowAddress.show_data(self)
file.close()
os.system('nmcli con mod ' + str(self.a) + ' connection.autoconnect no')
+ new_tl = open('wg_py.xml', 'a')
+ new_tl.write('false ' + str(self.a))
+ new_tl.close()
if 'PrivateKey = ' not in read:
Message()
except EOFError:
@@ -226,6 +229,53 @@ class ImportTunnel:
pass
+class FileHandle:
+
+ def __init__(self):
+
+ self.auto_con = None
+ self.autoconnect_var = None
+ self.tl = None
+ self.selected_option = None
+ self.l_box = None
+ self.select_tunnel = None
+
+ def box_set(self):
+
+ global replacement
+ try:
+ self.select_tunnel = self.l_box.curselection()
+ select_tl = self.l_box.get(self.select_tunnel[0])
+ if self.selected_option.get() == 0:
+ set_on = open('wg_py.xml', 'r')
+ replacement = ""
+ # using the for loop
+ for line in set_on:
+ line = line.strip()
+ changes = line.replace('true ' + select_tl, 'false ' + select_tl)
+ for tl in self.tl:
+ os.system('nmcli con mod ' + str(tl) + ' connection.autoconnect no')
+ replacement = replacement + changes + "\n"
+ set_on.close()
+ self.autoconnect_var.set('')
+ if self.selected_option.get() == 1:
+ set_on = open('wg_py.xml', 'r')
+ replacement = ""
+ # using the for loop
+ for line in set_on:
+ line = line.strip()
+ changes = line.replace('false ' + select_tl, 'true ' + select_tl)
+ os.system('nmcli con mod ' + str(select_tl) + ' connection.autoconnect yes')
+ replacement = replacement + changes + "\n"
+ set_on.close()
+ set_off = open('wg_py.xml', 'w')
+ set_off.write(replacement)
+ set_off.close()
+ self.autoconnect_var.set(self.auto_con)
+ except IndexError:
+ self.selected_option.set(1)
+
+
class ExportTunnels:
@staticmethod
def wg_export():
@@ -238,9 +288,9 @@ class ExportTunnels:
p_to_conf = os.environ['HOME'] + '/tester'
shutil.make_archive(wg_tar, 'zip', p_to_conf)
#if zip_full != 0:
- #print('Export erfolgraeich')
+ #print('Export erfolgraeich')
#else:
- #print('ups etwwas ging schief bitte Export wiederholen')
+ #print('ups etwwas ging schief bitte Export wiederholen')
else:
print('No Tunnel for Export')
except TypeError:
diff --git a/wg_py.xml b/wg_py.xml
new file mode 100644
index 0000000..4cd957e
--- /dev/null
+++ b/wg_py.xml
@@ -0,0 +1 @@
+true iphone-wg