now only methodologies within the class
This commit is contained in:
		
							
								
								
									
										511
									
								
								wirepy.py
									
									
									
									
									
								
							
							
						
						
									
										511
									
								
								wirepy.py
									
									
									
									
									
								
							| @@ -110,79 +110,6 @@ class FrameWidgets(ttk.Frame): | |||||||
|         self.exp_pic = tk.PhotoImage(file=r"/usr/share/icons/lx-icons/48/wg_export.png") |         self.exp_pic = tk.PhotoImage(file=r"/usr/share/icons/lx-icons/48/wg_export.png") | ||||||
|         self.warning_pic = tk.PhotoImage(file=r"/usr/share/icons/lx-icons/64/error.png") |         self.warning_pic = tk.PhotoImage(file=r"/usr/share/icons/lx-icons/64/error.png") | ||||||
|  |  | ||||||
|         def update(): |  | ||||||
|             """ |  | ||||||
|             Set on or off in file |  | ||||||
|             """ |  | ||||||
|             if set_update.get() == 1: |  | ||||||
|                 with open(set_file, "r", encoding="utf-8") as set_f2: |  | ||||||
|                     lines2 = set_f2.readlines() |  | ||||||
|                     lines2[1] = "off\n" |  | ||||||
|                 with open(set_file, "w", encoding="utf-8") as set_f2: |  | ||||||
|                     set_f2.writelines(lines2) |  | ||||||
|  |  | ||||||
|             if set_update.get() == 0: |  | ||||||
|                 with open(set_file, "r", encoding="utf-8") as set_f2: |  | ||||||
|                     lines2 = set_f2.readlines() |  | ||||||
|                     lines2[1] = "on\n" |  | ||||||
|                 with open(set_file, "w", encoding="utf-8") as set_f2: |  | ||||||
|                     set_f2.writelines(lines2) |  | ||||||
|  |  | ||||||
|         def theme_change_light(): |  | ||||||
|             """ |  | ||||||
|             Set a light theme |  | ||||||
|             """ |  | ||||||
|             if self.tk.call("ttk::style", "theme", "use") == "water-dark": |  | ||||||
|                 self.tk.call("set_theme", "light") |  | ||||||
|                 with open(set_file, "r", encoding="utf-8") as theme_set2: |  | ||||||
|                     lines3 = theme_set2.readlines() |  | ||||||
|                     lines3[3] = "light\n" |  | ||||||
|                 with open(set_file, "w", encoding="utf-8") as theme_set2: |  | ||||||
|                     theme_set2.writelines(lines3) |  | ||||||
|                 self.color_label() |  | ||||||
|  |  | ||||||
|         def theme_change_dark(): |  | ||||||
|             """ |  | ||||||
|             Set a dark theme |  | ||||||
|             """ |  | ||||||
|             if not self.tk.call("ttk::style", "theme", "use") == "water-dark": |  | ||||||
|                 self.tk.call("set_theme", "dark") |  | ||||||
|                 with open(set_file, "r", encoding="utf-8") as theme_set2: |  | ||||||
|                     lines4 = theme_set2.readlines() |  | ||||||
|                     lines4[3] = "dark\n" |  | ||||||
|                 with open(set_file, "w", encoding="utf-8") as theme_set2: |  | ||||||
|                     theme_set2.writelines(lines4) |  | ||||||
|                 self.color_label() |  | ||||||
|  |  | ||||||
|         def tooltip(): |  | ||||||
|             """ |  | ||||||
|             Set True or False in a file |  | ||||||
|             """ |  | ||||||
|             if set_tip.get(): |  | ||||||
|                 with open(set_file, "r", encoding="utf-8") as set_f2: |  | ||||||
|                     lines2 = set_f2.readlines() |  | ||||||
|                     lines2[5] = "False\n" |  | ||||||
|                 with open(set_file, "w", encoding="utf-8") as set_f2: |  | ||||||
|                     set_f2.writelines(lines2) |  | ||||||
|  |  | ||||||
|             else: |  | ||||||
|                 with open(set_file, "r", encoding="utf-8") as set_f2: |  | ||||||
|                     lines2 = set_f2.readlines() |  | ||||||
|                     lines2[5] = "True\n" |  | ||||||
|                 with open(set_file, "w", encoding="utf-8") as set_f2: |  | ||||||
|                     set_f2.writelines(lines2) |  | ||||||
|  |  | ||||||
|         def info(): |  | ||||||
|             def link_btn(): |  | ||||||
|                 webbrowser.open("https://git.ilunix.de/punix/Wire-Py") |  | ||||||
|  |  | ||||||
|             msg_t = _("Wire-Py a simple Wireguard Gui for Linux systems.\n\n" |  | ||||||
|                     "Wire-Py is open source software written in Python.\n\n" |  | ||||||
|                     "Email: polunga40@unity-mail.de also likes for donation.\n\n" |  | ||||||
|                     "Use without warranty!\n") |  | ||||||
|  |  | ||||||
|             LxTools.msg_window(img_i, img_i, _("Info"), msg_t, _("Go to Wire-Py git"), link_btn) |  | ||||||
|  |  | ||||||
|         # Frame for Menu |         # Frame for Menu | ||||||
|         self.menu_frame = ttk.Frame(self) |         self.menu_frame = ttk.Frame(self) | ||||||
|         self.menu_frame.configure(relief="flat") |         self.menu_frame.configure(relief="flat") | ||||||
| @@ -204,15 +131,14 @@ class FrameWidgets(ttk.Frame): | |||||||
|         set_tip = tk.BooleanVar() |         set_tip = tk.BooleanVar() | ||||||
|         self.settings = tk.Menu(self, relief="flat") |         self.settings = tk.Menu(self, relief="flat") | ||||||
|         self.options_btn.configure(menu=self.settings, style="Toolbutton") |         self.options_btn.configure(menu=self.settings, style="Toolbutton") | ||||||
|         self.settings.add_checkbutton(label=_("Disable Updates"), command=update, variable=set_update) |         self.settings.add_checkbutton(label=_("Disable Updates"), command=lambda: self.update(set_update.get()), variable=set_update) | ||||||
|         self.settings.add_checkbutton(label=_("Disable Tooltips"), command=tooltip, variable=set_tip) |         self.settings.add_checkbutton(label=_("Disable Tooltips"), command=lambda: self.tooltip(set_tip.get()), variable=set_tip) | ||||||
|         self.settings.add_command(label=_("Light"), command=theme_change_light) |         self.settings.add_command(label=_("Light"), command=self.theme_change_light) | ||||||
|         self.settings.add_command(label=_("Dark"), command=theme_change_dark) |         self.settings.add_command(label=_("Dark"), command=self.theme_change_dark) | ||||||
|  |  | ||||||
|         # About BTN Menu / Label |         # About BTN Menu / Label | ||||||
|         self.about_btn = ttk.Button( |         self.about_btn = ttk.Button( | ||||||
|             self.menu_frame, text=_("About"), style="Toolbutton", command=info |         self.menu_frame, text=_("About"), style="Toolbutton", command=self.info) | ||||||
|         ) |  | ||||||
|         self.about_btn.grid(column=2, columnspan=2, row=0) |         self.about_btn.grid(column=2, columnspan=2, row=0) | ||||||
|         self.readme = tk.Menu(self) |         self.readme = tk.Menu(self) | ||||||
|  |  | ||||||
| @@ -306,23 +232,12 @@ class FrameWidgets(ttk.Frame): | |||||||
|         self.peer.config(font=("Ubuntu", 9)) |         self.peer.config(font=("Ubuntu", 9)) | ||||||
|         self.peer.grid(column=0, row=4, sticky="we", padx=130) |         self.peer.grid(column=0, row=4, sticky="we", padx=130) | ||||||
|  |  | ||||||
|         def enable_check_box(_): |  | ||||||
|             """ |  | ||||||
|             checkbox for enable autostart Tunnel |  | ||||||
|             """ |  | ||||||
|             Create.files_for_autostart() |  | ||||||
|             if self.l_box.size() != 0: |  | ||||||
|                 self.wg_autostart.configure(state="normal") |  | ||||||
|                 self.lb_rename.config(state="normal") |  | ||||||
|                 self.lb_rename.delete(0, tk.END) |  | ||||||
|                 self.btn_rename.config(state="normal") |  | ||||||
|  |  | ||||||
|         # Listbox with Scrollbar |         # Listbox with Scrollbar | ||||||
|         self.l_box = tk.Listbox(self.lb_frame_btn_lbox, selectmode="single") |         self.l_box = tk.Listbox(self.lb_frame_btn_lbox, selectmode="single") | ||||||
|         self.l_box.config(relief="ridge", font=("Ubuntu", 12, "bold")) |         self.l_box.config(relief="ridge", font=("Ubuntu", 12, "bold")) | ||||||
|         self.l_box.grid(column=1, rowspan=4, row=0, sticky="ns") |         self.l_box.grid(column=1, rowspan=4, row=0, sticky="ns") | ||||||
|         self.l_box.event_add("<<ClickEvent>>", "<Button-1>") |         self.l_box.event_add("<<ClickEvent>>", "<Button-1>") | ||||||
|         self.l_box.bind("<<ClickEvent>>", enable_check_box) |         self.l_box.bind("<<ClickEvent>>", self.enable_check_box) | ||||||
|         self.scrollbar = ttk.Scrollbar(self.lb_frame_btn_lbox, orient="vertical", command=self.l_box.yview) |         self.scrollbar = ttk.Scrollbar(self.lb_frame_btn_lbox, orient="vertical", command=self.l_box.yview) | ||||||
|         self.scrollbar.grid(column=1, rowspan=4, row=0, sticky="nse") |         self.scrollbar.grid(column=1, rowspan=4, row=0, sticky="nse") | ||||||
|         self.l_box.configure(yscrollcommand=self.scrollbar.set) |         self.l_box.configure(yscrollcommand=self.scrollbar.set) | ||||||
| @@ -333,7 +248,6 @@ class FrameWidgets(ttk.Frame): | |||||||
|             self.l_box.insert("end", tunnels[:-5]) |             self.l_box.insert("end", tunnels[:-5]) | ||||||
|             self.l_box.update() |             self.l_box.update() | ||||||
|  |  | ||||||
|  |  | ||||||
|         # Button Vpn |         # Button Vpn | ||||||
|         if self.a != "": |         if self.a != "": | ||||||
|             self.stop() |             self.stop() | ||||||
| @@ -354,74 +268,8 @@ class FrameWidgets(ttk.Frame): | |||||||
|  |  | ||||||
|         Tooltip(self.btn_i, _("Click to import a Wireguard Tunnel"), tips) |         Tooltip(self.btn_i, _("Click to import a Wireguard Tunnel"), tips) | ||||||
|  |  | ||||||
|         def delete(): |  | ||||||
|             """ |  | ||||||
|             delete Wireguard Tunnel |  | ||||||
|             """ |  | ||||||
|             try: |  | ||||||
|                 self.select_tunnel = self.l_box.curselection() |  | ||||||
|                 select_tl = self.l_box.get(self.select_tunnel[0]) |  | ||||||
|                 with open(f"/tmp/tlecdcwg/{select_tl}.conf", "r+", encoding="utf-8") as file2: |  | ||||||
|                     key = Tunnel.con_to_dict(file2) |  | ||||||
|                     pre_key = key[3] |  | ||||||
|                 check_call(["nmcli", "connection", "delete", select_tl]) |  | ||||||
|                 self.l_box.delete(self.select_tunnel[0]) |  | ||||||
|                 with open(set_file, "r", encoding="utf-8") as set_f6: |  | ||||||
|                     lines6 = set_f6.readlines() |  | ||||||
|                     if ( |  | ||||||
|                             select_tl == lines6[7].strip() |  | ||||||
|                             and "off\n" not in lines6[7].strip() |  | ||||||
|                     ): |  | ||||||
|                         lines6[7] = "off\n" |  | ||||||
|                         with open(set_file, "w", encoding="utf-8") as set_f7: |  | ||||||
|                             set_f7.writelines(lines6) |  | ||||||
|                         self.selected_option.set(0) |  | ||||||
|                         self.autoconnect_var.set(_("no Autoconnect")) |  | ||||||
|                 is_encrypt = Path.home() / f".config/wire_py/{select_tl}.dat" |  | ||||||
|                 if is_encrypt.is_file(): |  | ||||||
|                     Path.unlink(f"{Path.home()}/.config/wire_py/{select_tl}.dat") |  | ||||||
|                 Path.unlink(f"/tmp/tlecdcwg/{select_tl}.conf") |  | ||||||
|                 with open(f"{Path.home()}/.config/wire_py/keys", "r", encoding="utf-8") as readfile: |  | ||||||
|                     with open(f"{Path.home()}/.config/wire_py/keys2", "w", encoding="utf-8") as writefile: |  | ||||||
|                         for line in readfile: |  | ||||||
|                             if pre_key not in line.strip("\n"): |  | ||||||
|                                 writefile.write(line) |  | ||||||
|                 file_one = Path(f"{Path.home()}/.config/wire_py/keys2") |  | ||||||
|                 file_two = file_one.with_name("keys") |  | ||||||
|                 file_one.replace(file_two) |  | ||||||
|                 self.wg_autostart.configure(state="disabled") |  | ||||||
|  |  | ||||||
|                 # for disabling checkbox when Listbox empty |  | ||||||
|                 if self.l_box.size() == 0: |  | ||||||
|                     self.wg_autostart.configure(state="disabled") |  | ||||||
|                     self.lb_rename.configure(state="disabled") |  | ||||||
|                     Tooltip(self.wg_autostart, _("You must have at least one\ntunnel in the list,to use the autostart") |  | ||||||
|                             , tips) |  | ||||||
|  |  | ||||||
|                     Tooltip(self.btn_exp, _("No Tunnels in List for Export"), tips) |  | ||||||
|                     Tooltip(self.btn_stst, _("No tunnels to start in the list"), tips) |  | ||||||
|                     Tooltip(self.lb_rename, _("To rename a tunnel, at least one must be in the list"), tips, ) |  | ||||||
|                     self.lb_rename.insert(0, _("Max. 12 characters!")) |  | ||||||
|  |  | ||||||
|                 if self.a != "" and self.a == select_tl: |  | ||||||
|                     self.str_var.set(value="") |  | ||||||
|                     self.start() |  | ||||||
|                     self.l_box.update() |  | ||||||
|  |  | ||||||
|                     self.reset_fields() |  | ||||||
|  |  | ||||||
|             except IndexError: |  | ||||||
|  |  | ||||||
|                 if self.l_box.size() != 0: |  | ||||||
|  |  | ||||||
|                     LxTools.msg_window(img_w, img_i2, sl, pstl) |  | ||||||
|  |  | ||||||
|                 else: |  | ||||||
|  |  | ||||||
|                     LxTools.msg_window(img_w, img_i2, sl, pfit) |  | ||||||
|  |  | ||||||
|         # Button Trash |         # Button Trash | ||||||
|         self.btn_tr = ttk.Button(self.lb_frame_btn_lbox, image=self.tr_pic, command=delete, padding=0, |         self.btn_tr = ttk.Button(self.lb_frame_btn_lbox, image=self.tr_pic, command=self.delete, padding=0, | ||||||
|                                  style="CButton.TButton") |                                  style="CButton.TButton") | ||||||
|         self.btn_tr.grid(column=0, row=2, padx=15, pady=8) |         self.btn_tr.grid(column=0, row=2, padx=15, pady=8) | ||||||
|  |  | ||||||
| @@ -451,60 +299,8 @@ class FrameWidgets(ttk.Frame): | |||||||
|         else: |         else: | ||||||
|             Tooltip(self.lb_rename, _("To rename a tunnel, at least one must be in the list"), tips) |             Tooltip(self.lb_rename, _("To rename a tunnel, at least one must be in the list"), tips) | ||||||
|  |  | ||||||
|         def tl_rename(): |  | ||||||
|  |  | ||||||
|             special_characters = ["\\", "/", "{", "}", " "] |  | ||||||
|  |  | ||||||
|             if len(self.lb_rename.get()) > 12: |  | ||||||
|  |  | ||||||
|                 LxTools.msg_window(img_w, img_i2, rnp, _("The new name may contain only 12 characters")) |  | ||||||
|  |  | ||||||
|             elif len(self.lb_rename.get()) == 0: |  | ||||||
|  |  | ||||||
|                 LxTools.msg_window(img_w, img_i2, rnp, _("At least one character must be entered")) |  | ||||||
|  |  | ||||||
|             elif any(ch in special_characters for ch in self.lb_rename.get()): |  | ||||||
|  |  | ||||||
|                 msg_t = _("No valid sign. These must not be used.\nBlank, Slash, Backslash and { }\n") |  | ||||||
|                 LxTools.msg_window(img_w, img_i2, rnp, 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 |  | ||||||
|                     check_call(["nmcli", "connection", "modify", select_tl, "connection.id", self.lb_rename.get()]) |  | ||||||
|                     source = Path(f"/tmp/tlecdcwg/{select_tl}.conf") |  | ||||||
|                     destination = source.with_name(f"{self.lb_rename.get()}.conf") |  | ||||||
|                     source.replace(destination) |  | ||||||
|                     Path.unlink(f"{Path.home()}/.config/wire_py/{select_tl}.dat") |  | ||||||
|  |  | ||||||
|                     self.l_box.delete(self.select_tunnel[0]) |  | ||||||
|                     self.l_box.insert("end", self.lb_rename.get()) |  | ||||||
|                     self.l_box.update() |  | ||||||
|                     new_a_connect = self.lb_rename.get() |  | ||||||
|                     self.lb_rename.delete(0, tk.END) |  | ||||||
|                     if self.a != "" and self.a == select_tl: |  | ||||||
|                         self.a = Tunnel.active() |  | ||||||
|                         self.str_var.set(value=self.a) |  | ||||||
|                         with open(set_file, "r", encoding="utf-8") as set_f5: |  | ||||||
|                             lines5 = set_f5.readlines() |  | ||||||
|                         if select_tl == lines5[7].strip() and "off\n" not in lines5[7].strip(): |  | ||||||
|                             lines5[7] = new_a_connect |  | ||||||
|                             with open(set_file, "w", encoding="utf-8") as theme_set5: |  | ||||||
|                                 theme_set5.writelines(lines5) |  | ||||||
|                             self.autoconnect_var.set(value=new_a_connect) |  | ||||||
|  |  | ||||||
|                     Create.encrypt() |  | ||||||
|  |  | ||||||
|                 except IndexError: |  | ||||||
|  |  | ||||||
|                     LxTools.msg_window(img_w, img_i2, rnp, pstl) |  | ||||||
|  |  | ||||||
|         # Button Rename |         # Button Rename | ||||||
|         self.btn_rename = ttk.Button(self.lb_frame4, text=_("Rename"), state="disable", command=tl_rename, padding=4, |         self.btn_rename = ttk.Button(self.lb_frame4, text=_("Rename"), state="disable", command=self.tl_rename, padding=4, | ||||||
|                                      style="RnButton.TButton") |                                      style="RnButton.TButton") | ||||||
|         self.btn_rename.grid(column=3, row=0, padx=5, pady=10, sticky="ne") |         self.btn_rename.grid(column=3, row=0, padx=5, pady=10, sticky="ne") | ||||||
|  |  | ||||||
| @@ -533,6 +329,215 @@ class FrameWidgets(ttk.Frame): | |||||||
|  |  | ||||||
|         self.on_off() |         self.on_off() | ||||||
|  |  | ||||||
|  |     def info(self): | ||||||
|  |         def link_btn(): | ||||||
|  |             webbrowser.open("https://git.ilunix.de/punix/Wire-Py") | ||||||
|  |  | ||||||
|  |         msg_t = _("Wire-Py a simple Wireguard Gui for Linux systems.\n\n" | ||||||
|  |                 "Wire-Py is open source software written in Python.\n\n" | ||||||
|  |                 "Email: polunga40@unity-mail.de also likes for donation.\n\n" | ||||||
|  |                 "Use without warranty!\n") | ||||||
|  |  | ||||||
|  |         LxTools.msg_window(img_i, img_i, _("Info"), msg_t, _("Go to Wire-Py git"), link_btn) | ||||||
|  |  | ||||||
|  |     def theme_change_light(self): | ||||||
|  |         """ | ||||||
|  |         Set a light theme | ||||||
|  |         """ | ||||||
|  |         if self.tk.call("ttk::style", "theme", "use") == "water-dark": | ||||||
|  |             self.tk.call("set_theme", "light") | ||||||
|  |             with open(set_file, "r", encoding="utf-8") as theme_set2: | ||||||
|  |                 lines3 = theme_set2.readlines() | ||||||
|  |                 lines3[3] = "light\n" | ||||||
|  |             with open(set_file, "w", encoding="utf-8") as theme_set2: | ||||||
|  |                 theme_set2.writelines(lines3) | ||||||
|  |             self.color_label() | ||||||
|  |  | ||||||
|  |     def theme_change_dark(self): | ||||||
|  |         """ | ||||||
|  |         Set a dark theme | ||||||
|  |         """ | ||||||
|  |         if not self.tk.call("ttk::style", "theme", "use") == "water-dark": | ||||||
|  |             self.tk.call("set_theme", "dark") | ||||||
|  |             with open(set_file, "r", encoding="utf-8") as theme_set2: | ||||||
|  |                 lines4 = theme_set2.readlines() | ||||||
|  |                 lines4[3] = "dark\n" | ||||||
|  |             with open(set_file, "w", encoding="utf-8") as theme_set2: | ||||||
|  |                 theme_set2.writelines(lines4) | ||||||
|  |             self.color_label() | ||||||
|  |  | ||||||
|  |     def update(self, update_res): | ||||||
|  |         """ | ||||||
|  |         write off or on in file | ||||||
|  |         Args: | ||||||
|  |             update_res (int): argument that is passed contains 0 or 1 | ||||||
|  |         """ | ||||||
|  |         if update_res == 1: | ||||||
|  |             with open(set_file, "r", encoding="utf-8") as set_f2: | ||||||
|  |                 lines2 = set_f2.readlines() | ||||||
|  |                 lines2[1] = "off\n" | ||||||
|  |             with open(set_file, "w", encoding="utf-8") as set_f2: | ||||||
|  |                 set_f2.writelines(lines2)  | ||||||
|  |  | ||||||
|  |         else: | ||||||
|  |             with open(set_file, "r", encoding="utf-8") as set_f2: | ||||||
|  |                 lines2 = set_f2.readlines() | ||||||
|  |                 lines2[1] = "on\n" | ||||||
|  |             with open(set_file, "w", encoding="utf-8") as set_f2: | ||||||
|  |                 set_f2.writelines(lines2) | ||||||
|  |         | ||||||
|  |     def tooltip(self, tip) -> None: | ||||||
|  |         """ | ||||||
|  |         write True or False in a file | ||||||
|  |         Args: | ||||||
|  |             tip (bool): argument that is passed contains True or False | ||||||
|  |         """ | ||||||
|  |         if tip: | ||||||
|  |             with open(set_file, "r", encoding="utf-8") as set_f2: | ||||||
|  |                 lines2 = set_f2.readlines() | ||||||
|  |                 lines2[5] = "False\n" | ||||||
|  |             with open(set_file, "w", encoding="utf-8") as set_f2: | ||||||
|  |                 set_f2.writelines(lines2) | ||||||
|  |  | ||||||
|  |         else: | ||||||
|  |             with open(set_file, "r", encoding="utf-8") as set_f2: | ||||||
|  |                 lines2 = set_f2.readlines() | ||||||
|  |                 lines2[5] = "True\n" | ||||||
|  |             with open(set_file, "w", encoding="utf-8") as set_f2: | ||||||
|  |                 set_f2.writelines(lines2) | ||||||
|  |  | ||||||
|  |     def enable_check_box(self, _): | ||||||
|  |         """ | ||||||
|  |         checkbox for enable autostart Tunnel | ||||||
|  |         """ | ||||||
|  |         Create.files_for_autostart() | ||||||
|  |         if self.l_box.size() != 0: | ||||||
|  |             self.wg_autostart.configure(state="normal") | ||||||
|  |             self.lb_rename.config(state="normal") | ||||||
|  |             self.lb_rename.delete(0, tk.END) | ||||||
|  |             self.btn_rename.config(state="normal") | ||||||
|  |                  | ||||||
|  |     def delete(self): | ||||||
|  |         """ | ||||||
|  |         delete Wireguard Tunnel | ||||||
|  |         """ | ||||||
|  |         try: | ||||||
|  |             self.select_tunnel = self.l_box.curselection() | ||||||
|  |             select_tl = self.l_box.get(self.select_tunnel[0]) | ||||||
|  |             with open(f"/tmp/tlecdcwg/{select_tl}.conf", "r+", encoding="utf-8") as file2: | ||||||
|  |                 key = Tunnel.con_to_dict(file2) | ||||||
|  |                 pre_key = key[3] | ||||||
|  |             check_call(["nmcli", "connection", "delete", select_tl]) | ||||||
|  |             self.l_box.delete(self.select_tunnel[0]) | ||||||
|  |             with open(set_file, "r", encoding="utf-8") as set_f6: | ||||||
|  |                 lines6 = set_f6.readlines() | ||||||
|  |                 if ( | ||||||
|  |                         select_tl == lines6[7].strip() | ||||||
|  |                         and "off\n" not in lines6[7].strip() | ||||||
|  |                 ): | ||||||
|  |                     lines6[7] = "off\n" | ||||||
|  |                     with open(set_file, "w", encoding="utf-8") as set_f7: | ||||||
|  |                         set_f7.writelines(lines6) | ||||||
|  |                     self.selected_option.set(0) | ||||||
|  |                     self.autoconnect_var.set(_("no Autoconnect")) | ||||||
|  |             is_encrypt = Path.home() / f".config/wire_py/{select_tl}.dat" | ||||||
|  |             if is_encrypt.is_file(): | ||||||
|  |                 Path.unlink(f"{Path.home()}/.config/wire_py/{select_tl}.dat") | ||||||
|  |             Path.unlink(f"/tmp/tlecdcwg/{select_tl}.conf") | ||||||
|  |             with open(f"{Path.home()}/.config/wire_py/keys", "r", encoding="utf-8") as readfile: | ||||||
|  |                 with open(f"{Path.home()}/.config/wire_py/keys2", "w", encoding="utf-8") as writefile: | ||||||
|  |                     for line in readfile: | ||||||
|  |                         if pre_key not in line.strip("\n"): | ||||||
|  |                             writefile.write(line) | ||||||
|  |             file_one = Path(f"{Path.home()}/.config/wire_py/keys2") | ||||||
|  |             file_two = file_one.with_name("keys") | ||||||
|  |             file_one.replace(file_two) | ||||||
|  |             self.wg_autostart.configure(state="disabled") | ||||||
|  |  | ||||||
|  |             # for disabling checkbox when Listbox empty | ||||||
|  |             if self.l_box.size() == 0: | ||||||
|  |                 self.wg_autostart.configure(state="disabled") | ||||||
|  |                 self.lb_rename.configure(state="disabled") | ||||||
|  |                 Tooltip(self.wg_autostart, _("You must have at least one\ntunnel in the list,to use the autostart") | ||||||
|  |                         , tips) | ||||||
|  |  | ||||||
|  |                 Tooltip(self.btn_exp, _("No Tunnels in List for Export"), tips) | ||||||
|  |                 Tooltip(self.btn_stst, _("No tunnels to start in the list"), tips) | ||||||
|  |                 Tooltip(self.lb_rename, _("To rename a tunnel, at least one must be in the list"), tips, ) | ||||||
|  |                 self.lb_rename.insert(0, _("Max. 12 characters!")) | ||||||
|  |  | ||||||
|  |             if self.a != "" and self.a == select_tl: | ||||||
|  |                 self.str_var.set(value="") | ||||||
|  |                 self.start() | ||||||
|  |                 self.l_box.update() | ||||||
|  |  | ||||||
|  |                 self.reset_fields() | ||||||
|  |  | ||||||
|  |         except IndexError: | ||||||
|  |  | ||||||
|  |             if self.l_box.size() != 0: | ||||||
|  |  | ||||||
|  |                 LxTools.msg_window(img_w, img_i2, sl, pstl) | ||||||
|  |  | ||||||
|  |             else: | ||||||
|  |  | ||||||
|  |                 LxTools.msg_window(img_w, img_i2, sl, pfit) | ||||||
|  |  | ||||||
|  |     def tl_rename(self) -> None: | ||||||
|  |  | ||||||
|  |         special_characters = ["\\", "/", "{", "}", " "] | ||||||
|  |  | ||||||
|  |         if len(self.lb_rename.get()) > 12: | ||||||
|  |  | ||||||
|  |             LxTools.msg_window(img_w, img_i2, rnp, _("The new name may contain only 12 characters")) | ||||||
|  |  | ||||||
|  |         elif len(self.lb_rename.get()) == 0: | ||||||
|  |  | ||||||
|  |             LxTools.msg_window(img_w, img_i2, rnp, _("At least one character must be entered")) | ||||||
|  |  | ||||||
|  |         elif any(ch in special_characters for ch in self.lb_rename.get()): | ||||||
|  |  | ||||||
|  |             msg_t = _("No valid sign. These must not be used.\nBlank, Slash, Backslash and { }\n") | ||||||
|  |             LxTools.msg_window(img_w, img_i2, rnp, 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 | ||||||
|  |                 check_call(["nmcli", "connection", "modify", select_tl, "connection.id", self.lb_rename.get()]) | ||||||
|  |                 source = Path(f"/tmp/tlecdcwg/{select_tl}.conf") | ||||||
|  |                 destination = source.with_name(f"{self.lb_rename.get()}.conf") | ||||||
|  |                 source.replace(destination) | ||||||
|  |                 Path.unlink(f"{Path.home()}/.config/wire_py/{select_tl}.dat") | ||||||
|  |  | ||||||
|  |                 self.l_box.delete(self.select_tunnel[0]) | ||||||
|  |                 self.l_box.insert("end", self.lb_rename.get()) | ||||||
|  |                 self.l_box.update() | ||||||
|  |                 new_a_connect = self.lb_rename.get() | ||||||
|  |                 self.lb_rename.delete(0, tk.END) | ||||||
|  |                 if self.a != "" and self.a == select_tl: | ||||||
|  |                     self.a = Tunnel.active() | ||||||
|  |                     self.str_var.set(value=self.a) | ||||||
|  |                     with open(set_file, "r", encoding="utf-8") as set_f5: | ||||||
|  |                         lines5 = set_f5.readlines() | ||||||
|  |                     if select_tl == lines5[7].strip() and "off\n" not in lines5[7].strip(): | ||||||
|  |                         lines5[7] = new_a_connect | ||||||
|  |                         with open(set_file, "w", encoding="utf-8") as theme_set5: | ||||||
|  |                             theme_set5.writelines(lines5) | ||||||
|  |                         self.autoconnect_var.set(value=new_a_connect) | ||||||
|  |  | ||||||
|  |                 Create.encrypt() | ||||||
|  |  | ||||||
|  |             except IndexError: | ||||||
|  |  | ||||||
|  |                 LxTools.msg_window(img_w, img_i2, rnp, pstl) | ||||||
|  |  | ||||||
|  |             except subprocess.CalledProcessError: | ||||||
|  |                 pass | ||||||
|  |  | ||||||
|     def import_sl(self): |     def import_sl(self): | ||||||
|         """ |         """ | ||||||
|         Import Methode for Wireguard config Files. |         Import Methode for Wireguard config Files. | ||||||
| @@ -771,7 +776,7 @@ class FrameWidgets(ttk.Frame): | |||||||
|         """ |         """ | ||||||
|         Stop Button |         Stop Button | ||||||
|         """ |         """ | ||||||
|         self.btn_stst = ttk.Button(self.lb_frame_btn_lbox, image=self.wg_vpn_stop, command=self.wg_switch, padding=0) |         self.btn_stst = ttk.Button(self.lb_frame_btn_lbox, image=self.wg_vpn_stop, command=lambda: self.wg_switch("stop"), padding=0) | ||||||
|         self.btn_stst.grid(column=0, row=0, padx=5, pady=8) |         self.btn_stst.grid(column=0, row=0, padx=5, pady=8) | ||||||
|  |  | ||||||
|         Tooltip(self.btn_stst, _("Click to stop selected Wireguard Tunnel"), tips) |         Tooltip(self.btn_stst, _("Click to stop selected Wireguard Tunnel"), tips) | ||||||
| @@ -780,7 +785,7 @@ class FrameWidgets(ttk.Frame): | |||||||
|         """ |         """ | ||||||
|         Start Button |         Start Button | ||||||
|         """ |         """ | ||||||
|         self.btn_stst = ttk.Button(self.lb_frame_btn_lbox, image=self.wg_vpn_start, command=self.wg_switch, padding=0) |         self.btn_stst = ttk.Button(self.lb_frame_btn_lbox, image=self.wg_vpn_start, command=lambda: self.wg_switch("start"), padding=0) | ||||||
|         self.btn_stst.grid(column=0, row=0, padx=5, pady=8) |         self.btn_stst.grid(column=0, row=0, padx=5, pady=8) | ||||||
|  |  | ||||||
|         tl = Tunnel.list() |         tl = Tunnel.list() | ||||||
| @@ -805,41 +810,22 @@ class FrameWidgets(ttk.Frame): | |||||||
|         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=1) |         self.lb_tunnel.grid(column=2, padx=10, row=1) | ||||||
|  |  | ||||||
|     def wg_switch(self): |     def wg_switch(self, event=None) -> None: | ||||||
|         """ |         """ | ||||||
|         switch Tunnel method change from labels and buttons |         Deals with switching the VPN connection | ||||||
|         """ |         """ | ||||||
|         self.a = Tunnel.active() |  | ||||||
|         try: |         try: | ||||||
|             if self.a == "": |             if self.a == "": | ||||||
|  |  | ||||||
|                 self.start() |  | ||||||
|                 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]) | ||||||
|                 check_call(["nmcli", "connection", "up", select_tl]) |                 self.handle_connection_state("start", select_tl) | ||||||
|  |  | ||||||
|  |             else: | ||||||
|  |                  | ||||||
|                 data = self.handle_tunnel_data(self.a) |                 data = self.handle_tunnel_data(self.a) | ||||||
|  |                 if data: | ||||||
|  |  | ||||||
|                 # Button Start/Stop |                     self.handle_connection_state("stop") | ||||||
|                 self.stop() |  | ||||||
|                 self.a = Tunnel.active() |  | ||||||
|                 self.str_var = tk.StringVar() |  | ||||||
|                 self.str_var.set(self.a) |  | ||||||
|                 self.color_label() |  | ||||||
|  |  | ||||||
|             elif self.a != "": |  | ||||||
|  |  | ||||||
|                 # Button Start/Stop |  | ||||||
|                 self.stop() |  | ||||||
|                 check_call(["nmcli", "connection", "down", self.a]) |  | ||||||
|  |  | ||||||
|                 # Button Start/Stop |  | ||||||
|                 self.start() |  | ||||||
|                 self.a = Tunnel.active() |  | ||||||
|                 self.str_var.set("") |  | ||||||
|                 self.color_label() |  | ||||||
|  |  | ||||||
|                 self.reset_fields() |  | ||||||
|                 self.show_data() |  | ||||||
|  |  | ||||||
|         except IndexError: |         except IndexError: | ||||||
|  |  | ||||||
| @@ -851,6 +837,49 @@ class FrameWidgets(ttk.Frame): | |||||||
|  |  | ||||||
|                 LxTools.msg_window(img_w, img_i2, sl, pfit) |                 LxTools.msg_window(img_w, img_i2, sl, pfit) | ||||||
|  |  | ||||||
|  |     def handle_connection_state(self, action: str, tunnel_name: str = None) -> None: | ||||||
|  |         """ | ||||||
|  |         Central management for connection states | ||||||
|  |  | ||||||
|  |         Args: | ||||||
|  |             action (str): "start", "stop" or "toggle" | ||||||
|  |             tunnel_name (str, optional): name of tunnel for start-option. defaults to None. | ||||||
|  |         """ | ||||||
|  |         if action == "stop": | ||||||
|  |             if self.a: | ||||||
|  |                 check_call(["nmcli", "connection", "down", self.a]) | ||||||
|  |                 self.update_connection_display() | ||||||
|  |                 self.reset_fields() | ||||||
|  |                 self.start() | ||||||
|  |  | ||||||
|  |         elif action == "start": | ||||||
|  |             if tunnel_name or self.a: | ||||||
|  |                 target_tunnel = tunnel_name or self.a | ||||||
|  |                 check_call(["nmcli", "connection", "up", target_tunnel]) | ||||||
|  |                 self.update_connection_display() | ||||||
|  |                 data = self.handle_tunnel_data(self.a) | ||||||
|  |                 self.init_and_report(data) | ||||||
|  |                 self.show_data() | ||||||
|  |                 self.color_label() | ||||||
|  |                 self.stop() | ||||||
|  |  | ||||||
|  |         elif action == "toggle": | ||||||
|  |             if self.a: | ||||||
|  |                 self.handle_connection_state("stop") | ||||||
|  |             else: | ||||||
|  |                 self.handle_connection_state("start") | ||||||
|  |  | ||||||
|  |     def update_connection_display(self) -> None: | ||||||
|  |         """ | ||||||
|  |         Updated the display after connection changes | ||||||
|  |         """ | ||||||
|  |         self.a = Tunnel.active() | ||||||
|  |         if not hasattr(self, "str_var"): | ||||||
|  |             self.str_var = tk.StringVar() | ||||||
|  |         self.str_var.set(self.a) | ||||||
|  |         self.color_label() | ||||||
|  |         self.show_data() | ||||||
|  |  | ||||||
|  |  | ||||||
| if __name__ == "__main__": | if __name__ == "__main__": | ||||||
|     window = Wirepy() |     window = Wirepy() | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user