*/ private array $connections = []; public function editable(): bool { return app()->environment(['local', 'development', 'testing']) || (bool) config('upstreams.stored_configuration.enabled', false); } public function find(string $source): ?DatabaseConnection { if (! $this->editable()) { return null; } if (array_key_exists($source, $this->connections)) { return $this->connections[$source]; } if (! Schema::hasTable('system_database_connections')) { return $this->connections[$source] = null; } $this->connections[$source] = DatabaseConnection::query() ->where('company_id', self::SYSTEM_COMPANY_ID) ->where('source_key', $source) ->first(); return $this->connections[$source]; } public function forget(string $source): void { unset($this->connections[$source]); } public function value(string $source, string $path, mixed $default = null): mixed { $connection = $this->find($source); if (! $connection) { return $default; } return match (trim($path, '.')) { 'enabled' => $connection->enabled, 'allowed_scopes' => $connection->allowed_scopes ?? [], 'connection.host' => $connection->host, 'connection.port' => $connection->port, 'connection.database' => $connection->database_name, 'connection.username' => $connection->username, 'connection.password' => $connection->password, 'connection.odbc_driver' => $connection->odbc_driver, 'connection.tds_version' => $connection->tds_version, 'connection.connect_timeout' => $connection->connect_timeout, 'connection.query_timeout' => $connection->query_timeout, default => $default, }; } }