'configurationChanged', 'envsUpdated' => 'configurationChanged', ...$this->teamChannelListeners([ 'ApplicationConfigurationChanged' => 'configurationChanged', ]), ]; } public function mount(): void { $this->configurationChanged(); } public function render(): View { return view('livewire.project.shared.configuration-checker'); } /** * Members must never see environment variable values or Compose content, so redact * those changes before they are serialized to the browser. * * @param array> $changes * @return array> */ private function redactHiddenChanges(array $changes, bool $redact): array { if (! $redact) { return $changes; } return collect($changes) ->map(function (array $change): array { $isHidden = data_get($change, 'section') === 'environment' || str((string) data_get($change, 'key'))->afterLast('.')->value() === 'docker_compose_raw'; if (! $isHidden) { return $change; } $change['old_display_value'] = data_get($change, 'old_display_value') === '-' ? '-' : '••••••••'; $change['new_display_value'] = data_get($change, 'new_display_value') === '-' ? '-' : '••••••••'; $change['old_full_value'] = null; $change['new_full_value'] = null; $change['expandable'] = false; $change['display_summary'] = data_get($change, 'type') === 'changed' ? 'Changed' : null; return $change; }) ->all(); } public function configurationChanged(): void { $this->loadConfigurationState(); } private function loadConfigurationState(): void { $this->resource->refresh(); if ($this->resource instanceof Service) { $missingVariables = $this->resource->missingRequiredEnvironmentVariables(); $this->missingRequiredEnvironmentVariableCount = $missingVariables->count(); $this->missingRequiredEnvironmentVariableNames = $missingVariables->pluck('key')->all(); } if ($this->resource instanceof Application) { $diff = $this->resource->pendingDeploymentConfigurationDiff(); $this->isConfigurationChanged = $diff->isChanged(); $array = $diff->toArray(); // Fail closed: only owners/admins may see unlocked env values. $teamId = $this->resource->team()?->id; $redactEnvironment = is_null($teamId) || ! (bool) auth()->user()?->isAdminOfTeam($teamId); $array['changes'] = $this->redactHiddenChanges($array['changes'] ?? [], $redactEnvironment); $this->configurationDiff = $array; return; } $this->isConfigurationChanged = $this->resource->isConfigurationChanged(); $this->configurationDiff = []; } }