SSH-key-Manager/config.py
2025-03-08 00:43:48 -06:00

66 lines
1.7 KiB
Python

# ssh_manager/config.py
import os
from pathlib import Path
from typing import Final
import subprocess
# Use Path for more efficient path handling
HOME: Final[Path] = Path.home()
SSH_DIR: Final[Path] = HOME / ".ssh"
CONF_DIR: Final[Path] = SSH_DIR / "conf"
SOCKET_DIR: Final[Path] = SSH_DIR / "s"
MAIN_CONFIG: Final[Path] = SSH_DIR / "config"
# Validate paths on import
for path in (SSH_DIR, CONF_DIR, SOCKET_DIR):
if not path.exists():
path.mkdir(mode=0o700, parents=True, exist_ok=True)
# Default SSH config content if ~/.ssh/config is missing
DEFAULT_CONFIG_CONTENT: Final[str] = """###
#Local ssh
###
Include conf/*/config
###
#Catch all ssh config
###
Host *
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
ServerAliveInterval 60
ConnectTimeout 60
AddKeysToAgent yes
EscapeChar `
ControlMaster auto
ControlPersist 72000
ControlPath ~/.ssh/s/%C
"""
# Export string versions for backward compatibility
SSH_DIR_STR: Final[str] = str(SSH_DIR)
CONF_DIR_STR: Final[str] = str(CONF_DIR)
SOCKET_DIR_STR: Final[str] = str(SOCKET_DIR)
MAIN_CONFIG_STR: Final[str] = str(MAIN_CONFIG)
def validate_key_path(key_path: Path) -> bool:
if not key_path.exists():
return False
if not key_path.is_dir():
return False
if not os.access(key_path, os.W_OK):
return False
return True
def update_config_with_key(key_path: Path) -> bool:
if not validate_key_path(key_path):
return False # Early return if path validation fails
try:
subprocess.check_call([...])
except subprocess.CalledProcessError as e:
print_error(f"Error generating new SSH key: {e}")
return False