HASHIRU / config.py
mulambo's picture
Initial commit
fea1bd1
# C:\Users\marco\agente_gemini\HASHIRU_6_1\config.py
from __future__ import annotations
import os
from dataclasses import dataclass
from pathlib import Path
from typing import List
from dotenv import load_dotenv
# Carrega .env se existir (não falha se não existir)
load_dotenv()
# ---------- Helpers robustos de leitura ----------
def _get_env_str(key: str, default: str) -> str:
val = os.getenv(key, default)
return val if isinstance(val, str) and val.strip() != "" else default
def _get_env_int(key: str, default: int) -> int:
raw = os.getenv(key)
if raw is None or raw.strip() == "":
return default
try:
return int(raw.strip())
except Exception:
return default
def _get_env_bool(key: str, default: bool) -> bool:
raw = os.getenv(key)
if raw is None:
return default
raw = raw.strip().lower()
return raw in ("1", "true", "yes", "y", "on")
def _get_env_list(key: str, default_csv: str) -> List[str]:
raw = os.getenv(key, default_csv)
items = [x.strip() for x in raw.split(",") if x.strip()]
# dedup preservando ordem
seen, out = set(), []
for x in items:
xl = x.lower()
if xl not in seen:
seen.add(xl)
out.append(x)
return out
# ---------- Diretórios base ----------
ROOT: Path = Path(__file__).parent.resolve()
DATA_DIR: Path = Path(_get_env_str("DATA_DIR", str(ROOT / "data"))).resolve()
LOGS_DIR: Path = Path(_get_env_str("LOGS_DIR", str(ROOT / "logs"))).resolve()
# Garante criação de pastas
DATA_DIR.mkdir(parents=True, exist_ok=True)
LOGS_DIR.mkdir(parents=True, exist_ok=True)
# ---------- Rede/Servidor ----------
HOST: str = _get_env_str("HOST", "localhost")
PORT: int = _get_env_int("PORT", 8080)
# ---------- Flags/Defaults ----------
TIMEOUT_DEFAULT: int = _get_env_int("TIMEOUT_DEFAULT", 60)
AUDIT_ENABLED: bool = _get_env_bool("AUDIT_ENABLED", True)
_DELETE_MODE = _get_env_str("DELETE_MODE", "trash").lower()
if _DELETE_MODE not in {"trash", "hard"}:
_DELETE_MODE = "trash"
DELETE_MODE: str = _DELETE_MODE # "trash" | "hard"
PY_UNSAFE_DEFAULT: bool = _get_env_bool("PY_UNSAFE_DEFAULT", False)
# ---------- Exec allowlist ----------
EXEC_ALLOWLIST: List[str] = _get_env_list(
"EXEC_ALLOWLIST",
"cmd,ipconfig,ping,tracert,where,tasklist,python,git",
)
# ---------- Export explícito ----------
__all__ = [
"ROOT",
"DATA_DIR",
"LOGS_DIR",
"HOST",
"PORT",
"TIMEOUT_DEFAULT",
"AUDIT_ENABLED",
"DELETE_MODE",
"PY_UNSAFE_DEFAULT",
"EXEC_ALLOWLIST",
]