85 lines
2.5 KiB
Python
Executable File
85 lines
2.5 KiB
Python
Executable File
#!/usr/bin/python3
|
|
""" This Script decrypt Wireguard files for Wirepy users """
|
|
import argparse
|
|
from pathlib import Path
|
|
import pwd
|
|
import shutil
|
|
from subprocess import CompletedProcess, run
|
|
from wp_app_config import AppConfig, logging
|
|
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument("--user", required=True, help="Username of the target file system")
|
|
args = parser.parse_args()
|
|
|
|
try:
|
|
# Retrieve UID and GID
|
|
user_info = pwd.getpwnam(args.user)
|
|
uid = user_info.pw_uid # User ID (e.g., 1000)
|
|
gid = user_info.pw_gid # Group ID (e.g., 1000)
|
|
except KeyError:
|
|
logging.error(f"User '{args.user}' not found.", exc_info=True)
|
|
exit(1)
|
|
|
|
keyfile: Path = Path(f"/home/{args.user}/.config/wire_py/pbwgk.pem")
|
|
path_of_crypted_tunnel: Path = Path(f"/home/{args.user}/.config/wire_py")
|
|
|
|
if not keyfile.is_file():
|
|
process: CompletedProcess[str] = run(
|
|
[
|
|
"openssl",
|
|
"rsa",
|
|
"-in",
|
|
AppConfig.SYSTEM_PATHS["pkey_path"],
|
|
"-out",
|
|
keyfile,
|
|
"-outform",
|
|
"PEM",
|
|
"-pubout",
|
|
],
|
|
capture_output=True,
|
|
text=True,
|
|
check=False,
|
|
)
|
|
|
|
if process.returncode == 0:
|
|
logging.info("Public key generated successfully.", exc_info=True)
|
|
else:
|
|
logging.error(
|
|
f"Error with the following code... {process.returncode}", exc_info=True
|
|
)
|
|
shutil.chown(keyfile, uid, gid)
|
|
|
|
if AppConfig.PUBLICKEY.exists():
|
|
|
|
crypted__tunnel = [str(file) for file in path_of_crypted_tunnel.glob("*.dat")]
|
|
|
|
for tunnel_path in crypted__tunnel:
|
|
|
|
base_name = Path(tunnel_path).stem
|
|
|
|
process: CompletedProcess[str] = run(
|
|
[
|
|
"openssl",
|
|
"pkeyutl",
|
|
"-decrypt",
|
|
"-inkey",
|
|
AppConfig.SYSTEM_PATHS["pkey_path"],
|
|
"-in",
|
|
tunnel_path, # full path to the file
|
|
"-out",
|
|
f"{AppConfig.TEMP_DIR}/{base_name}.conf",
|
|
],
|
|
capture_output=True,
|
|
text=True,
|
|
check=False,
|
|
)
|
|
shutil.chown(f"{AppConfig.TEMP_DIR}/{base_name}.conf", uid, gid)
|
|
logging.info(f"Processing of the file: {tunnel_path}", exc_info=True)
|
|
|
|
# Output from Openssl Error
|
|
if process.stderr:
|
|
logging.error(
|
|
f"{process.stderr} Error by [{tunnel_path}] Code: {process.returncode}",
|
|
exc_info=True,
|
|
)
|