File size: 2,568 Bytes
fea1bd1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# 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",
]