Compare commits

...

5 Commits

Author SHA1 Message Date
6f83fc7162 Merge pull request 'wire-py-reformat-14-08-2024' (#10) from wire-py-reformat-14-08-2024 into main
Reviewed-on: https://git.ilunix.de/punix/Wire-Py/pulls/10
2024-09-04 06:26:30 +02:00
00a9436dad add class FileHandle,
add Label to show autoconnect Tunnel
disable checkbox when Listbox is empty or no select Tunnel
2024-09-03 21:27:36 +02:00
b82bd6d9e7 little fixes a " " to ' ' 2024-08-31 17:50:42 +02:00
e5d86f1f90 columnconfigure on all widgets set 2024-08-27 19:14:49 +02:00
6173a653f9 import datetime for datetime in zip_name a export Tunnel 2024-08-26 19:50:06 +02:00
4 changed files with 210 additions and 59 deletions

View File

@ -4,7 +4,8 @@
<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 when Filname &gt; 17 first copy file after rename"> <list default="true" id="940e1630-c825-4d4c-be80-bc11f543c122" name="Changes" comment="little fixes a &quot; &quot; to ' '">
<change afterPath="$PROJECT_DIR$/wg_py.xml" 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$/main.py" beforeDir="false" afterPath="$PROJECT_DIR$/main.py" afterDir="false" /> <change beforePath="$PROJECT_DIR$/main.py" beforeDir="false" afterPath="$PROJECT_DIR$/main.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_func.py" beforeDir="false" afterPath="$PROJECT_DIR$/wg_func.py" afterDir="false" />
@ -235,7 +236,31 @@
<option name="project" value="LOCAL" /> <option name="project" value="LOCAL" />
<updated>1724593165879</updated> <updated>1724593165879</updated>
</task> </task>
<option name="localTasksCounter" value="19" /> <task id="LOCAL-00019" summary="add export Tunnel as zip">
<option name="closed" value="true" />
<created>1724610514657</created>
<option name="number" value="00019" />
<option name="presentableId" value="LOCAL-00019" />
<option name="project" value="LOCAL" />
<updated>1724610514658</updated>
</task>
<task id="LOCAL-00020" summary="columnconfigure on all widgets set">
<option name="closed" value="true" />
<created>1724778892233</created>
<option name="number" value="00020" />
<option name="presentableId" value="LOCAL-00020" />
<option name="project" value="LOCAL" />
<updated>1724778892233</updated>
</task>
<task id="LOCAL-00021" summary="little fixes a &quot; &quot; to ' '">
<option name="closed" value="true" />
<created>1725119445803</created>
<option name="number" value="00021" />
<option name="presentableId" value="LOCAL-00021" />
<option name="project" value="LOCAL" />
<updated>1725119445803</updated>
</task>
<option name="localTasksCounter" value="22" />
<servers /> <servers />
</component> </component>
<component name="Vcs.Log.Tabs.Properties"> <component name="Vcs.Log.Tabs.Properties">
@ -280,6 +305,9 @@
<MESSAGE value="fix label when laat Tunnel delete and fix Tuple error in delete and Start/Stop when listbox empty" /> <MESSAGE value="fix label when laat Tunnel delete and fix Tuple error in delete and Start/Stop when listbox empty" />
<MESSAGE value="remove a ',' in DNS Name" /> <MESSAGE value="remove a ',' in DNS Name" />
<MESSAGE value="fix when Filname &gt; 17 first copy file after rename" /> <MESSAGE value="fix when Filname &gt; 17 first copy file after rename" />
<option name="LAST_COMMIT_MESSAGE" value="fix when Filname &gt; 17 first copy file after rename" /> <MESSAGE value="add export Tunnel as zip" />
<MESSAGE value="columnconfigure on all widgets set" />
<MESSAGE value="little fixes a &quot; &quot; to ' '" />
<option name="LAST_COMMIT_MESSAGE" value="little fixes a &quot; &quot; to ' '" />
</component> </component>
</project> </project>

98
main.py
View File

@ -4,9 +4,10 @@ import tkinter as tk
from tkinter import ttk from tkinter import ttk
from wg_func import (TunnelActiv, ListTunnels, ImportTunnel, ConToDict, GreenLabel, StartStopBTN, ShowAddress, from wg_func import (TunnelActiv, ListTunnels, ImportTunnel, ConToDict, GreenLabel, StartStopBTN, ShowAddress,
ExportTunnels) FileHandle, ExportTunnels)
fontcolor = '#4011a7' font_color = '#4011a7'
replacement = ''
class MainWindow(tk.Tk): class MainWindow(tk.Tk):
@ -23,7 +24,7 @@ class MainWindow(tk.Tk):
self.title('Wire-Py') self.title('Wire-Py')
self.configure() self.configure()
self.geometry('%dx%d+%d+%d' % (self.x_width, self.y_height, self.monitor_center_x, self.monitor_center_y)) self.geometry('%dx%d+%d+%d' % (self.x_width, self.y_height, self.monitor_center_x, self.monitor_center_y))
self.columnconfigure(2, weight=1) self.columnconfigure(0, weight=1)
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')
@ -60,37 +61,47 @@ class FrameWidgets(ttk.Frame):
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=2, sticky='snew', padx=20, pady=5) self.lb_frame.grid(column=2, row=2, sticky='snew', padx=20, pady=5)
self.columnconfigure(0, weight=1)
self.rowconfigure(0, weight=1)
# Label Frame 2 # Label Frame 2
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=3, sticky='snew', padx=20, pady=5) self.lb_frame2.grid(column=2, row=3, sticky='snew', padx=20, pady=5)
self.columnconfigure(0, weight=1)
self.rowconfigure(0, 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=1, padx=15, sticky="w") self.lb.grid(column=2, row=1, padx=15, sticky='w')
# 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=fontcolor) 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.grid(column=0, row=4, 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=fontcolor) 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=7, sticky="we", padx=130) self.peer.grid(column=0, row=7, sticky='we', padx=130)
# Listbox with Scrollbar # 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.scrollbar = ttk.Scrollbar(self)
self.l_box = tk.Listbox(self, fg='#606060', selectmode='single') self.l_box = tk.Listbox(self, fg='#606060', selectmode='single')
self.l_box.config(highlightthickness=0, relief='flat') self.l_box.config(highlightthickness=0, relief='flat')
self.scrollbar.config(command=self.l_box.yview) self.scrollbar.config(command=self.l_box.yview)
self.l_box.config(font=("Ubuntu", 12, "bold")) self.l_box.config(font=('Ubuntu', 12, 'bold'))
self.l_box.grid(column=1, rowspan=3, row=1) 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 # Tunnel List
self.tl = ListTunnels.tl_list() self.tl = ListTunnels.tl_list()
for tunnels in self.tl: for tunnels in self.tl:
@ -125,31 +136,78 @@ class FrameWidgets(ttk.Frame):
os.system('nmcli connection delete ' + str(select_tl)) os.system('nmcli connection delete ' + str(select_tl))
self.l_box.delete(self.select_tunnel[0]) self.l_box.delete(self.select_tunnel[0])
os.remove(os.environ['HOME'] + '/tester/' + str(select_tl) + '.conf') 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: if self.a != '' and self.a == select_tl:
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
ShowAddress.label_empty(self) ShowAddress.label_empty(self)
return select_tl
except IndexError: except IndexError:
pass pass
# Button Trash # Button Trash
self.btn_tr = tk.Button(self, image=self.tr_pic, bd=0, command=delete) 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.btn_tr.grid(column=0, row=3, padx=15, pady=15)
# Button Export # Button Export
self.btn_exp = tk.Button(self, image=self.exp_pic, bd=0, command=ExportTunnels.wg_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.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 # Check Buttons
self.wg_autostart = tk.Checkbutton(self, text='Autoconnect on PC Start') self.selected_option = tk.IntVar()
self.wg_autostart.grid(column=1, rowspan=3, row=3)
self.wg_update = tk.Checkbutton(self, text='Search automatically for\nWire-Py updates') self.wg_autostart = tk.Checkbutton(self,
self.wg_update.grid(column=1, rowspan=3, row=4) 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): def wg_switch(self):
self.a = TunnelActiv.active() self.a = TunnelActiv.active()
try: try:
if self.a == '': if self.a == '':
StartStopBTN.button_start(self) StartStopBTN.button_start(self)
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])

View File

@ -1,11 +1,11 @@
# Wireguard functions for Wire-Py # Wireguard functions for Wire-Py
import os import os
import shutil import shutil
import tarfile from datetime import datetime
from tkinter import filedialog from tkinter import filedialog
import tkinter as tk import tkinter as tk
fontcolor = '#4011a7' font_color = '#4011a7'
class Message(tk.Tk): class Message(tk.Tk):
@ -25,9 +25,9 @@ class Message(tk.Tk):
self.label = tk.Label(self, image=self.warning_pic, self.label = tk.Label(self, image=self.warning_pic,
text='Oh... no valid Wireguard File!\nPlease select a valid Wireguard File') text='Oh... no valid Wireguard File!\nPlease select a valid Wireguard File')
self.label.config(font=("Ubuntu", 11), padx=15, pady=15) self.label.config(font=('Ubuntu', 11), padx=15, pady=15)
self.label.grid(column=0, row=0) self.label.grid(column=0, row=0)
self.button = tk.Button(self, text="OK", command=self.destroy) self.button = tk.Button(self, text='OK', command=self.destroy)
self.button.config(padx=15, pady=5) self.button.config(padx=15, pady=5)
self.button.grid(column=0, row=1) self.button.grid(column=0, row=1)
@ -40,8 +40,10 @@ class GreenLabel(tk.Tk):
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=1) self.lb_tunnel.grid(column=2, padx=10, row=1)
self.columnconfigure(2, weight=1)
self.rowconfigure(1, weight=1)
class StartStopBTN(tk.Tk): class StartStopBTN(tk.Tk):
@ -55,12 +57,14 @@ class StartStopBTN(tk.Tk):
def button_stop(self): def button_stop(self):
self.btn_stst = tk.Button(self, image=self.wg_vpn_stop, bd=0, command=self.wg_switch) 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=10, sticky="s") self.btn_stst.grid(column=0, row=1, padx=15, pady=10, sticky="s")
self.rowconfigure(0, weight=1) self.columnconfigure(0, weight=1)
self.rowconfigure(1, weight=1)
def button_start(self): def button_start(self):
self.btn_stst = tk.Button(self, image=self.wg_vpn_start, bd=0, command=self.wg_switch) 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=10, sticky="s") self.btn_stst.grid(column=0, row=1, padx=15, pady=10, sticky="s")
self.rowconfigure(0, weight=1) self.columnconfigure(0, weight=1)
self.rowconfigure(1, weight=1)
class ConToDict: class ConToDict:
@ -68,14 +72,14 @@ class ConToDict:
def covert_to_dict(cls, file): def covert_to_dict(cls, file):
dictlist = [] dictlist = []
for lines in file.readlines(): for lines in file.readlines():
lineplit = lines.split() line_plit = lines.split()
dictlist = dictlist + lineplit dictlist = dictlist + line_plit
dictlist.remove('[Interface]') dictlist.remove('[Interface]')
dictlist.remove('[Peer]') dictlist.remove('[Peer]')
for items in dictlist: for items in dictlist:
if items == '=': if items == '=':
dictlist.remove(items) dictlist.remove(items)
for i in dictlist: # Here is the beginning (Loop) of convert List to Dictionary for _ in dictlist: # Here is the beginning (Loop) of convert List to Dictionary
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]]
@ -84,17 +88,17 @@ class ConToDict:
f = [dictlist[10], dictlist[11]] f = [dictlist[10], dictlist[11]]
g = [dictlist[12], dictlist[13]] g = [dictlist[12], dictlist[13]]
h = [dictlist[14], dictlist[15]] h = [dictlist[14], dictlist[15]]
newlist = [a, b, c, d, e, f, g, h] new_list = [a, b, c, d, e, f, g, h]
finaldict = {} final_dict = {}
for elements in newlist: for elements in new_list:
finaldict[elements[0]] = elements[1] final_dict[elements[0]] = elements[1]
# end... result a Dictionary # end... result a Dictionary
address = finaldict['Address'] address = final_dict['Address']
dns = finaldict['DNS'] dns = final_dict['DNS']
if ',' in dns: if ',' in dns:
dns = dns[:-1] dns = dns[:-1]
endpoint = finaldict['Endpoint'] endpoint = final_dict['Endpoint']
return address, dns, endpoint return address, dns, endpoint
@ -139,16 +143,16 @@ class ShowAddress(tk.Tk):
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=5, sticky="w", padx=10) self.address.grid(column=0, row=5, sticky='w', padx=10)
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=3) self.dns.grid(column=0, row=6, sticky='w', padx=10, pady=3)
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=8, sticky="w", padx=10, pady=5) self.endpoint.grid(column=0, row=8, sticky='w', padx=10, pady=5)
self.endpoint.config(font=("Ubuntu", 9)) self.endpoint.config(font=('Ubuntu', 9))
class ListTunnels: class ListTunnels:
@ -174,22 +178,22 @@ class ImportTunnel:
def wg_import_select(self): def wg_import_select(self):
try: try:
filepath = filedialog.askopenfilename(initialdir=os.environ['HOME'], title="Select Wireguard config File", filepath = filedialog.askopenfilename(initialdir=os.environ['HOME'], title='Select Wireguard config File',
filetypes=[("WG config files", "*.conf")]) filetypes=[('WG config files', '*.conf')])
file = open(filepath, 'r') file = open(filepath, 'r')
read = file.read() read = file.read()
file.close() file.close()
pathsplit = filepath.split("/") path_split = filepath.split('/')
pathsplit1 = pathsplit[-1] path_split1 = path_split[-1]
if "PrivateKey = " in read and "PublicKey = " in read: if 'PrivateKey = ' in read and 'PublicKey = ' in read:
if len(pathsplit1) > 17: if len(path_split1) > 17:
p1 = shutil.copy(filepath, os.environ['HOME'] + '/tester/') p1 = shutil.copy(filepath, os.environ['HOME'] + '/tester/')
pathsplit = pathsplit1[len(pathsplit1) - 17:] path_split = path_split1[len(path_split1) - 17:]
os.rename(p1, os.environ['HOME'] + '/tester/' + str(pathsplit)) os.rename(p1, os.environ['HOME'] + '/tester/' + str(path_split))
if self.a != '': if self.a != '':
os.system('nmcli connection down ' + str(TunnelActiv.active())) os.system('nmcli connection down ' + str(TunnelActiv.active()))
os.system('nmcli connection import type wireguard file ' + os.environ['HOME'] + '/tester/' + os.system('nmcli connection import type wireguard file ' + os.environ['HOME'] + '/tester/' +
str(pathsplit)) str(path_split))
else: else:
shutil.copy(filepath, os.environ['HOME'] + '/tester/') shutil.copy(filepath, os.environ['HOME'] + '/tester/')
if self.a != '': if self.a != '':
@ -212,7 +216,10 @@ class ImportTunnel:
ShowAddress.show_data(self) ShowAddress.show_data(self)
file.close() file.close()
os.system('nmcli con mod ' + str(self.a) + ' connection.autoconnect no') os.system('nmcli con mod ' + str(self.a) + ' connection.autoconnect no')
if "PrivateKey = " not in read: new_tl = open('wg_py.xml', 'a')
new_tl.write('false ' + str(self.a))
new_tl.close()
if 'PrivateKey = ' not in read:
Message() Message()
except EOFError: except EOFError:
pass pass
@ -222,12 +229,69 @@ class ImportTunnel:
pass 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: class ExportTunnels:
@staticmethod @staticmethod
def wg_export(): def wg_export():
now_time = datetime.now()
now_datetime = now_time.strftime('/wg-exp-' + '%m-%d-%Y' + '-' + '%H:%M')
tl = ListTunnels.tl_list()
try: try:
wg_tar = os.environ['HOME'] + '/datetime' if len(tl) != 0:
p_to_conf = os.environ['HOME'] + '/tester' wg_tar = os.environ['HOME'] + now_datetime
shutil.make_archive(wg_tar, 'zip', p_to_conf) p_to_conf = os.environ['HOME'] + '/tester'
shutil.make_archive(wg_tar, 'zip', p_to_conf)
#if zip_full != 0:
#print('Export erfolgraeich')
#else:
#print('ups etwwas ging schief bitte Export wiederholen')
else:
print('No Tunnel for Export')
except TypeError: except TypeError:
pass pass

1
wg_py.xml Normal file
View File

@ -0,0 +1 @@
true iphone-wg