applySafeConfigEnvironmentVariables function

void applySafeConfigEnvironmentVariables({
  1. required Map<String, String>? getGlobalConfigEnv(),
  2. required Map<String, String>? getSettingsForSourceEnv(
    1. String source
    ),
  3. required Map<String, String>? getAllSettingsEnv(),
  4. required bool isSettingSourceEnabled(
    1. String source
    ),
})

Apply environment variables from trusted sources.

In the Dart port this is a simplified version that demonstrates the flow. Callers should provide the settings retrieval callbacks.

Implementation

void applySafeConfigEnvironmentVariables({
  required Map<String, String>? Function() getGlobalConfigEnv,
  required Map<String, String>? Function(String source) getSettingsForSourceEnv,
  required Map<String, String>? Function() getAllSettingsEnv,
  required bool Function(String source) isSettingSourceEnabled,
}) {
  // Capture CCD spawn-env keys before any settings.env is applied (once).
  if (!_ccdSpawnEnvKeysInitialised) {
    _ccdSpawnEnvKeysInitialised = true;
    if (Platform.environment['MAGE_ENTRYPOINT'] == 'claude-desktop') {
      _ccdSpawnEnvKeys = Platform.environment.keys.toSet();
    }
  }

  // Global config
  final globalEnv = filterSettingsEnv(getGlobalConfigEnv());
  globalEnv.forEach((key, value) {
    Platform.environment[key] = value;
  });

  // Trusted sources (except policy)
  for (final source in _trustedSettingSources) {
    if (source == 'policySettings') continue;
    if (!isSettingSourceEnabled(source)) continue;
    final env = filterSettingsEnv(getSettingsForSourceEnv(source));
    env.forEach((key, value) {
      Platform.environment[key] = value;
    });
  }

  // Policy settings last
  final policyEnv = filterSettingsEnv(
    getSettingsForSourceEnv('policySettings'),
  );
  policyEnv.forEach((key, value) {
    Platform.environment[key] = value;
  });

  // Safe vars from merged settings
  final settingsEnv = filterSettingsEnv(getAllSettingsEnv());
  for (final entry in settingsEnv.entries) {
    if (safeEnvVars.contains(entry.key.toUpperCase())) {
      Platform.environment[entry.key] = entry.value;
    }
  }
}