diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 39e3606..7a35cc4 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -6,6 +6,8 @@ + + - { + "keyToString": { + "ASKED_ADD_EXTERNAL_FILES": "true", + "Python.main.executor": "Run", + "RunOnceActivity.ShowReadmeOnStart": "true", + "git-widget-placeholder": "wire-py-reformat-14-08-2024", + "last_opened_file_path": "/home/punix/Pyapps/wire-py" } -}]]> +} @@ -95,7 +97,15 @@ diff --git a/main.py b/main.py index ab992fe..1ec5b80 100644 --- a/main.py +++ b/main.py @@ -2,12 +2,11 @@ import os import tkinter as tk from tkinter import ttk +from tkinter import filedialog +from wg_func import active, tl_list, wg_export, wg_import_select -from wg_func import active +wg_exp = wg_export() -from wg_func import tl_list - -path = '/~/.config/wg_nmcli/' color_default = '#d3ebff' color_dark = '#2e2e2e' @@ -29,9 +28,9 @@ class MainWindow(tk.Tk): self.configure() self.geometry('%dx%d+%d+%d' % (self.x_width, self.y_height, self.monitor_center_x, self.monitor_center_y)) # Load the image file from disk. - wg_icon = tk.PhotoImage(file=r'icons/wg-vpn-48.png') + self.wg_icon = tk.PhotoImage(file=r'icons/wg-vpn-48.png') # Set it as the window icon. - self.iconphoto(True, wg_icon) + self.iconphoto(True, self.wg_icon) 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') @@ -46,9 +45,9 @@ class MainWindow(tk.Tk): self.lb.config(font=("Ubuntu", 11, "bold")) self.lb.grid(column=2, row=1, padx=10, pady=5, sticky="e") # Label to Show active Tunnel - self.StrVar = tk.StringVar() - self.StrVar.set(a) + self.StrVar = tk.StringVar(value=a) self.lb_tunnel = tk.Label(self, textvariable=self.StrVar, fg='green') + self.lb_tunnel.config(font=("Ubuntu", 11, "bold")) self.lb_tunnel.grid(column=3, row=1, sticky="w") @@ -68,12 +67,11 @@ class MainWindow(tk.Tk): if a != '': self.btn_stst = tk.Button(self, image=self.wg_vpn_stop, bd=0, command=self.wg_switch) self.btn_stst.grid(column=0, row=1, padx=15, pady=15, sticky="s") - else: self.btn_stst = tk.Button(self, image=self.wg_vpn_start, bd=0, command=self.wg_switch) self.btn_stst.grid(column=0, row=1, padx=15, pady=15, sticky="s") # Button Import - self.btn_i = tk.Button(self, image=self.imp_pic, bd=0) + self.btn_i = tk.Button(self, image=self.imp_pic, bd=0, command=wg_import_select) self.btn_i.grid(column=0, row=2, padx=15, pady=15) # Button Trash self.btn_tr = tk.Button(self, image=self.tr_pic, bd=0) @@ -97,8 +95,11 @@ class MainWindow(tk.Tk): self.btn_stst = tk.Button(self, image=self.wg_vpn_stop, bd=0, command=self.wg_switch) self.btn_stst.grid(column=0, row=1, padx=15, pady=15, sticky="s") a = active() - StrVar = tk.StringVar() - return StrVar.set(a) + self.StrVar = tk.StringVar() + self.StrVar.set(a) + self.lb_tunnel = tk.Label(self, textvariable=self.StrVar, fg='green') + self.lb_tunnel.config(font=("Ubuntu", 11, "bold")) + self.lb_tunnel.grid(column=3, row=1, sticky="w") elif a != '': # Button Start/Stop self.btn_stst = tk.Button(self, image=self.wg_vpn_stop, bd=0, command=self.wg_switch) @@ -106,7 +107,12 @@ class MainWindow(tk.Tk): os.system('nmcli connection down ' + str(a)) self.btn_stst = tk.Button(self, image=self.wg_vpn_start, bd=0, command=self.wg_switch) self.btn_stst.grid(column=0, row=1, padx=15, pady=15, sticky="s") - a = '' + a = active() + self.StrVar = tk.StringVar() + self.StrVar.set(' ') + self.lb_tunnel = tk.Label(self, textvariable=self.StrVar, fg='green') + self.lb_tunnel.config(font=("Ubuntu", 11, "bold")) + self.lb_tunnel.grid(column=3, row=1, sticky="w") if __name__ == '__main__': diff --git a/wg_func.py b/wg_func.py index 8ade328..98aecd3 100644 --- a/wg_func.py +++ b/wg_func.py @@ -1,12 +1,38 @@ # Wireguard functions for Wire-Py import os +import subprocess +from tkinter import filedialog +import tkinter as tk +from tkinter import messagebox + + +def wg_import_select(): + try: + filepath = filedialog.askopenfilename(initialdir=os.environ['HOME'], title="Select Wireguard config File", + filetypes=[("WG config files", "*.conf")]) + file = open(filepath, 'r') + read = file.read() + file.close() + pathsplit = filepath.split("/") + pathsplit = pathsplit[-1] + + if "PrivateKey = " in read and "PublicKey = " in read: + subprocess.call('cp ' + str(filepath) + ' /etc/wg_nmcli/', shell=True) + os.system('nmcli connection import type wireguard file ' + str(filepath)) + os.system('nmcli con mod ' + str(pathsplit[:-5]) + ' connection.autoconnect no') + else: + messagebox.showwarning(title="conf error", message=" Oh... no valid Wireguard File!\nPlease select a " + "valid Wireguard File ") + except EOFError: + pass + except TypeError: + pass def active(): # Shows the active tunnel - a = os.popen('nmcli connection show --active | grep -iPo "(.*)(wireguard)"').read().split() + a = os.popen('nmcli con show --active | grep -iPo "(.*)(wireguard)"').read().split() if not a: a = '' - return a else: a = a[0] @@ -14,7 +40,15 @@ def active(): # Shows the active tunnel def tl_list(): - wg_s = os.popen('nmcli connection show | grep -iPo "(.*)(wireguard)"').read().split() + wg_s = os.popen('nmcli con show | grep -iPo "(.*)(wireguard)"').read().split() tl = wg_s[::3] # tl = Tunnelliste # Hiermit wird jedes 4. Element der Liste gezeigt return tl + +def wg_export(): + try: + wg_exp = os.popen('nmcli con show | grep -iPo "(.*)(wireguard)"').read().split() + wg_exp = wg_exp[1] + return wg_exp + except IndexError: + pass