Skip to content

Commit

Permalink
fixed path join for windows
Browse files Browse the repository at this point in the history
  • Loading branch information
larryrider committed Mar 14, 2024
1 parent 3b57d96 commit e594cb1
Show file tree
Hide file tree
Showing 5 changed files with 14 additions and 12 deletions.
10 changes: 5 additions & 5 deletions src/services/realms/drive-realm-manager.service.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import path from 'path';
import { DriveFileItem, DriveFolderItem } from '../../types/drive.types';
import { DriveFileRealmSchema, DriveFilesRealm } from './drive-files.realm';
import { DriveFolderRealmSchema, DriveFoldersRealm } from './drive-folders.realm';
import { WebDavUtils } from '../../utils/webdav.utils';

export class DriveRealmManager {
constructor(
Expand Down Expand Up @@ -40,23 +40,23 @@ export class DriveRealmManager {
const parentFolder = await this.driveFoldersRealm.findByParentId(parentId);

if (!parentFolder) {
return path.join('/', fileName);
return WebDavUtils.joinPath('/', fileName);
}

const parentPath = await this.buildRelativePathForFile(parentFolder.name, parentFolder.parent_id ?? null);

return path.join(parentPath, fileName);
return WebDavUtils.joinPath(parentPath, fileName);
}

async buildRelativePathForFolder(folderName: string, parentId: number | null): Promise<string> {
const parentFolder = await this.driveFoldersRealm.findByParentId(parentId);

if (!parentFolder) {
return path.join('/', folderName, '/');
return WebDavUtils.joinPath('/', folderName, '/');
}

const parentPath = await this.buildRelativePathForFolder(parentFolder.name, parentFolder.parent_id ?? null);

return path.join(parentPath, folderName, '/');
return WebDavUtils.joinPath(parentPath, folderName, '/');
}
}
4 changes: 3 additions & 1 deletion src/utils/webdav.utils.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
import { Request } from 'express';
import path from 'path';
import { WebDavRequestedResource } from '../types/webdav.types';

export class WebDavUtils {
static getHref(...pathComponents: string[]): string {
static joinPath(...pathComponents: string[]): string {
return path.posix.join(...pathComponents);
}

static getRequestedResource(req: Request): WebDavRequestedResource {
const decodedUrl = decodeURI(req.url);
const parsedPath = path.parse(decodedUrl);
Expand Down
4 changes: 2 additions & 2 deletions src/webdav/handlers/PROPFIND.handler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ export class PROPFINDRequestHandler implements WebDavMethodHandler {
const folderContent = await driveFolderService.getFolderContent(folderUuid);

const foldersXML = folderContent.folders.map((folder) => {
const folderRelativePath = WebDavUtils.getHref(relativePath, folder.plainName, '/');
const folderRelativePath = WebDavUtils.joinPath(relativePath, folder.plainName, '/');

return this.driveFolderItemToXMLNode(
{
Expand Down Expand Up @@ -114,7 +114,7 @@ export class PROPFINDRequestHandler implements WebDavMethodHandler {
);

const filesXML = folderContent.files.map((file) => {
const fileRelativePath = WebDavUtils.getHref(
const fileRelativePath = WebDavUtils.joinPath(
relativePath,
file.type ? `${file.plainName}.${file.type}` : file.plainName,
);
Expand Down
4 changes: 2 additions & 2 deletions test/services/realms/drive-realm-manager.service.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ describe('DriveRealmManager service', () => {

const relativePath = await sut.buildRelativePathForFolder('folderD', 1);

expect(relativePath).to.be.equal(path.join('/', 'folderA', 'folderB', 'folderC', 'folderD', '/'));
expect(relativePath).to.be.equal(path.posix.join('/', 'folderA', 'folderB', 'folderC', 'folderD', '/'));
});

it('When a file is created, should build the correct relative path', async () => {
Expand Down Expand Up @@ -124,6 +124,6 @@ describe('DriveRealmManager service', () => {

const relativePath = await sut.buildRelativePathForFile('file.png', 1);

expect(relativePath).to.be.equal(path.join('/', 'folderA', 'folderB', 'folderC', 'file.png'));
expect(relativePath).to.be.equal(path.posix.join('/', 'folderA', 'folderB', 'folderC', 'file.png'));
});
});
4 changes: 2 additions & 2 deletions test/utils/webdav.utils.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@ import { createWebDavRequestFixture } from '../fixtures/webdav.fixture';

describe('Webdav utils', () => {
it('When a list of path components are given, should generate a correct href', () => {
const href = WebDavUtils.getHref('/path', 'to', 'file');
const href = WebDavUtils.joinPath('/path', 'to', 'file');
expect(href).to.equal('/path/to/file');
});

it('When a list of path components are given, should generate a correct href and remove incorrect characters', () => {
const href = WebDavUtils.getHref('/path', 'to', 'folder/');
const href = WebDavUtils.joinPath('/path', 'to', 'folder/');
expect(href).to.equal('/path/to/folder/');
});

Expand Down

0 comments on commit e594cb1

Please sign in to comment.