This commit is contained in:
Chandan P 2026-08-15 13:39:51 +02:00 committed by GitHub
commit 802928fb43
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 47 additions and 1 deletions

View file

@ -565,6 +565,48 @@ describe(DatabaseBackupService.name, () => {
`);
});
});
describe('using an unparsable URL', () => {
beforeEach(() => {
// unix domain socket URLs cannot be parsed by `new URL`
const dbUrl = 'socket://mypg:mypwd@/var/run/postgresql?db=myimmich';
const configMock = {
getEnv: () => ({ database: { config: { connectionType: 'url', url: dbUrl }, skipMigrations: false } }),
getWorker: () => ImmichWorker.Api,
isDev: () => false,
} as unknown as any;
sut = new DatabaseBackupService(
mocks.logger as never,
mocks.storage as never,
configMock as never,
mocks.systemMetadata as never,
mocks.process,
mocks.database as never,
mocks.user as never,
mocks.cron as never,
mocks.job as never,
void 0 as never,
);
});
it('should fallback to reasonable defaults', async () => {
await expect(sut.buildPostgresLaunchArguments('pg_dump')).resolves.toMatchInlineSnapshot(`
{
"args": [
"socket://mypg:mypwd@/var/run/postgresql?db=myimmich",
"--clean",
"--if-exists",
],
"bin": "/usr/lib/postgresql/14/bin/pg_dump",
"databaseMajorVersion": 14,
"databasePassword": "",
"databaseUsername": "postgres",
"databaseVersion": "14.10 (Debian 14.10-1.pgdg120+1)",
}
`);
});
});
});
describe('uploadBackup', () => {

View file

@ -129,6 +129,7 @@ export class DatabaseBackupService {
const args: string[] = [];
let databaseUsername;
let databasePassword;
if (isUrlConnection) {
if (bin !== 'pg_dump') {
@ -142,16 +143,19 @@ export class DatabaseBackupService {
parsedUrl.searchParams.delete('uselibpqcompat');
databaseUsername = parsedUrl.username || parsedUrl.searchParams.get('user');
databasePassword = parsedUrl.password;
url = parsedUrl.href;
}
// assume typical values if we can't parse URL or not present
databaseUsername ??= 'postgres';
databasePassword ??= '';
args.push(url);
} else {
databaseUsername = databaseConfig.username;
databasePassword = databaseConfig.password;
args.push(
'--username',
@ -214,7 +218,7 @@ export class DatabaseBackupService {
bin: `/usr/lib/postgresql/${databaseMajorVersion}/bin/${bin}`,
args,
databaseUsername,
databasePassword: isUrlConnection ? new URL(databaseConfig.url).password : databaseConfig.password,
databasePassword,
databaseVersion,
databaseMajorVersion,
};