Compare commits
6 Commits
Wire-Py-2.
...
main
Author | SHA1 | Date | |
---|---|---|---|
13832d916f | |||
1667682c9d | |||
8771be760d | |||
97bf9df041 | |||
1bba45a6c1 | |||
a5eb6293c6 |
22
Changelog
22
Changelog
@ -6,13 +6,23 @@ My standard System: Linux Mint 22 Cinnamon
|
|||||||
- os import in cls_mth_fc.py replaced by other methods
|
- os import in cls_mth_fc.py replaced by other methods
|
||||||
- If Wire-Py already runs, prevent further start
|
- If Wire-Py already runs, prevent further start
|
||||||
- for loops with lists replaced by List Comprehensions
|
- for loops with lists replaced by List Comprehensions
|
||||||
- Update search after start of Wire-Py
|
- Crypt and Decrypt Config Files in ~/.config/wire_py
|
||||||
|
|
||||||
|
### Added
|
||||||
|
03-03-2025
|
||||||
|
|
||||||
|
- Fixes a new user files create
|
||||||
|
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
07-11-2024
|
02-03-2025
|
||||||
|
|
||||||
- remove classes and add methods to class FrameWidgets (removed self errors)
|
|
||||||
|
|
||||||
|
- Fix ipv6 in Config File on import
|
||||||
|
- Wirepy run now as user
|
||||||
|
- settings, keys and Config Files now in ~/.config/wire_py
|
||||||
|
- For new users, the required files are created and autostart service is started.
|
||||||
|
- Tunnels are now read from the directory to view them in the list.
|
||||||
|
To display only own tunnels, and read errors are minimized.
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
10-11-2024
|
10-11-2024
|
||||||
@ -62,7 +72,7 @@ My standard System: Linux Mint 22 Cinnamon
|
|||||||
### Added
|
### Added
|
||||||
27-10-2024
|
27-10-2024
|
||||||
|
|
||||||
- Add Autoconnect settings to settings.conf
|
- Add Autoconnect settings to settings
|
||||||
|
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
@ -70,7 +80,7 @@ My standard System: Linux Mint 22 Cinnamon
|
|||||||
|
|
||||||
- Add run_as Bash script and open_gitea.py python script
|
- Add run_as Bash script and open_gitea.py python script
|
||||||
- Add Tooltip disable/enable
|
- Add Tooltip disable/enable
|
||||||
- Rename settings to settings.conf for theme, updates and tooltip enable in one file
|
- Rename settings to settings for theme, updates and tooltip enable in one file
|
||||||
|
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
4
Wire-Py.desktop
Executable file → Normal file
4
Wire-Py.desktop
Executable file → Normal file
@ -1,7 +1,7 @@
|
|||||||
[Desktop Entry]
|
[Desktop Entry]
|
||||||
Type=Application
|
Type=Application
|
||||||
Name=Wire-Py
|
Name=Wire-Py
|
||||||
Exec=/usr/bin/wirepy.py
|
Exec=/usr/local/bin/wg_main.py
|
||||||
Terminal=false
|
Terminal=false
|
||||||
Categories=Network;
|
Categories=Network;
|
||||||
Icon=/usr/share/icons/wp-icons/128/wg_vpn.png
|
Icon=/usr/share/icons/wp-icons/128/wg_vpn.png
|
Binary file not shown.
Binary file not shown.
125
cls_mth_fc.py
125
cls_mth_fc.py
@ -4,6 +4,7 @@ import gettext
|
|||||||
import locale
|
import locale
|
||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
|
from subprocess import check_call
|
||||||
import subprocess
|
import subprocess
|
||||||
import tkinter as tk
|
import tkinter as tk
|
||||||
import zipfile
|
import zipfile
|
||||||
@ -12,6 +13,7 @@ from pathlib import Path
|
|||||||
from tkinter import ttk
|
from tkinter import ttk
|
||||||
import requests
|
import requests
|
||||||
|
|
||||||
|
|
||||||
APP = 'wirepy'
|
APP = 'wirepy'
|
||||||
LOCALE_DIR = "/usr/share/locale/"
|
LOCALE_DIR = "/usr/share/locale/"
|
||||||
locale.bindtextdomain(APP, LOCALE_DIR)
|
locale.bindtextdomain(APP, LOCALE_DIR)
|
||||||
@ -19,8 +21,98 @@ gettext.bindtextdomain(APP, LOCALE_DIR)
|
|||||||
gettext.textdomain(APP)
|
gettext.textdomain(APP)
|
||||||
_ = gettext.gettext
|
_ = gettext.gettext
|
||||||
|
|
||||||
wg_set = Path('/etc/wire_py/settings.conf')
|
wg_set = Path(Path.home() / '.config/wire_py/settings')
|
||||||
_u = Path.read_text(Path('/tmp/_u'))
|
|
||||||
|
class Create():
|
||||||
|
"""
|
||||||
|
This class is for the creation of the folders and files
|
||||||
|
required by Wire-Py, as well as for decryption
|
||||||
|
the tunnel from the user's home directory
|
||||||
|
"""
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def dir_and_files():
|
||||||
|
|
||||||
|
pth = Path.home() / '.config/wire_py'
|
||||||
|
pth.mkdir(parents=True, exist_ok=True)
|
||||||
|
sett = Path.home() / '.config/wire_py/settings'
|
||||||
|
ks = Path.home() / '.config/wire_py/keys'
|
||||||
|
|
||||||
|
if sett.exists():
|
||||||
|
pass
|
||||||
|
|
||||||
|
else:
|
||||||
|
sett.touch()
|
||||||
|
sett.write_text('[UPDATES]\non\n[THEME]\nlight\n[TOOLTIP]\nTrue\n[AUTOSTART ON]\noff\n')
|
||||||
|
|
||||||
|
if ks.exists():
|
||||||
|
pass
|
||||||
|
|
||||||
|
else:
|
||||||
|
ks.touch()
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def files_for_autostart():
|
||||||
|
|
||||||
|
pth2 = Path.home() / '.config/systemd/user'
|
||||||
|
pth2.mkdir(parents=True, exist_ok=True)
|
||||||
|
wg_ser = Path.home() / '.config/systemd/user/wg_start.service'
|
||||||
|
|
||||||
|
if wg_ser.exists():
|
||||||
|
pass
|
||||||
|
|
||||||
|
else:
|
||||||
|
wg_ser.touch()
|
||||||
|
wg_ser.write_text('[Unit]\nDescription=Automatic Tunnel Start\nAfter=network-online.target'
|
||||||
|
'\n\n[Service]\nType=oneshot\nExecStartPre=/bin/sleep 5\nExecStart=/usr/'
|
||||||
|
'local/bin/start_wg.py\n[Install]\nWantedBy=default.target')
|
||||||
|
check_call(['systemctl', '--user', 'enable', 'wg_start.service'])
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def make_dir():
|
||||||
|
''' Dirname "tlecdewg" = Tunnel Encrypt Decrypt Wireguard '''
|
||||||
|
|
||||||
|
dirname = Path('/tmp/tlecdcwg/')
|
||||||
|
if dirname.exists():
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
dirname.mkdir()
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def decrypt():
|
||||||
|
process = subprocess.run(['pkexec', '/usr/local/bin/ssl_decrypt.py'], stdout=subprocess.PIPE, text=True)
|
||||||
|
#print(process.stdout)
|
||||||
|
if process.returncode == 0:
|
||||||
|
print('File successfully decrypted...')
|
||||||
|
else:
|
||||||
|
print(f'Error with the following code... {process.returncode}')
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def encrypt():
|
||||||
|
process = subprocess.run(['pkexec', '/usr/local/bin/ssl_encrypt.py'], stdout=subprocess.PIPE, text=True)
|
||||||
|
print(process.stdout)
|
||||||
|
if process.returncode == 0:
|
||||||
|
print('All Files successfully encrypted...')
|
||||||
|
else:
|
||||||
|
print(f'Error with the following code... {process.returncode}')
|
||||||
|
|
||||||
|
class UOS:
|
||||||
|
"""
|
||||||
|
The class is only for unixoidal systems "UOS" = UnixOS
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
"""
|
||||||
|
This method displays the user name of the logged-in user,
|
||||||
|
even if you are rooted in a shell
|
||||||
|
"""
|
||||||
|
@staticmethod
|
||||||
|
def username():
|
||||||
|
logname = str(Path.home())[6:]
|
||||||
|
file = Path.home() / '/tmp/.loguser'
|
||||||
|
with open(file, "w") as f:
|
||||||
|
f.write(logname)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class GiteaUpdate:
|
class GiteaUpdate:
|
||||||
@ -53,10 +145,10 @@ class GiteaUpdate:
|
|||||||
@staticmethod
|
@staticmethod
|
||||||
def download(urld, down_ok_image, down_not_ok_image, res):
|
def download(urld, down_ok_image, down_not_ok_image, res):
|
||||||
try:
|
try:
|
||||||
to_down = 'wget -qP ' + str(_u) + ' ' + urld
|
to_down = 'wget -qP ' + str(Path.home()) + ' ' + urld
|
||||||
result = subprocess.call(to_down, shell=True)
|
result = subprocess.call(to_down, shell=True)
|
||||||
if result == 0:
|
if result == 0:
|
||||||
shutil.chown(str(_u) + f'/{res}.zip', 1000, 1000)
|
shutil.chown(str(Path.home()) + f'/{res}.zip', 1000, 1000)
|
||||||
"""img_w, img_i, w_title, w_txt hand over"""
|
"""img_w, img_i, w_title, w_txt hand over"""
|
||||||
iw = r'/usr/share/icons/lx-icons/64/info.png'
|
iw = r'/usr/share/icons/lx-icons/64/info.png'
|
||||||
ii = down_ok_image
|
ii = down_ok_image
|
||||||
@ -145,6 +237,8 @@ class Tunnel:
|
|||||||
for items in dictlist:
|
for items in dictlist:
|
||||||
if items == '=':
|
if items == '=':
|
||||||
dictlist.remove(items)
|
dictlist.remove(items)
|
||||||
|
if items == '::/0':
|
||||||
|
dictlist.remove(items)
|
||||||
|
|
||||||
''' Here is the beginning (Loop) of convert List to Dictionary '''
|
''' Here is the beginning (Loop) of convert List to Dictionary '''
|
||||||
for _ in dictlist:
|
for _ in dictlist:
|
||||||
@ -189,15 +283,16 @@ class Tunnel:
|
|||||||
return active
|
return active
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Shows all existing Wireguard tunnels
|
Shows all existing Wireguard tunnels a login user
|
||||||
"""
|
"""
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def list():
|
def list():
|
||||||
wg_s = os.popen('nmcli con show | grep -iPo "(.*)(wireguard)"').read().split()
|
|
||||||
|
dirname = Path('/tmp/tlecdcwg/')
|
||||||
|
wg_s = os.listdir(dirname)
|
||||||
|
|
||||||
|
return wg_s
|
||||||
|
|
||||||
''' tl = Tunnel list # Show of 4.Element in list '''
|
|
||||||
tl = wg_s[::3]
|
|
||||||
return tl
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
This will export the tunnels.
|
This will export the tunnels.
|
||||||
@ -206,21 +301,17 @@ class Tunnel:
|
|||||||
"""
|
"""
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def export():
|
def export():
|
||||||
_u1 = str(_u[6:])
|
|
||||||
now_time = datetime.now()
|
now_time = datetime.now()
|
||||||
now_datetime = now_time.strftime('wg-exp-' + '%m-%d-%Y' + '-' + '%H:%M')
|
now_datetime = now_time.strftime('wg-exp-' + '%m-%d-%Y' + '-' + '%H:%M')
|
||||||
tl = Tunnel.list()
|
tl = Tunnel.list()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if len(tl) != 0:
|
if len(tl) != 0:
|
||||||
wg_tar = str(_u) + '/' + now_datetime
|
wg_tar = str(Path.home()) + '/' + now_datetime
|
||||||
shutil.copytree('/etc/wire_py', '/tmp/wire_py', dirs_exist_ok=True)
|
shutil.copytree('/tmp/tlecdcwg/', '/tmp/wire_py', dirs_exist_ok=True)
|
||||||
source = Path('/tmp/wire_py')
|
source = Path('/tmp/wire_py')
|
||||||
Path.unlink(Path(source) / 'wg_py', missing_ok=True)
|
|
||||||
Path.unlink(Path(source) / '.keys', missing_ok=True)
|
|
||||||
Path.unlink(Path(source) / 'settings.conf', missing_ok=True)
|
|
||||||
shutil.make_archive(wg_tar, 'zip', source)
|
shutil.make_archive(wg_tar, 'zip', source)
|
||||||
shutil.chown(wg_tar + '.zip', 1000, 1000)
|
#shutil.chown(wg_tar + '.zip', 1000, 1000)
|
||||||
shutil.rmtree(source)
|
shutil.rmtree(source)
|
||||||
with zipfile.ZipFile((wg_tar + '.zip'), 'r') as zf:
|
with zipfile.ZipFile((wg_tar + '.zip'), 'r') as zf:
|
||||||
if len(zf.namelist()) != 0:
|
if len(zf.namelist()) != 0:
|
||||||
@ -268,5 +359,3 @@ class Tipi:
|
|||||||
else:
|
else:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
wg_tips = Tipi.if_tip(wg_set)
|
|
||||||
|
34
install
34
install
@ -6,30 +6,30 @@ BLUE='\033[30;1;34m'
|
|||||||
|
|
||||||
install_file_with(){
|
install_file_with(){
|
||||||
clear
|
clear
|
||||||
|
mkdir -p ~/.config/wire_py && touch ~/.config/wire_py/keys && cp -u settings ~/.config/wire_py/ && \
|
||||||
|
mkdir -p ~/.config/systemd/user && cp -u wg_start.service ~/.config/systemd/user/ && \
|
||||||
|
systemctl --user enable wg_start.service
|
||||||
|
sudo cp -f org.sslcrypt.policy /usr/share/polkit-1/actions/ && \
|
||||||
sudo apt install python3-tk && \
|
sudo apt install python3-tk && \
|
||||||
sudo cp -u wg_main.py start_wg.py cls_mth_fc.py wirepy.py run_as open_gitea.py /usr/bin/ && \
|
sudo cp -fv wg_main.py start_wg.py cls_mth_fc.py ssl_encrypt.py ssl_decrypt.py /usr/local/bin/ && \
|
||||||
sudo mkdir -p /etc/wire_py && sudo touch /etc/wire_py/.keys && sudo cp -u settings.conf /etc/wire_py/ && \
|
|
||||||
sudo cp -uR wp-icons lx-icons /usr/share/icons/ && sudo cp -uR TK-Themes /usr/share/ && \
|
sudo cp -uR wp-icons lx-icons /usr/share/icons/ && sudo cp -uR TK-Themes /usr/share/ && \
|
||||||
sudo chown -R root:root /etc/wire_py && sudo chmod 755 /etc/wire_py && \
|
|
||||||
sudo cp -u languages/de/*.mo /usr/share/locale/de/LC_MESSAGES/ && \
|
sudo cp -u languages/de/*.mo /usr/share/locale/de/LC_MESSAGES/ && \
|
||||||
sudo ln -sf /usr/bin/wirepy.py /usr/local/bin/wirepy && \
|
sudo ln -sf /usr/local/bin/wg_main.py /usr/local/bin/wirepy && \
|
||||||
sudo cp -u org.wirepy.policy /usr/share/polkit-1/actions/ && \
|
sudo cp -f Wire-Py.desktop /usr/share/applications/
|
||||||
sudo cp -u Wire-Py.desktop /usr/share/applications/ && \
|
|
||||||
sudo cp -u wg_start.service /lib/systemd/system/ && \
|
|
||||||
sudo systemctl enable wg_start.service
|
|
||||||
}
|
}
|
||||||
|
|
||||||
install_arch_d(){
|
install_arch_d(){
|
||||||
clear
|
clear
|
||||||
sudo pacman -S --noconfirm tk python3 python-requests && \
|
sudo pacman -S --noconfirm tk python3 python-requests && \
|
||||||
sudo cp -u wg_main.py start_wg.py cls_mth_fc.py wirepy.py run_as open_gitea.py /usr/bin/ && \
|
sudo cp -u wg_main.py start_wg.py cls_mth_fc.py && \
|
||||||
sudo mkdir -p /etc/wire_py && sudo touch /etc/wire_py/.keys && sudo cp -u settings.conf /etc/wire_py/ && \
|
sudo mkdir -p /etc/wire_py && sudo touch /etc/wire_py/keys && sudo cp -u settings /etc/wire_py/ && \
|
||||||
sudo cp -uR wp-icons lx-icons /usr/share/icons/ && sudo cp -uR TK-Themes /usr/share/ && \
|
sudo cp -uR wp-icons lx-icons /usr/share/icons/ && sudo cp -uR TK-Themes /usr/share/ && \
|
||||||
sudo chown -R root:root /etc/wire_py && sudo chmod 755 /etc/wire_py && \
|
sudo chown -R root:root /etc/wire_py && sudo chmod 755 /etc/wire_py && \
|
||||||
sudo cp -u languages/de/*.mo /usr/share/locale/de/LC_MESSAGES/ && \
|
sudo cp -u languages/de/*.mo /usr/share/locale/de/LC_MESSAGES/ && \
|
||||||
sudo ln -sf /usr/bin/wirepy.py /usr/local/bin/wirepy && \
|
sudo ln -sf /usr/bin/wirepy.py /usr/local/bin/wirepy && \
|
||||||
sudo cp -u org.wirepy.policy /usr/share/polkit-1/actions/ && \
|
sudo cp -u org.wirepy.policy /usr/share/polkit-1/actions/ && \
|
||||||
sudo cp -u Wire-Py.desktop /usr/share/applications/ && \
|
sudo cp -u Wire-Py.desktop /usr/share/applications/ && \
|
||||||
|
sudo cp -u org.sslcrypt.policy /usr/share/polkit-1/actions/ && \
|
||||||
sudo cp -u wg_start.service /lib/systemd/system/ && \
|
sudo cp -u wg_start.service /lib/systemd/system/ && \
|
||||||
sudo systemctl enable wg_start.service
|
sudo systemctl enable wg_start.service
|
||||||
}
|
}
|
||||||
@ -91,9 +91,9 @@ elif grep -i 'fedora' /etc/os-release > /dev/null 2>&1
|
|||||||
if ! which python3-tkinter &> /dev/null
|
if ! which python3-tkinter &> /dev/null
|
||||||
then sudo dnf install python3-tkinter -y
|
then sudo dnf install python3-tkinter -y
|
||||||
|
|
||||||
sudo cp -u wg_main.py start_wg.py cls_mth_fc.py wirepy.py run_as open_gitea.py /usr/bin/ && \
|
sudo cp -u wg_main.py start_wg.py cls_mth_fc.py && \
|
||||||
sudo mkdir -p /etc/wire_py && sudo touch /etc/wire_py/.keys && \
|
sudo mkdir -p /etc/wire_py && sudo touch /etc/wire_py/keys && \
|
||||||
sudo cp -u settings.conf /etc/wire_py/ && \
|
sudo cp -u settings /etc/wire_py/ && \
|
||||||
sudo cp -u languages/de/*.mo /usr/share/locale/de/LC_MESSAGES/ && \
|
sudo cp -u languages/de/*.mo /usr/share/locale/de/LC_MESSAGES/ && \
|
||||||
sudo cp -uR wp-icons lx-icons /usr/share/icons/ && sudo cp -uR TK-Themes /usr/share/ && \
|
sudo cp -uR wp-icons lx-icons /usr/share/icons/ && sudo cp -uR TK-Themes /usr/share/ && \
|
||||||
sudo chown -R root:root /etc/wire_py && sudo chmod 755 /etc/wire_py && \
|
sudo chown -R root:root /etc/wire_py && sudo chmod 755 /etc/wire_py && \
|
||||||
@ -108,9 +108,9 @@ elif grep -i 'suse' /etc/os-release > /dev/null 2>&1
|
|||||||
then
|
then
|
||||||
if ! which python311-tk &> /dev/null
|
if ! which python311-tk &> /dev/null
|
||||||
then sudo zypper install python311-tk
|
then sudo zypper install python311-tk
|
||||||
sudo cp -u wg_main.py start_wg.py cls_mth_fc.py wirepy.py run_as open_gitea.py /usr/bin/ && \
|
sudo cp -u wg_main.py start_wg.py cls_mth_fc.py && \
|
||||||
sudo mkdir -p /etc/wire_py && sudo touch /etc/wire_py/.keys && \
|
sudo mkdir -p /etc/wire_py && sudo touch /etc/wire_py/keys && \
|
||||||
sudo cp -u settings.conf /etc/wire_py/ && \
|
sudo cp -u settings /etc/wire_py/ && \
|
||||||
sudo cp -u languages/de/*.mo /usr/share/locale/de/LC_MESSAGES/ && \
|
sudo cp -u languages/de/*.mo /usr/share/locale/de/LC_MESSAGES/ && \
|
||||||
sudo cp -uR wp-icons lx-icons /usr/share/icons/ && sudo cp -uR TK-Themes /usr/share/ && \
|
sudo cp -uR wp-icons lx-icons /usr/share/icons/ && sudo cp -uR TK-Themes /usr/share/ && \
|
||||||
sudo chown -R root:root /etc/wire_py && sudo chmod 755 /etc/wire_py && \
|
sudo chown -R root:root /etc/wire_py && sudo chmod 755 /etc/wire_py && \
|
||||||
@ -128,7 +128,7 @@ else
|
|||||||
clear
|
clear
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
clear
|
#clear
|
||||||
read -n 1 -s -r -p $"To close the Window press a button"
|
read -n 1 -s -r -p $"To close the Window press a button"
|
||||||
clear
|
clear
|
||||||
|
|
||||||
|
@ -1,5 +0,0 @@
|
|||||||
#!/usr/bin/python3
|
|
||||||
|
|
||||||
import webbrowser
|
|
||||||
|
|
||||||
webbrowser.open('https://git.ilunix.de/punix/Wire-Py')
|
|
42
org.sslcrypt.policy
Normal file
42
org.sslcrypt.policy
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE policyconfig PUBLIC "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN" "http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Policy definitions for ssl_encrypt and ssl_decrypt
|
||||||
|
|
||||||
|
Copyright (C) 2025 Désiré Werner Menrath <polunga40@unity-mail.de>
|
||||||
|
|
||||||
|
This library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Lesser General Public
|
||||||
|
License as published by the Free Software Foundation; either
|
||||||
|
version 2.1 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Lesser General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public
|
||||||
|
License along with this library. If not, see
|
||||||
|
<http://www.gnu.org/licenses/>.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<policyconfig>
|
||||||
|
<action id="org.ssl_encrypt">
|
||||||
|
<defaults>
|
||||||
|
<allow_any>auth_admin_keep</allow_any>
|
||||||
|
<allow_active>yes</allow_active>
|
||||||
|
</defaults>
|
||||||
|
<annotate key="org.freedesktop.policykit.exec.path">/usr/local/bin/ssl_encrypt.py</annotate>
|
||||||
|
</action>
|
||||||
|
|
||||||
|
<action id="org.ssl_decrypt">
|
||||||
|
<defaults>
|
||||||
|
<allow_any>auth_admin_keep</allow_any>
|
||||||
|
<allow_inactive>auth_admin_keep</allow_inactive>
|
||||||
|
<allow_active>yes</allow_active>
|
||||||
|
</defaults>
|
||||||
|
<annotate key="org.freedesktop.policykit.exec.path">/usr/local/bin/ssl_decrypt.py</annotate>
|
||||||
|
|
||||||
|
</action>
|
||||||
|
</policyconfig>
|
@ -1,16 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE policyconfig PUBLIC "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN" "http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
|
|
||||||
<policyconfig>
|
|
||||||
<vendor>Project Wire-Py</vendor>
|
|
||||||
<vendor_url>https://git.ilunix.de/punix/Wire-Py</vendor_url>
|
|
||||||
<icon_name>wg-vpn</icon_name>
|
|
||||||
<action id="org.wirepy">
|
|
||||||
<defaults>
|
|
||||||
<allow_any>auth_admin_keep</allow_any>
|
|
||||||
<allow_inactive>auth_admin_keep</allow_inactive>
|
|
||||||
<allow_active>yes</allow_active>
|
|
||||||
</defaults>
|
|
||||||
<annotate key="org.freedesktop.policykit.exec.path">/usr/bin/wg_main.py</annotate>
|
|
||||||
<annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
|
|
||||||
</action>
|
|
||||||
</policyconfig>
|
|
28
ssl_decrypt.py
Executable file
28
ssl_decrypt.py
Executable file
@ -0,0 +1,28 @@
|
|||||||
|
#!/usr/bin/python3
|
||||||
|
''' This Script decrypt Wireguardfiles for Wirepy users '''
|
||||||
|
|
||||||
|
import os
|
||||||
|
from subprocess import check_call
|
||||||
|
from pathlib import Path
|
||||||
|
import shutil
|
||||||
|
uname = Path('/tmp/.loguser')
|
||||||
|
|
||||||
|
with open(uname, 'r') as f:
|
||||||
|
logname = f.readline()
|
||||||
|
|
||||||
|
''' Dirname "tlecdewg" = Tunnel Encrypt Decrypt Wireguard '''
|
||||||
|
dirname = Path('/tmp/tlecdcwg/')
|
||||||
|
keyfile = '/usr/local/etc/ssl/pwgk.pem'
|
||||||
|
|
||||||
|
dirname2 = ('/home/' + logname + '/.config/wire_py/')
|
||||||
|
detl = os.listdir(dirname2)
|
||||||
|
os.chdir(dirname2)
|
||||||
|
detl.remove('keys')
|
||||||
|
detl.remove('settings')
|
||||||
|
if os.path.exists(dirname2 + 'pbwgk.pem'):
|
||||||
|
detl.remove('pbwgk.pem')
|
||||||
|
for detunnels in detl:
|
||||||
|
tlname2 = detunnels[:-4] + '.conf'
|
||||||
|
extpath = str(dirname) + '/' + tlname2
|
||||||
|
check_call(['openssl', 'pkeyutl', '-decrypt', '-inkey', keyfile, '-in', detunnels, '-out', extpath])
|
||||||
|
shutil.chown(extpath, 1000, 1000)
|
49
ssl_encrypt.py
Executable file
49
ssl_encrypt.py
Executable file
@ -0,0 +1,49 @@
|
|||||||
|
#!/usr/bin/python3
|
||||||
|
''' This Script encrypt Wireguardfiles for Wirepy users for more Security'''
|
||||||
|
|
||||||
|
import os
|
||||||
|
from subprocess import check_call
|
||||||
|
from pathlib import Path
|
||||||
|
import shutil
|
||||||
|
|
||||||
|
uname = Path('/tmp/.loguser')
|
||||||
|
|
||||||
|
with open(uname, 'r') as f:
|
||||||
|
logname = f.readline()
|
||||||
|
|
||||||
|
keyfile = Path(f'/home/{logname}/.config/wire_py/pbwgk.pem')
|
||||||
|
dirname = Path('/tmp/tlecdcwg/')
|
||||||
|
pkeyfile = '/usr/local/etc/ssl/pwgk.pem'
|
||||||
|
|
||||||
|
if not keyfile.is_file():
|
||||||
|
|
||||||
|
check_call(['openssl', 'rsa', '-in', pkeyfile, '-out', keyfile, '-outform', 'PEM', '-pubout'])
|
||||||
|
shutil.chown(keyfile, 1000, 1000)
|
||||||
|
|
||||||
|
if dirname.exists():
|
||||||
|
tl = os.listdir(str(dirname))
|
||||||
|
cpth = str(keyfile)
|
||||||
|
cryptfiles = cpth[:-9]
|
||||||
|
|
||||||
|
if keyfile.exists() and len(tl) != 0:
|
||||||
|
for tunnels in tl:
|
||||||
|
sourcetl = str(dirname) + '/' + tunnels
|
||||||
|
tlname = cryptfiles + tunnels[:-5] + '.dat'
|
||||||
|
check_call(['openssl', 'pkeyutl', '-encrypt', '-inkey', keyfile, '-pubin', '-in', sourcetl, '-out', tlname])
|
||||||
|
|
||||||
|
else:
|
||||||
|
|
||||||
|
if dirname.exists():
|
||||||
|
tl = os.listdir(str(dirname))
|
||||||
|
cpth = str(keyfile)
|
||||||
|
cryptfiles = cpth[:-9]
|
||||||
|
|
||||||
|
if keyfile.exists() and len(tl) != 0:
|
||||||
|
for tunnels in tl:
|
||||||
|
sourcetl = str(dirname) + '/' + tunnels
|
||||||
|
tlname = cryptfiles + tunnels[:-5] + '.dat'
|
||||||
|
check_call(['openssl', 'pkeyutl', '-encrypt', '-inkey', keyfile, '-pubin', '-in', sourcetl, '-out', tlname])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
|||||||
from subprocess import check_call
|
from subprocess import check_call
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
path_to_file = Path('/etc/wire_py/settings.conf')
|
path_to_file = Path(Path.home() / '.config/wire_py/settings')
|
||||||
|
|
||||||
with open(path_to_file, 'r') as a_con:
|
with open(path_to_file, 'r') as a_con:
|
||||||
lines = a_con.readlines()
|
lines = a_con.readlines()
|
||||||
|
112
wg_main.py
112
wg_main.py
@ -2,19 +2,30 @@
|
|||||||
|
|
||||||
import gettext
|
import gettext
|
||||||
import locale
|
import locale
|
||||||
|
import webbrowser
|
||||||
import os
|
import os
|
||||||
import shutil
|
import sys
|
||||||
|
import signal
|
||||||
import subprocess
|
import subprocess
|
||||||
|
import shutil
|
||||||
import tkinter as tk
|
import tkinter as tk
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from subprocess import check_call
|
from subprocess import check_call
|
||||||
from tkinter import filedialog, ttk, TclError
|
from tkinter import filedialog, ttk, TclError
|
||||||
from cls_mth_fc import (Tunnel, msg_window, GiteaUpdate, _u, wg_tips, wg_set)
|
from cls_mth_fc import (Tunnel, Create, msg_window, Tipi, GiteaUpdate, UOS)
|
||||||
|
|
||||||
|
UOS.username()
|
||||||
|
Create.dir_and_files()
|
||||||
|
Create.make_dir()
|
||||||
|
Create.decrypt()
|
||||||
|
|
||||||
tcl_path = Path('/usr/share/TK-Themes')
|
tcl_path = Path('/usr/share/TK-Themes')
|
||||||
|
wg_set = Path(Path.home() / '.config/wire_py/settings')
|
||||||
|
wg_tips = Tipi.if_tip(wg_set)
|
||||||
|
dirname = Path('/tmp/tlecdcwg/')
|
||||||
|
|
||||||
''' 1 = 1. Year, 09 = Month of the Year, 2924 = Day and Year of the Year '''
|
''' 1 = 1. Year, 09 = Month of the Year, 2924 = Day and Year of the Year '''
|
||||||
version = 'v. 2.02.2425'
|
version = 'v. 2.03.0325'
|
||||||
|
|
||||||
res = GiteaUpdate.api_down('https://git.ilunix.de/api/v1/repos/punix/Wire-Py/releases', version)
|
res = GiteaUpdate.api_down('https://git.ilunix.de/api/v1/repos/punix/Wire-Py/releases', version)
|
||||||
|
|
||||||
@ -26,7 +37,31 @@ gettext.bindtextdomain(APP, LOCALE_DIR)
|
|||||||
gettext.textdomain(APP)
|
gettext.textdomain(APP)
|
||||||
_ = gettext.gettext
|
_ = gettext.gettext
|
||||||
|
|
||||||
|
def signalHandler(signum, frame):
|
||||||
|
''' Determine clear text names for signal numbers '''
|
||||||
|
SIGNALS_TO_NAMES_DICT = dict((getattr(signal, n), n) \
|
||||||
|
for n in dir(signal) if n.startswith('SIG') and '_' not in n )
|
||||||
|
signame = SIGNALS_TO_NAMES_DICT.get(signum, "Unnamed signal: %d" % signum)
|
||||||
|
|
||||||
|
'''
|
||||||
|
End program for certain signals,
|
||||||
|
report to others only reception
|
||||||
|
'''
|
||||||
|
if signum in (signal.SIGINT, signal.SIGTERM):
|
||||||
|
exitCode = 1
|
||||||
|
print("\nSignal '%s' (%d) received. => Aborting with exit code %d." % (signame, signum, exitCode))
|
||||||
|
shutil.rmtree(dirname)
|
||||||
|
Path.unlink('/tmp/.loguser')
|
||||||
|
print('Breakdown by user...')
|
||||||
|
sys.exit(exitCode)
|
||||||
|
else:
|
||||||
|
print("Signal %d received and ignored." % signum)
|
||||||
|
shutil.rmtree(dirname)
|
||||||
|
Path.unlink('/tmp/.loguser')
|
||||||
|
print('Process unexpectedly ended...')
|
||||||
|
signal.signal(signal.SIGINT, signalHandler)
|
||||||
|
signal.signal(signal.SIGTERM, signalHandler)
|
||||||
|
signal.signal(signal.SIGHUP, signalHandler)
|
||||||
class MainWindow(tk.Tk):
|
class MainWindow(tk.Tk):
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
@ -58,9 +93,9 @@ class MainWindow(tk.Tk):
|
|||||||
|
|
||||||
''' Set it as the window icon '''
|
''' Set it as the window icon '''
|
||||||
self.iconphoto(True, self.wg_icon)
|
self.iconphoto(True, self.wg_icon)
|
||||||
|
|
||||||
FrameWidgets(self).grid()
|
FrameWidgets(self).grid()
|
||||||
|
|
||||||
|
|
||||||
class FrameWidgets(ttk.Frame):
|
class FrameWidgets(ttk.Frame):
|
||||||
def __init__(self, container, **kwargs):
|
def __init__(self, container, **kwargs):
|
||||||
@ -141,9 +176,7 @@ class FrameWidgets(ttk.Frame):
|
|||||||
|
|
||||||
def info():
|
def info():
|
||||||
def link_btn():
|
def link_btn():
|
||||||
_u1 = str(_u[6:])
|
webbrowser.open('https://git.ilunix.de/punix/Wire-Py')
|
||||||
path_to_file = Path('/usr/bin/./run_as')
|
|
||||||
check_call(['su', _u1, path_to_file])
|
|
||||||
|
|
||||||
"""img_w, img_i, w_title, w_txt , txt2, com hand over"""
|
"""img_w, img_i, w_title, w_txt , txt2, com hand over"""
|
||||||
iw = r'/usr/share/icons/wp-icons/48/wg_vpn.png'
|
iw = r'/usr/share/icons/wp-icons/48/wg_vpn.png'
|
||||||
@ -332,7 +365,7 @@ class FrameWidgets(ttk.Frame):
|
|||||||
''' Listbox with Scrollbar '''
|
''' Listbox with Scrollbar '''
|
||||||
|
|
||||||
def enable_check_box(_):
|
def enable_check_box(_):
|
||||||
|
Create.files_for_autostart()
|
||||||
if self.l_box.size() != 0:
|
if self.l_box.size() != 0:
|
||||||
self.wg_autostart.configure(state='normal')
|
self.wg_autostart.configure(state='normal')
|
||||||
self.lb_rename.config(state='normal')
|
self.lb_rename.config(state='normal')
|
||||||
@ -349,9 +382,10 @@ class FrameWidgets(ttk.Frame):
|
|||||||
self.l_box.configure(yscrollcommand=self.scrollbar.set)
|
self.l_box.configure(yscrollcommand=self.scrollbar.set)
|
||||||
|
|
||||||
''' Tunnel List '''
|
''' Tunnel List '''
|
||||||
|
|
||||||
self.tl = Tunnel.list()
|
self.tl = Tunnel.list()
|
||||||
for tunnels in self.tl:
|
for tunnels in self.tl:
|
||||||
self.l_box.insert("end", tunnels)
|
self.l_box.insert("end", tunnels[:-5])
|
||||||
self.l_box.update()
|
self.l_box.update()
|
||||||
|
|
||||||
def list_empty_enter(event):
|
def list_empty_enter(event):
|
||||||
@ -382,7 +416,7 @@ class FrameWidgets(ttk.Frame):
|
|||||||
''' Button Vpn '''
|
''' Button Vpn '''
|
||||||
if self.a != '':
|
if self.a != '':
|
||||||
self.stop()
|
self.stop()
|
||||||
wg_read = Path('/etc/wire_py') / str(self.a + '.conf')
|
wg_read = '/tmp/tlecdcwg/' + str(self.a + '.conf')
|
||||||
with open(wg_read, 'r') as file:
|
with open(wg_read, 'r') as file:
|
||||||
data = Tunnel.con_to_dict(file)
|
data = Tunnel.con_to_dict(file)
|
||||||
|
|
||||||
@ -420,7 +454,7 @@ class FrameWidgets(ttk.Frame):
|
|||||||
try:
|
try:
|
||||||
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])
|
||||||
with open('/etc/wire_py/' + select_tl + '.conf', 'r+') as file2:
|
with open('/tmp/tlecdcwg/' + select_tl + '.conf', 'r+') as file2:
|
||||||
key = Tunnel.con_to_dict(file2)
|
key = Tunnel.con_to_dict(file2)
|
||||||
pre_key = key[3]
|
pre_key = key[3]
|
||||||
check_call(['nmcli', 'connection', 'delete', select_tl])
|
check_call(['nmcli', 'connection', 'delete', select_tl])
|
||||||
@ -433,15 +467,17 @@ class FrameWidgets(ttk.Frame):
|
|||||||
set_file7.writelines(lines6)
|
set_file7.writelines(lines6)
|
||||||
self.selected_option.set(0)
|
self.selected_option.set(0)
|
||||||
self.autoconnect_var.set(_('no Autoconnect'))
|
self.autoconnect_var.set(_('no Autoconnect'))
|
||||||
|
is_encrypt = Path.home() / '.config/wire_py' / str(select_tl + '.dat')
|
||||||
Path.unlink(Path('/etc/wire_py') / str(select_tl + '.conf'))
|
if is_encrypt.is_file():
|
||||||
with open('/etc/wire_py/.keys', 'r') as readfile:
|
Path.unlink(str(Path.home()) + '/.config/wire_py/' + str(select_tl + '.dat'))
|
||||||
with open('/etc/wire_py/.keys2', 'w') as writefile:
|
Path.unlink(Path('/tmp/tlecdcwg') / str(select_tl + '.conf'))
|
||||||
|
with open(str(Path.home()) + '/.config/wire_py/keys', 'r') as readfile:
|
||||||
|
with open(str(Path.home()) + '/.config/wire_py/keys2', 'w') as writefile:
|
||||||
for line in readfile:
|
for line in readfile:
|
||||||
if pre_key not in line.strip("\n"):
|
if pre_key not in line.strip("\n"):
|
||||||
writefile.write(line)
|
writefile.write(line)
|
||||||
file_one = Path('/etc/wire_py/.keys2')
|
file_one = Path(str(Path.home()) + '/.config/wire_py/keys2')
|
||||||
file_two = file_one.with_name('.keys')
|
file_two = file_one.with_name('keys')
|
||||||
file_one.replace(file_two)
|
file_one.replace(file_two)
|
||||||
self.wg_autostart.configure(state='disabled')
|
self.wg_autostart.configure(state='disabled')
|
||||||
|
|
||||||
@ -636,9 +672,10 @@ class FrameWidgets(ttk.Frame):
|
|||||||
|
|
||||||
''' nmcli connection modify old connection.id iphone '''
|
''' nmcli connection modify old connection.id iphone '''
|
||||||
check_call(['nmcli', 'connection', 'modify', select_tl, 'connection.id', self.lb_rename.get()])
|
check_call(['nmcli', 'connection', 'modify', select_tl, 'connection.id', self.lb_rename.get()])
|
||||||
source = Path('/etc/wire_py') / str(select_tl + '.conf')
|
source = Path('/tmp/tlecdcwg') / str(select_tl + '.conf')
|
||||||
destination = source.with_name(str(self.lb_rename.get() + '.conf'))
|
destination = source.with_name(str(self.lb_rename.get() + '.conf'))
|
||||||
source.replace(destination)
|
source.replace(destination)
|
||||||
|
Path.unlink(str(Path.home()) + '/.config/wire_py/' + str(select_tl + '.dat'))
|
||||||
self.l_box.delete(self.select_tunnel[0])
|
self.l_box.delete(self.select_tunnel[0])
|
||||||
self.l_box.insert("end", self.lb_rename.get())
|
self.l_box.insert("end", self.lb_rename.get())
|
||||||
self.l_box.update()
|
self.l_box.update()
|
||||||
@ -654,6 +691,8 @@ class FrameWidgets(ttk.Frame):
|
|||||||
with open(wg_set, 'w') as theme_set5:
|
with open(wg_set, 'w') as theme_set5:
|
||||||
theme_set5.writelines(lines5)
|
theme_set5.writelines(lines5)
|
||||||
self.autoconnect_var.set(value=new_a_connect)
|
self.autoconnect_var.set(value=new_a_connect)
|
||||||
|
|
||||||
|
Create.encrypt()
|
||||||
|
|
||||||
return select_tl
|
return select_tl
|
||||||
|
|
||||||
@ -738,8 +777,11 @@ class FrameWidgets(ttk.Frame):
|
|||||||
If True then the name is automatically shortened to 12 characters and then imported.
|
If True then the name is automatically shortened to 12 characters and then imported.
|
||||||
If in each case false comes out, a corresponding window comes to inform the user that something is wrong.
|
If in each case false comes out, a corresponding window comes to inform the user that something is wrong.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
Create.dir_and_files()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
filepath = filedialog.askopenfilename(initialdir=str(_u), title=_('Select Wireguard config File'),
|
filepath = filedialog.askopenfilename(initialdir=str(Path.home()), title=_('Select Wireguard config File'),
|
||||||
filetypes=[(_('WG config files'), '*.conf')], )
|
filetypes=[(_('WG config files'), '*.conf')], )
|
||||||
|
|
||||||
with open(filepath, 'r') as file:
|
with open(filepath, 'r') as file:
|
||||||
@ -753,7 +795,7 @@ class FrameWidgets(ttk.Frame):
|
|||||||
key = Tunnel.con_to_dict(file)
|
key = Tunnel.con_to_dict(file)
|
||||||
pre_key = key[3]
|
pre_key = key[3]
|
||||||
if len(pre_key) != 0:
|
if len(pre_key) != 0:
|
||||||
with open('/etc/wire_py/.keys', 'r') as readfile:
|
with open(str(Path.home()) + '/.config/wire_py/keys', 'r') as readfile:
|
||||||
p_key = readfile.readlines()
|
p_key = readfile.readlines()
|
||||||
if pre_key in p_key or pre_key + '\n' in p_key:
|
if pre_key in p_key or pre_key + '\n' in p_key:
|
||||||
"""img_w, img_i, w_title, w_txt hand over"""
|
"""img_w, img_i, w_title, w_txt hand over"""
|
||||||
@ -765,13 +807,13 @@ class FrameWidgets(ttk.Frame):
|
|||||||
|
|
||||||
else:
|
else:
|
||||||
|
|
||||||
with open('/etc/wire_py/.keys', 'a') as keyfile:
|
with open(str(Path.home()) + '/.config/wire_py/keys', 'a') as keyfile:
|
||||||
keyfile.write(pre_key + '\r')
|
keyfile.write(pre_key + '\r')
|
||||||
if len(path_split1) > 17:
|
if len(path_split1) > 17:
|
||||||
p1 = shutil.copy(filepath, Path('/etc/wire_py/'))
|
p1 = shutil.copy(filepath, '/tmp/tlecdcwg/')
|
||||||
path_split = path_split1[len(path_split1) - 17:]
|
path_split = path_split1[len(path_split1) - 17:]
|
||||||
os.rename(p1, Path('/etc/wire_py') / str(path_split))
|
os.rename(p1, '/tmp/tlecdcwg/' + str(path_split))
|
||||||
new_conf = '/etc/wire_py/' + path_split
|
new_conf = '/tmp/tlecdcwg/' + path_split
|
||||||
if self.a != '':
|
if self.a != '':
|
||||||
check_call(['nmcli', 'connection', 'down', Tunnel.active()])
|
check_call(['nmcli', 'connection', 'down', Tunnel.active()])
|
||||||
self.label_empty()
|
self.label_empty()
|
||||||
@ -779,8 +821,10 @@ class FrameWidgets(ttk.Frame):
|
|||||||
subprocess.check_output(['nmcli', 'connection', 'import', 'type',
|
subprocess.check_output(['nmcli', 'connection', 'import', 'type',
|
||||||
'wireguard', 'file', new_conf], text=True)
|
'wireguard', 'file', new_conf], text=True)
|
||||||
|
|
||||||
|
Create.encrypt()
|
||||||
|
|
||||||
else:
|
else:
|
||||||
shutil.copy(filepath, Path('/etc/wire_py/'))
|
shutil.copy(filepath, '/tmp/tlecdcwg/')
|
||||||
if self.a != '':
|
if self.a != '':
|
||||||
check_call(['nmcli', 'connection', 'down', Tunnel.active()])
|
check_call(['nmcli', 'connection', 'down', Tunnel.active()])
|
||||||
self.label_empty()
|
self.label_empty()
|
||||||
@ -788,6 +832,8 @@ class FrameWidgets(ttk.Frame):
|
|||||||
subprocess.check_output(['nmcli', 'connection', 'import', 'type',
|
subprocess.check_output(['nmcli', 'connection', 'import', 'type',
|
||||||
'wireguard', 'file', filepath], text=True)
|
'wireguard', 'file', filepath], text=True)
|
||||||
|
|
||||||
|
Create.encrypt()
|
||||||
|
|
||||||
self.StrVar.set('')
|
self.StrVar.set('')
|
||||||
self.a = Tunnel.active()
|
self.a = Tunnel.active()
|
||||||
self.l_box.insert(0, self.a)
|
self.l_box.insert(0, self.a)
|
||||||
@ -865,7 +911,7 @@ class FrameWidgets(ttk.Frame):
|
|||||||
self.StrVar.set(self.a)
|
self.StrVar.set(self.a)
|
||||||
self.color_label()
|
self.color_label()
|
||||||
self.stop()
|
self.stop()
|
||||||
wg_read = Path('/etc/wire_py') / str(self.a + '.conf')
|
wg_read = '/tmp/tlecdcwg/' + str(self.a + '.conf')
|
||||||
with open(wg_read, 'r') as file_for_key:
|
with open(wg_read, 'r') as file_for_key:
|
||||||
data = Tunnel.con_to_dict(file_for_key)
|
data = Tunnel.con_to_dict(file_for_key)
|
||||||
|
|
||||||
@ -892,7 +938,7 @@ class FrameWidgets(ttk.Frame):
|
|||||||
except subprocess.CalledProcessError:
|
except subprocess.CalledProcessError:
|
||||||
|
|
||||||
print('Tunnel exist!')
|
print('Tunnel exist!')
|
||||||
|
|
||||||
def box_set(self):
|
def box_set(self):
|
||||||
"""
|
"""
|
||||||
This Method will display the autostart label which
|
This Method will display the autostart label which
|
||||||
@ -1061,7 +1107,7 @@ class FrameWidgets(ttk.Frame):
|
|||||||
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])
|
check_call(['nmcli', 'connection', 'up', select_tl])
|
||||||
wg_read = Path('/etc/wire_py') / str(select_tl + '.conf')
|
wg_read = '/tmp/tlecdcwg/' + str(select_tl + '.conf')
|
||||||
with open(wg_read, 'r') as file:
|
with open(wg_read, 'r') as file:
|
||||||
data = Tunnel.con_to_dict(file)
|
data = Tunnel.con_to_dict(file)
|
||||||
|
|
||||||
@ -1144,7 +1190,7 @@ class MyToolTip(tk.Toplevel):
|
|||||||
def clear_tip(self):
|
def clear_tip(self):
|
||||||
"""Remove Tool-Tip"""
|
"""Remove Tool-Tip"""
|
||||||
self.destroy()
|
self.destroy()
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
window = MainWindow()
|
window = MainWindow()
|
||||||
@ -1159,3 +1205,7 @@ if __name__ == '__main__':
|
|||||||
window.tk.call('set', '::tk::dialog::file::showHiddenBtn', '0')
|
window.tk.call('set', '::tk::dialog::file::showHiddenBtn', '0')
|
||||||
window.tk.call('set', '::tk::dialog::file::showHiddenVar', '0')
|
window.tk.call('set', '::tk::dialog::file::showHiddenVar', '0')
|
||||||
window.mainloop()
|
window.mainloop()
|
||||||
|
|
||||||
|
shutil.rmtree(dirname)
|
||||||
|
Path.unlink('/tmp/.loguser')
|
||||||
|
sys.exit(0)
|
@ -5,6 +5,6 @@ After=network-online.target
|
|||||||
[Service]
|
[Service]
|
||||||
Type=oneshot
|
Type=oneshot
|
||||||
ExecStartPre=/bin/sleep 5
|
ExecStartPre=/bin/sleep 5
|
||||||
ExecStart=/usr/bin/start_wg.py
|
ExecStart=/usr/local/bin/start_wg.py
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=default.target
|
||||||
|
Loading…
x
Reference in New Issue
Block a user