|
|
import platform |
|
|
from pathlib import Path |
|
|
|
|
|
from loguru import logger |
|
|
|
|
|
|
|
|
def set_secure_permissions(file_path: Path) -> None: |
|
|
if platform.system() in {"Linux", "Darwin"}: |
|
|
file_path.chmod(0o600) |
|
|
elif platform.system() == "Windows": |
|
|
import win32api |
|
|
import win32con |
|
|
import win32security |
|
|
|
|
|
user, _, _ = win32security.LookupAccountName("", win32api.GetUserName()) |
|
|
sd = win32security.GetFileSecurity(str(file_path), win32security.DACL_SECURITY_INFORMATION) |
|
|
dacl = win32security.ACL() |
|
|
|
|
|
|
|
|
dacl.AddAccessAllowedAce( |
|
|
win32security.ACL_REVISION, |
|
|
win32con.GENERIC_READ | win32con.GENERIC_WRITE, |
|
|
user, |
|
|
) |
|
|
sd.SetSecurityDescriptorDacl(1, dacl, 0) |
|
|
win32security.SetFileSecurity(str(file_path), win32security.DACL_SECURITY_INFORMATION, sd) |
|
|
else: |
|
|
logger.error("Unsupported OS") |
|
|
|
|
|
|
|
|
def write_secret_to_file(path: Path, value: str) -> None: |
|
|
path.write_text(value, encoding="utf-8") |
|
|
try: |
|
|
set_secure_permissions(path) |
|
|
except Exception: |
|
|
logger.exception("Failed to set secure permissions on secret key") |
|
|
|
|
|
|
|
|
def read_secret_from_file(path: Path) -> str: |
|
|
return path.read_text(encoding="utf-8") |
|
|
|