From 8998bbff2737864fd58974d0ffdcce452634f817 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Wed, 4 Jun 2025 12:51:21 +0800 Subject: [PATCH] refactor(BackupManager, WebDav): streamline WebDAV client initialization and enhance directory listing functionality (#6784) Co-authored-by: beyondkmp --- src/main/services/BackupManager.ts | 10 +++------- src/main/services/WebDav.ts | 17 ++++++++++++++++- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/main/services/BackupManager.ts b/src/main/services/BackupManager.ts index 18dbd00422..63a3303c0a 100644 --- a/src/main/services/BackupManager.ts +++ b/src/main/services/BackupManager.ts @@ -7,7 +7,7 @@ import Logger from 'electron-log' import * as fs from 'fs-extra' import StreamZip from 'node-stream-zip' import * as path from 'path' -import { createClient, CreateDirectoryOptions, FileStat } from 'webdav' +import { CreateDirectoryOptions, FileStat } from 'webdav' import WebDav from './WebDav' import { windowService } from './WindowService' @@ -340,12 +340,8 @@ class BackupManager { listWebdavFiles = async (_: Electron.IpcMainInvokeEvent, config: WebDavConfig) => { try { - const client = createClient(config.webdavHost, { - username: config.webdavUser, - password: config.webdavPass - }) - - const response = await client.getDirectoryContents(config.webdavPath) + const client = new WebDav(config) + const response = await client.getDirectoryContents() const files = Array.isArray(response) ? response : response.data return files diff --git a/src/main/services/WebDav.ts b/src/main/services/WebDav.ts index e78dfdee7e..ad1a127b3a 100644 --- a/src/main/services/WebDav.ts +++ b/src/main/services/WebDav.ts @@ -1,6 +1,7 @@ import { WebDavConfig } from '@types' import Logger from 'electron-log' import Stream from 'stream' +import https from 'https' import { BufferLike, createClient, @@ -20,7 +21,8 @@ export default class WebDav { username: params.webdavUser, password: params.webdavPass, maxBodyLength: Infinity, - maxContentLength: Infinity + maxContentLength: Infinity, + httpsAgent: new https.Agent({ rejectUnauthorized: false }) }) this.putFileContents = this.putFileContents.bind(this) @@ -74,6 +76,19 @@ export default class WebDav { } } + public getDirectoryContents = async () => { + if (!this.instance) { + throw new Error('WebDAV client not initialized') + } + + try { + return await this.instance.getDirectoryContents(this.webdavPath) + } catch (error) { + Logger.error('[WebDAV] Error getting directory contents on WebDAV:', error) + throw error + } + } + public checkConnection = async () => { if (!this.instance) { throw new Error('WebDAV client not initialized')