|
|
|
@ -2,7 +2,7 @@ import * as plugins from './plugins.js';
|
|
|
|
|
|
|
|
|
|
export interface IWebdavClientOptions {
|
|
|
|
|
serverUrl: string;
|
|
|
|
|
authType: plugins.webdav.AuthType;
|
|
|
|
|
authType?: plugins.webdav.AuthType;
|
|
|
|
|
username?: string;
|
|
|
|
|
password?: string;
|
|
|
|
|
}
|
|
|
|
@ -11,7 +11,11 @@ export class WebdavClient {
|
|
|
|
|
wdClient: plugins.webdav.WebDAVClient;
|
|
|
|
|
constructor(optionsArg: IWebdavClientOptions) {
|
|
|
|
|
this.wdClient = plugins.webdav.createClient(optionsArg.serverUrl, {
|
|
|
|
|
authType: optionsArg.authType,
|
|
|
|
|
...optionsArg.authType ? {
|
|
|
|
|
authType: optionsArg.authType,
|
|
|
|
|
} : {
|
|
|
|
|
authType: plugins.webdav.AuthType.Password,
|
|
|
|
|
},
|
|
|
|
|
...(optionsArg.username
|
|
|
|
|
? {
|
|
|
|
|
username: optionsArg.username,
|
|
|
|
@ -30,6 +34,18 @@ export class WebdavClient {
|
|
|
|
|
return result as plugins.webdav.FileStat[];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public async getDirectoryAsSmartfileArray(pathArg: string): Promise<plugins.smartfile.SmartFile[]> {
|
|
|
|
|
const directoryListing = await this.listDirectory(pathArg);
|
|
|
|
|
const smartfileArray: plugins.smartfile.SmartFile[] = [];
|
|
|
|
|
for (const file of directoryListing) {
|
|
|
|
|
const fileContents = (await this.wdClient.getFileContents(file.filename, {
|
|
|
|
|
format: 'binary',
|
|
|
|
|
})) as Buffer;
|
|
|
|
|
smartfileArray.push(await plugins.smartfile.SmartFile.fromBuffer(file.filename, fileContents));
|
|
|
|
|
}
|
|
|
|
|
return smartfileArray;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public async ensureDirectory(path: string): Promise<void> {
|
|
|
|
|
console.log(`Ensuring directory at ${path}`);
|
|
|
|
|
const pathLevels = plugins.smartpath.get.pathLevels(path);
|
|
|
|
@ -96,7 +112,15 @@ export class WebdavClient {
|
|
|
|
|
await this.wdClient.moveFile(sourcePathArg, targetPathArg);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public async deleteDirectory(pathArg: string) {
|
|
|
|
|
public async deleteFile(pathArg: string, checkNotDirectory = true) {
|
|
|
|
|
const stat = (await this.wdClient.stat(pathArg)) as plugins.webdav.FileStat;
|
|
|
|
|
if (checkNotDirectory && stat.type === 'directory') {
|
|
|
|
|
throw new Error(`Cannot delete a directory using deleteFile method. Use deleteDirectory instead.`);
|
|
|
|
|
}
|
|
|
|
|
await this.wdClient.deleteFile(pathArg);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public async deleteDirectory(pathArg: string) {
|
|
|
|
|
await this.deleteFile(pathArg, false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|