HASHIRU / utils /guard.py
mulambo's picture
Initial commit
fea1bd1
# -*- coding: utf-8 -*-
"""
Security guard functions for command execution and other sensitive operations.
"""
import os
import re
import shlex
from pathlib import Path
# Try to get allowlist from config, else None
try:
from config import EXEC_ALLOWLIST
if not isinstance(EXEC_ALLOWLIST, list):
EXEC_ALLOWLIST = None
except (ImportError, AttributeError):
EXEC_ALLOWLIST = None
DEFAULT_ALLOWLIST = [
"cmd", "ipconfig", "ping", "tracert", "where", "tasklist", "python", "git"
]
def get_allowlist() -> list[str]:
"""
Priority:
1) EXEC_ALLOWLIST from config.py (list)
2) EXEC_ALLOWLIST env var (comma/semicolon/whitespace separated)
3) DEFAULT_ALLOWLIST
"""
if EXEC_ALLOWLIST is not None:
return [str(c).lower() for c in EXEC_ALLOWLIST]
env_val = os.environ.get("EXEC_ALLOWLIST")
if env_val:
return [c.lower() for c in re.split(r"[,;\s]+", env_val) if c]
return DEFAULT_ALLOWLIST
def needs_confirmation_for_exec(cmd: str, allow: list[str]) -> bool:
"""
True se o comando (token 0) não está na allowlist.
"""
if not cmd:
return True
try:
parts = shlex.split(cmd, posix=False)
if not parts:
return True
base = parts[0].lower()
base_name = Path(base).stem.lower()
return base_name not in allow
except Exception:
return True