diff --git a/TablePro/Core/Database/DatabaseDriver.swift b/TablePro/Core/Database/DatabaseDriver.swift index b06e781e1..d3d185cf6 100644 --- a/TablePro/Core/Database/DatabaseDriver.swift +++ b/TablePro/Core/Database/DatabaseDriver.swift @@ -336,7 +336,15 @@ enum DatabaseDriverFactory { private static func resolvePassword(for connection: DatabaseConnection) -> String { if connection.usePgpass { - return "" + let pgpassHost = connection.additionalFields["pgpassOriginalHost"] ?? connection.host + let pgpassPort = connection.additionalFields["pgpassOriginalPort"] + .flatMap(Int.init) ?? connection.port + return PgpassReader.resolve( + host: pgpassHost.isEmpty ? "localhost" : pgpassHost, + port: pgpassPort, + database: connection.database, + username: connection.username + ) ?? "" } return ConnectionStorage.shared.loadPassword(for: connection.id) ?? "" } diff --git a/TablePro/Core/Database/DatabaseManager.swift b/TablePro/Core/Database/DatabaseManager.swift index 530c3c794..ff947de43 100644 --- a/TablePro/Core/Database/DatabaseManager.swift +++ b/TablePro/Core/Database/DatabaseManager.swift @@ -440,6 +440,12 @@ final class DatabaseManager { tunnelSSL.clientKeyPath = "" } + var effectiveFields = connection.additionalFields + if connection.usePgpass { + effectiveFields["pgpassOriginalHost"] = connection.host + effectiveFields["pgpassOriginalPort"] = String(connection.port) + } + return DatabaseConnection( id: connection.id, name: connection.name, @@ -450,7 +456,7 @@ final class DatabaseManager { type: connection.type, sshConfig: SSHConfiguration(), sslConfig: tunnelSSL, - additionalFields: connection.additionalFields + additionalFields: effectiveFields ) }