# Traitement des Variables d'Environnement ## 🔧 Vue d'ensemble L'API Vault 4NK intĂšgre un systĂšme avancĂ© de traitement des variables d'environnement qui rĂ©sout automatiquement les rĂ©fĂ©rences de variables dans les fichiers de configuration avant leur chiffrement et transmission. ## 🚀 FonctionnalitĂ©s ### RĂ©solution automatique des variables - **Syntaxes supportĂ©es** : `$VAR` et `${VAR}` - **RĂ©solution rĂ©cursive** : Les variables peuvent rĂ©fĂ©rencer d'autres variables - **Protection contre les boucles infinies** : DĂ©tection automatique des dĂ©pendances circulaires - **Traitement en mĂ©moire** : Les fichiers originaux ne sont jamais modifiĂ©s ### Sources de variables - **Fichier `.env` principal** : `storage//.env` - **Variables systĂšme** : Non utilisĂ©es (isolation complĂšte) - **Fichiers de sous-rĂ©pertoires** : Non chargĂ©s (configurations spĂ©cifiques aux services) ## 📋 Syntaxes supportĂ©es ### Syntaxe simple : `$VAR` ```bash # Variables de base DOMAIN=4nkweb.com HOST=dev4.$DOMAIN ROOT_HOST=$HOST ROOT_URL=https://$ROOT_HOST # RĂ©solution automatique DOMAIN → 4nkweb.com HOST → dev4.4nkweb.com ROOT_HOST → dev4.4nkweb.com ROOT_URL → https://dev4.4nkweb.com ``` ### Syntaxe avec accolades : `${VAR}` ```bash # Variables complexes LOG_DIR=/home/debian/4NK_env/logs BITCOIN_LOG_DIR=${LOG_DIR}/bitcoin TOR_LOG_DIR=${LOG_DIR}/tor # RĂ©solution automatique LOG_DIR → /home/debian/4NK_env/logs BITCOIN_LOG_DIR → /home/debian/4NK_env/logs/bitcoin TOR_LOG_DIR → /home/debian/4NK_env/logs/tor ``` ## 🔄 Processus de rĂ©solution ### 1. Chargement des variables ```python # Seul le fichier .env principal est chargĂ© env_file = STORAGE_ROOT / env / '.env' variables = load_env_file(env_file) ``` ### 2. RĂ©solution rĂ©cursive ```python def resolve_variable(var_name, visited=None): if var_name in visited: # Protection contre les boucles return f"${var_name}" visited.add(var_name) value = variables[var_name] # RĂ©solution des sous-variables for match in find_variables(value): resolved = resolve_variable(match, visited.copy()) value = value.replace(f"${{{match}}}", resolved) value = value.replace(f"${match}", resolved) return value ``` ### 3. Traitement du contenu ```python def process_content(content): # Pattern pour ${VARIABLE} pattern1 = r'\$\{([^}]+)\}' for var_name in re.findall(pattern1, content): resolved_value = resolve_variable(var_name) content = content.replace(f"${{{var_name}}}", resolved_value) # Pattern pour $VARIABLE pattern2 = r'\$([A-Za-z_][A-Za-z0-9_]*)' for var_name in re.findall(pattern2, content): if f"${{{var_name}}}" not in content: # Éviter les doublons resolved_value = resolve_variable(var_name) content = content.replace(f"${var_name}", resolved_value) return content ``` ## đŸ›Ąïž SĂ©curitĂ© et protection ### Protection contre les attaques - **DĂ©pendances circulaires** : DĂ©tection et prĂ©vention automatiques - **Variables non dĂ©finies** : Conservation de la syntaxe originale - **Isolation** : Seul le fichier `.env` principal est utilisĂ© ### Exemples de protection ```bash # DĂ©pendance circulaire dĂ©tectĂ©e HOST=dev4.$DOMAIN DOMAIN=$HOST # RĂ©sultat : Conservation de la syntaxe HOST → dev4.$DOMAIN # Variable non rĂ©solue DOMAIN → $HOST # Variable non rĂ©solue ``` ## 📁 Structure des fichiers ### Fichier `.env` principal ```bash # storage/dev/.env DOMAIN=4nkweb.com HOST=dev4.$DOMAIN ROOT_HOST=$HOST ROOT_URL=https://$ROOT_HOST ROOT_DIR_LOGS=/home/debian/4NK_env/logs TOR_LOGS_DIR=$ROOT_DIR_LOGS/tor SDK_TOR_DATA_DIR=$ROOT_DIR_LOGS/sdk_tor ``` ### Fichiers de configuration ```bash # storage/dev/bitcoin/bitcoin.conf datadir=$ROOT_DIR_LOGS/bitcoin logdir=$ROOT_DIR_LOGS/bitcoin rpcbind=$HOST rpcport=8332 ``` ### RĂ©solution automatique ```bash # Contenu aprĂšs rĂ©solution (en mĂ©moire) datadir=/home/debian/4NK_env/logs/bitcoin logdir=/home/debian/4NK_env/logs/bitcoin rpcbind=dev4.4nkweb.com rpcport=8332 ``` ## 🔧 Configuration de l'API ### Initialisation ```python class SecureVaultAPI: def __init__(self): # Processeurs d'environnement par environnement self.env_processors = {} def _get_env_processor(self, env: str) -> EnvProcessor: if env not in self.env_processors: env_file = STORAGE_ROOT / env / '.env' self.env_processors[env] = EnvProcessor(env_file) return self.env_processors[env] ``` ### Utilisation dans les endpoints ```python @self.app.route('//', methods=['GET']) def serve_file(env: str, file_path: str): # Lecture du fichier file_content = self._read_file(env, file_path) # Traitement des variables d'environnement env_processor = self._get_env_processor(env) processed_content = env_processor.process_content(file_content) # Chiffrement du contenu traitĂ© encrypted_content, next_key = self._encrypt_with_user_key_and_next( processed_content, user_id, env ) return encrypted_content ``` ## đŸ§Ș Tests et validation ### Test de rĂ©solution ```python # Test des variables d'environnement env_processor = EnvProcessor(Path("storage/dev/.env")) # Test de rĂ©solution simple result = env_processor.process_content("Host: $HOST") assert result == "Host: dev4.4nkweb.com" # Test de rĂ©solution complexe result = env_processor.process_content("URL: $ROOT_URL/api") assert result == "URL: https://dev4.4nkweb.com/api" ``` ### Validation des dĂ©pendances ```python # Test de protection contre les boucles env_processor.process_content("$CIRCULAR_VAR") # RĂ©sultat : $CIRCULAR_VAR (conservĂ© tel quel) ``` ## 📊 Exemples concrets ### Configuration Bitcoin ```bash # Avant rĂ©solution datadir=$ROOT_DIR_LOGS/bitcoin logdir=$ROOT_DIR_LOGS/bitcoin rpcbind=$HOST rpcport=8332 # AprĂšs rĂ©solution (automatique) datadir=/home/debian/4NK_env/logs/bitcoin logdir=/home/debian/4NK_env/logs/bitcoin rpcbind=dev4.4nkweb.com rpcport=8332 ``` ### Configuration Tor ```bash # Avant rĂ©solution DataDirectory $SDK_TOR_DATA_DIR Log notice file $TOR_LOGS_DIR/tor.log SocksPort $HOST:9050 # AprĂšs rĂ©solution (automatique) DataDirectory /home/debian/4NK_env/logs/sdk_tor Log notice file /home/debian/4NK_env/logs/tor/tor.log SocksPort dev4.4nkweb.com:9050 ``` ## 🔍 Debugging et logs ### Activation des logs ```python import logging logging.basicConfig(level=logging.INFO) # Logs automatiques logger.info(f"Variables chargĂ©es depuis {env_file}: {len(variables)} variables") logger.info(f"Variable rĂ©solue: {var_name} = {resolved_value}") logger.warning(f"DĂ©pendance circulaire dĂ©tectĂ©e pour {var_name}") ``` ### Messages de debug ``` INFO: Variables chargĂ©es depuis storage/dev/.env: 15 variables INFO: Variable rĂ©solue: HOST = dev4.4nkweb.com INFO: Variable rĂ©solue: ROOT_URL = https://dev4.4nkweb.com WARNING: Variable non trouvĂ©e: UNDEFINED_VAR ``` ## 🌐 IntĂ©gration SDK ### RĂ©cupĂ©ration des fichiers traitĂ©s ```typescript // Le SDK reçoit automatiquement les fichiers avec variables rĂ©solues const file = await client.getFile('dev', 'bitcoin/bitcoin.conf'); console.log(file.content); // Variables dĂ©jĂ  rĂ©solues // VĂ©rification des variables rĂ©solues const hasVariables = file.content.includes('$'); console.log(`Variables rĂ©solues: ${!hasVariables}`); ``` ### Synchronisation locale ```typescript // Synchronisation avec variables rĂ©solues const syncResult = await client.syncLocalFiles({ environment: 'dev', localDir: '../confs' }); // Les fichiers dans confs/ contiennent les variables rĂ©solues console.log(`Fichiers synchronisĂ©s: ${syncResult.synced}`); ``` --- **Note** : Le traitement des variables d'environnement est entiĂšrement transparent pour l'utilisateur final. Les fichiers originaux dans `storage/` ne sont jamais modifiĂ©s, et toutes les rĂ©solutions se font en mĂ©moire lors de la rĂ©cupĂ©ration des fichiers.