punix
00a9436dad
add Label to show autoconnect Tunnel disable checkbox when Listbox is empty or no select Tunnel
247 lines
9.5 KiB
Python
Executable File
247 lines
9.5 KiB
Python
Executable File
#!/usr/bin/python3
|
|
import os
|
|
import tkinter as tk
|
|
from tkinter import ttk
|
|
|
|
from wg_func import (TunnelActiv, ListTunnels, ImportTunnel, ConToDict, GreenLabel, StartStopBTN, ShowAddress,
|
|
FileHandle, ExportTunnels)
|
|
|
|
font_color = '#4011a7'
|
|
replacement = ''
|
|
|
|
|
|
class MainWindow(tk.Tk):
|
|
def __init__(self, *args, **kwargs):
|
|
super().__init__(*args, **kwargs)
|
|
|
|
self.switch_on = None
|
|
self.switch_off = None
|
|
self.x_width = 600
|
|
self.y_height = 360
|
|
self.monitor_center_x = self.winfo_screenwidth() / 2 - (self.x_width / 2)
|
|
self.monitor_center_y = self.winfo_screenheight() / 2 - (self.y_height / 2)
|
|
self.resizable(width=False, height=False)
|
|
self.title('Wire-Py')
|
|
self.configure()
|
|
self.geometry('%dx%d+%d+%d' % (self.x_width, self.y_height, self.monitor_center_x, self.monitor_center_y))
|
|
self.columnconfigure(0, weight=1)
|
|
self.rowconfigure(0, weight=1)
|
|
self.style = ttk.Style(self)
|
|
self.style.theme_use('clam')
|
|
# Load the image file from disk.
|
|
self.wg_icon = tk.PhotoImage(file=r'icons/wg-vpn-48.png')
|
|
# Set it as the window icon.
|
|
self.iconphoto(True, self.wg_icon)
|
|
|
|
FrameWidgets(self).grid()
|
|
|
|
|
|
class FrameWidgets(ttk.Frame):
|
|
def __init__(self, container, **kwargs):
|
|
super().__init__(container, **kwargs)
|
|
|
|
self.enp = None
|
|
self.DNS = None
|
|
self.add = None
|
|
self.data = None
|
|
self.peer = None
|
|
self.lb_tunnel = None
|
|
self.wg_read = None
|
|
self.wg_vpn_start = tk.PhotoImage(file=r'icons/wg-vpn-start-48.png')
|
|
self.wg_vpn_stop = tk.PhotoImage(file=r'icons/wg-vpn-stop-48.png')
|
|
self.imp_pic = tk.PhotoImage(file=r'icons/wg-import.png')
|
|
self.tr_pic = tk.PhotoImage(file=r'icons/wg-trash-48.png')
|
|
self.exp_pic = tk.PhotoImage(file=r'icons/wg-export-48.png')
|
|
self.warning_pic = tk.PhotoImage(file=r'icons/warning_64.png')
|
|
self.configure()
|
|
|
|
# Show active Tunnel
|
|
self.a = TunnelActiv.active()
|
|
# Label Frame 1
|
|
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)
|
|
|
|
# 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)
|
|
|
|
# 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')
|
|
|
|
# Label to Show active Tunnel
|
|
self.StrVar = tk.StringVar(value=self.a)
|
|
GreenLabel.green_show_label(self)
|
|
# Interface Label
|
|
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))
|
|
|
|
# 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)
|
|
|
|
# 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.l_box.event_add('<<ClickEvent>>', '<Button-1>')
|
|
self.l_box.bind('<<ClickEvent>>', enable_check_box)
|
|
|
|
# Tunnel List
|
|
self.tl = ListTunnels.tl_list()
|
|
for tunnels in self.tl:
|
|
self.l_box.insert("end", tunnels)
|
|
self.l_box.update()
|
|
# Button Vpn
|
|
if self.a != '':
|
|
StartStopBTN.button_stop(self)
|
|
wg_read = os.environ['HOME'] + '/tester/' + str(self.a) + '.conf'
|
|
file = open(wg_read, 'r')
|
|
data = ConToDict.covert_to_dict(file)
|
|
# Address Label
|
|
ShowAddress.init_and_report(self, data)
|
|
ShowAddress.show_data(self)
|
|
file.close()
|
|
else:
|
|
StartStopBTN.button_start(self)
|
|
# Address Label
|
|
self.add = tk.StringVar()
|
|
self.DNS = tk.StringVar()
|
|
self.enp = tk.StringVar()
|
|
ShowAddress.label_empty(self)
|
|
ShowAddress.show_data(self)
|
|
# 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)
|
|
|
|
def delete():
|
|
try:
|
|
self.select_tunnel = self.l_box.curselection()
|
|
select_tl = self.l_box.get(self.select_tunnel[0])
|
|
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)
|
|
|
|
# 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)
|
|
|
|
# Button Rename
|
|
self.btn_rename = ttk.Button(self, text='Rename')
|
|
self.btn_rename.grid(column=2, row=4, padx=20, pady=15, sticky='e')
|
|
|
|
# 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])
|
|
os.system('nmcli connection up ' + str(select_tl))
|
|
wg_read = os.environ['HOME'] + '/tester/' + str(select_tl) + '.conf'
|
|
file = open(wg_read, 'r')
|
|
data = ConToDict.covert_to_dict(file)
|
|
# Address Label
|
|
ShowAddress.init_and_report(self, data)
|
|
ShowAddress.show_data(self)
|
|
file.close()
|
|
# 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
|
|
StartStopBTN.button_stop(self)
|
|
os.system('nmcli connection down ' + str(self.a))
|
|
# Button Start/Stop
|
|
StartStopBTN.button_start(self)
|
|
self.a = TunnelActiv.active()
|
|
self.StrVar.set('')
|
|
GreenLabel.green_show_label(self)
|
|
# Address Label
|
|
ShowAddress.label_empty(self)
|
|
ShowAddress.show_data(self)
|
|
except IndexError:
|
|
pass
|
|
|
|
|
|
if __name__ == '__main__':
|
|
window = MainWindow()
|
|
window.mainloop()
|