@internxt/cli 1.6.1 → 1.6.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +410 -71
- package/dist/commands/add-cert.d.ts +1 -1
- package/dist/commands/add-cert.js +3 -3
- package/dist/commands/config.d.ts +7 -1
- package/dist/commands/config.js +36 -5
- package/dist/commands/create-folder.d.ts +2 -1
- package/dist/commands/create-folder.js +10 -7
- package/dist/commands/delete-permanently-file.d.ts +1 -0
- package/dist/commands/delete-permanently-folder.d.ts +1 -0
- package/dist/commands/download-file.d.ts +1 -0
- package/dist/commands/download-file.js +4 -2
- package/dist/commands/list.d.ts +1 -0
- package/dist/commands/list.js +2 -4
- package/dist/commands/login-legacy.d.ts +1 -0
- package/dist/commands/logs.js +3 -3
- package/dist/commands/move-file.d.ts +1 -1
- package/dist/commands/move-file.js +7 -21
- package/dist/commands/move-folder.d.ts +1 -1
- package/dist/commands/move-folder.js +7 -21
- package/dist/commands/rename-file.d.ts +1 -0
- package/dist/commands/rename-folder.d.ts +1 -0
- package/dist/commands/trash-clear.d.ts +1 -0
- package/dist/commands/trash-file.d.ts +1 -0
- package/dist/commands/trash-folder.d.ts +1 -0
- package/dist/commands/trash-restore-file.d.ts +1 -1
- package/dist/commands/trash-restore-file.js +7 -21
- package/dist/commands/trash-restore-folder.d.ts +1 -1
- package/dist/commands/trash-restore-folder.js +7 -21
- package/dist/commands/upload-file.d.ts +5 -6
- package/dist/commands/upload-file.js +77 -52
- package/dist/commands/upload-folder.d.ts +1 -0
- package/dist/commands/upload-folder.js +11 -6
- package/dist/commands/webdav-config.d.ts +19 -1
- package/dist/commands/webdav-config.js +81 -3
- package/dist/commands/webdav.d.ts +1 -1
- package/dist/commands/webdav.js +10 -5
- package/dist/commands/whoami.js +2 -1
- package/dist/commands/workspaces-list.d.ts +20 -0
- package/dist/commands/workspaces-list.js +67 -0
- package/dist/commands/workspaces-unset.d.ts +23 -0
- package/dist/commands/workspaces-unset.js +45 -0
- package/dist/commands/workspaces-use.d.ts +27 -0
- package/dist/commands/workspaces-use.js +113 -0
- package/dist/constants/configs.d.ts +13 -0
- package/dist/constants/configs.js +21 -0
- package/dist/hooks/prerun/auth_check.js +13 -4
- package/dist/services/auth.service.d.ts +5 -2
- package/dist/services/auth.service.js +68 -6
- package/dist/services/config.service.d.ts +1 -13
- package/dist/services/config.service.js +44 -41
- package/dist/services/crypto.service.d.ts +5 -0
- package/dist/services/crypto.service.js +43 -0
- package/dist/services/database/database.service.d.ts +9 -0
- package/dist/services/database/database.service.js +39 -0
- package/dist/services/database/drive-file/drive-file.attributes.d.ts +3 -6
- package/dist/services/database/drive-file/drive-file.domain.d.ts +3 -6
- package/dist/services/database/drive-file/drive-file.domain.js +1 -12
- package/dist/services/database/drive-file/drive-file.model.d.ts +15 -0
- package/dist/services/database/drive-file/drive-file.model.js +67 -0
- package/dist/services/database/drive-file/drive-file.repository.d.ts +11 -0
- package/dist/services/database/drive-file/drive-file.repository.js +63 -0
- package/dist/services/database/drive-folder/drive-folder.attributes.d.ts +3 -4
- package/dist/services/database/drive-folder/drive-folder.domain.d.ts +4 -5
- package/dist/services/database/drive-folder/drive-folder.domain.js +11 -15
- package/dist/services/database/drive-folder/drive-folder.model.d.ts +11 -0
- package/dist/services/database/drive-folder/drive-folder.model.js +51 -0
- package/dist/services/database/drive-folder/drive-folder.repository.d.ts +13 -0
- package/dist/services/database/drive-folder/drive-folder.repository.js +99 -0
- package/dist/services/drive/drive-file.service.d.ts +2 -0
- package/dist/services/drive/drive-file.service.js +71 -15
- package/dist/services/drive/drive-folder.service.d.ts +6 -1
- package/dist/services/drive/drive-folder.service.js +157 -31
- package/dist/services/drive/trash.service.d.ts +3 -0
- package/dist/services/drive/trash.service.js +52 -16
- package/dist/services/drive/workspace.service.d.ts +7 -0
- package/dist/services/drive/workspace.service.js +30 -0
- package/dist/services/keys.service.d.ts +7 -0
- package/dist/services/keys.service.js +55 -0
- package/dist/services/local-filesystem/local-filesystem.service.d.ts +2 -2
- package/dist/services/local-filesystem/local-filesystem.service.js +4 -4
- package/dist/services/network/download.service.d.ts +2 -2
- package/dist/services/network/download.service.js +2 -2
- package/dist/services/network/network-facade.service.d.ts +3 -7
- package/dist/services/network/network-facade.service.js +9 -11
- package/dist/services/network/upload/upload-facade.service.d.ts +1 -1
- package/dist/services/network/upload/upload-facade.service.js +15 -8
- package/dist/services/network/upload/upload-file.service.d.ts +5 -4
- package/dist/services/network/upload/upload-file.service.js +73 -41
- package/dist/services/network/upload/upload-folder.service.d.ts +2 -2
- package/dist/services/network/upload/upload-folder.service.js +15 -10
- package/dist/services/network/upload/upload.types.d.ts +13 -2
- package/dist/services/network/upload/upload.types.js +1 -1
- package/dist/services/sdk-manager.service.d.ts +11 -9
- package/dist/services/sdk-manager.service.js +29 -15
- package/dist/services/thumbnail.service.d.ts +19 -1
- package/dist/services/thumbnail.service.js +29 -2
- package/dist/services/universal-link.service.d.ts +3 -1
- package/dist/services/universal-link.service.js +15 -3
- package/dist/services/usage.service.d.ts +1 -2
- package/dist/services/usage.service.js +1 -1
- package/dist/services/validation.service.d.ts +5 -0
- package/dist/services/validation.service.js +36 -22
- package/dist/{webdav/services → services/webdav}/webdav-folder.service.d.ts +1 -7
- package/dist/{webdav/services → services/webdav}/webdav-folder.service.js +6 -10
- package/dist/types/command.types.d.ts +44 -1
- package/dist/types/command.types.js +29 -1
- package/dist/types/config.types.d.ts +1 -0
- package/dist/types/drive.types.d.ts +7 -6
- package/dist/types/network.types.d.ts +6 -0
- package/dist/utils/async.utils.d.ts +2 -1
- package/dist/utils/async.utils.js +13 -2
- package/dist/utils/cli.utils.d.ts +23 -15
- package/dist/utils/cli.utils.js +85 -21
- package/dist/utils/crypto.utils.d.ts +3 -1
- package/dist/utils/crypto.utils.js +15 -2
- package/dist/utils/database.utils.d.ts +11 -0
- package/dist/utils/database.utils.js +26 -0
- package/dist/utils/drive.utils.js +7 -10
- package/dist/utils/errors.utils.d.ts +4 -3
- package/dist/utils/errors.utils.js +16 -13
- package/dist/utils/format.utils.d.ts +1 -0
- package/dist/utils/format.utils.js +3 -0
- package/dist/utils/inquirer.utils.js +10 -1
- package/dist/utils/logger.utils.js +5 -5
- package/dist/utils/network.utils.js +17 -18
- package/dist/utils/path.utils.d.ts +7 -0
- package/dist/utils/path.utils.js +18 -0
- package/dist/utils/thumbnail.utils.d.ts +6 -20
- package/dist/utils/thumbnail.utils.js +20 -45
- package/dist/utils/webdav.utils.d.ts +4 -20
- package/dist/utils/webdav.utils.js +12 -14
- package/dist/utils/xml.utils.d.ts +1 -1
- package/dist/utils/xml.utils.js +1 -1
- package/dist/webdav/handlers/DELETE.handler.d.ts +0 -9
- package/dist/webdav/handlers/DELETE.handler.js +18 -16
- package/dist/webdav/handlers/GET.handler.d.ts +0 -13
- package/dist/webdav/handlers/GET.handler.js +6 -13
- package/dist/webdav/handlers/HEAD.handler.d.ts +0 -5
- package/dist/webdav/handlers/HEAD.handler.js +11 -23
- package/dist/webdav/handlers/MKCOL.handler.d.ts +0 -7
- package/dist/webdav/handlers/MKCOL.handler.js +5 -12
- package/dist/webdav/handlers/MOVE.handler.d.ts +0 -9
- package/dist/webdav/handlers/MOVE.handler.js +10 -16
- package/dist/webdav/handlers/PROPFIND.handler.d.ts +0 -7
- package/dist/webdav/handlers/PROPFIND.handler.js +7 -19
- package/dist/webdav/handlers/PUT.handler.d.ts +0 -15
- package/dist/webdav/handlers/PUT.handler.js +70 -57
- package/dist/webdav/index.js +6 -8
- package/dist/webdav/middewares/auth.middleware.d.ts +1 -2
- package/dist/webdav/middewares/auth.middleware.js +5 -4
- package/dist/webdav/middewares/errors.middleware.js +3 -3
- package/dist/webdav/middewares/webdav-auth.middleware.d.ts +3 -0
- package/dist/webdav/middewares/webdav-auth.middleware.js +44 -0
- package/dist/webdav/webdav-server.d.ts +3 -16
- package/dist/webdav/webdav-server.js +33 -91
- package/oclif.manifest.json +429 -6
- package/package.json +27 -22
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
import { WebDavRequestedResource } from '../types/webdav.types';
|
|
2
|
-
import { DriveFolderService } from '../services/drive/drive-folder.service';
|
|
3
|
-
import { DriveFileService } from '../services/drive/drive-file.service';
|
|
4
2
|
import { DriveFileItem, DriveFolderItem, DriveItem } from '../types/drive.types';
|
|
5
3
|
export declare class WebDavUtils {
|
|
6
4
|
static joinURL(...pathComponents: string[]): string;
|
|
@@ -8,22 +6,8 @@ export declare class WebDavUtils {
|
|
|
8
6
|
static decodeUrl(requestUrl: string, decodeUri?: boolean): string;
|
|
9
7
|
static normalizeFolderPath(path: string): string;
|
|
10
8
|
static getRequestedResource(requestUrl: string, decodeUri?: boolean): Promise<WebDavRequestedResource>;
|
|
11
|
-
static tryGetFileOrFolderMetadata(
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}): Promise<DriveItem | undefined>;
|
|
16
|
-
static getDriveFileFromResource({ url, driveFileService, }: {
|
|
17
|
-
url: string;
|
|
18
|
-
driveFileService: DriveFileService;
|
|
19
|
-
}): Promise<DriveFileItem | undefined>;
|
|
20
|
-
static getDriveFolderFromResource({ url, driveFolderService, }: {
|
|
21
|
-
url: string;
|
|
22
|
-
driveFolderService: DriveFolderService;
|
|
23
|
-
}): Promise<DriveFolderItem | undefined>;
|
|
24
|
-
static getDriveItemFromResource({ resource, driveFolderService, driveFileService, }: {
|
|
25
|
-
resource: WebDavRequestedResource;
|
|
26
|
-
driveFolderService: DriveFolderService;
|
|
27
|
-
driveFileService: DriveFileService;
|
|
28
|
-
}): Promise<DriveItem | undefined>;
|
|
9
|
+
static tryGetFileOrFolderMetadata(url: string): Promise<DriveItem | undefined>;
|
|
10
|
+
static getDriveFileFromResource(url: string): Promise<DriveFileItem | undefined>;
|
|
11
|
+
static getDriveFolderFromResource(url: string): Promise<DriveFolderItem | undefined>;
|
|
12
|
+
static getDriveItemFromResource(resource: WebDavRequestedResource): Promise<DriveItem | undefined>;
|
|
29
13
|
}
|
|
@@ -5,6 +5,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.WebDavUtils = void 0;
|
|
7
7
|
const node_path_1 = __importDefault(require("node:path"));
|
|
8
|
+
const drive_folder_service_1 = require("../services/drive/drive-folder.service");
|
|
9
|
+
const drive_file_service_1 = require("../services/drive/drive-file.service");
|
|
8
10
|
const logger_utils_1 = require("./logger.utils");
|
|
9
11
|
class WebDavUtils {
|
|
10
12
|
static joinURL(...pathComponents) {
|
|
@@ -44,43 +46,39 @@ class WebDavUtils {
|
|
|
44
46
|
parentPath,
|
|
45
47
|
};
|
|
46
48
|
}
|
|
47
|
-
static async tryGetFileOrFolderMetadata(
|
|
49
|
+
static async tryGetFileOrFolderMetadata(url) {
|
|
48
50
|
try {
|
|
49
|
-
return await
|
|
51
|
+
return await drive_file_service_1.DriveFileService.instance.getFileMetadataByPath(url);
|
|
50
52
|
}
|
|
51
53
|
catch {
|
|
52
|
-
return await
|
|
54
|
+
return await drive_folder_service_1.DriveFolderService.instance.getFolderMetadataByPath(url);
|
|
53
55
|
}
|
|
54
56
|
}
|
|
55
|
-
static async getDriveFileFromResource(
|
|
57
|
+
static async getDriveFileFromResource(url) {
|
|
56
58
|
try {
|
|
57
|
-
return await
|
|
59
|
+
return await drive_file_service_1.DriveFileService.instance.getFileMetadataByPath(url);
|
|
58
60
|
}
|
|
59
61
|
catch (err) {
|
|
60
62
|
logger_utils_1.webdavLogger.error('Exception while getting the file metadata by path', err);
|
|
61
63
|
}
|
|
62
64
|
}
|
|
63
|
-
static async getDriveFolderFromResource(
|
|
65
|
+
static async getDriveFolderFromResource(url) {
|
|
64
66
|
try {
|
|
65
|
-
return await
|
|
67
|
+
return await drive_folder_service_1.DriveFolderService.instance.getFolderMetadataByPath(url);
|
|
66
68
|
}
|
|
67
69
|
catch (err) {
|
|
68
70
|
logger_utils_1.webdavLogger.error('Exception while getting the folder metadata by path', err);
|
|
69
71
|
}
|
|
70
72
|
}
|
|
71
|
-
static async getDriveItemFromResource(
|
|
73
|
+
static async getDriveItemFromResource(resource) {
|
|
72
74
|
let item = undefined;
|
|
73
75
|
const isFolder = resource.url.endsWith('/');
|
|
74
76
|
try {
|
|
75
77
|
if (isFolder) {
|
|
76
|
-
item = await
|
|
78
|
+
item = await drive_folder_service_1.DriveFolderService.instance.getFolderMetadataByPath(resource.url);
|
|
77
79
|
}
|
|
78
80
|
else {
|
|
79
|
-
item = await this.tryGetFileOrFolderMetadata(
|
|
80
|
-
url: resource.url,
|
|
81
|
-
driveFileService,
|
|
82
|
-
driveFolderService,
|
|
83
|
-
});
|
|
81
|
+
item = await this.tryGetFileOrFolderMetadata(resource.url);
|
|
84
82
|
}
|
|
85
83
|
}
|
|
86
84
|
catch {
|
|
@@ -2,7 +2,7 @@ import { X2jOptions, XmlBuilderOptions } from '../types/fast-xml-parser.types';
|
|
|
2
2
|
export declare class XMLUtils {
|
|
3
3
|
static readonly DEFAULT_NAMESPACE_LETTER = "D";
|
|
4
4
|
static toJSON(xml: string, options?: X2jOptions): any;
|
|
5
|
-
static toXML(object: object, options
|
|
5
|
+
static toXML(object: object, options: XmlBuilderOptions): string;
|
|
6
6
|
static toWebDavXML(object: object, options: XmlBuilderOptions, rootObject?: string): string;
|
|
7
7
|
static addDefaultNamespace(key: string): string;
|
|
8
8
|
static encodeWebDavUri(uri: string): string;
|
package/dist/utils/xml.utils.js
CHANGED
|
@@ -8,7 +8,7 @@ class XMLUtils {
|
|
|
8
8
|
const parser = new fast_xml_parser_1.XMLParser(options);
|
|
9
9
|
return parser.parse(xml);
|
|
10
10
|
}
|
|
11
|
-
static toXML(object, options
|
|
11
|
+
static toXML(object, options) {
|
|
12
12
|
const builder = new fast_xml_parser_1.XMLBuilder(options);
|
|
13
13
|
return builder.build(object);
|
|
14
14
|
}
|
|
@@ -1,14 +1,5 @@
|
|
|
1
1
|
import { Request, Response } from 'express';
|
|
2
2
|
import { WebDavMethodHandler } from '../../types/webdav.types';
|
|
3
|
-
import { TrashService } from '../../services/drive/trash.service';
|
|
4
|
-
import { DriveFileService } from '../../services/drive/drive-file.service';
|
|
5
|
-
import { DriveFolderService } from '../../services/drive/drive-folder.service';
|
|
6
3
|
export declare class DELETERequestHandler implements WebDavMethodHandler {
|
|
7
|
-
private readonly dependencies;
|
|
8
|
-
constructor(dependencies: {
|
|
9
|
-
trashService: TrashService;
|
|
10
|
-
driveFileService: DriveFileService;
|
|
11
|
-
driveFolderService: DriveFolderService;
|
|
12
|
-
});
|
|
13
4
|
handle: (req: Request, res: Response) => Promise<void>;
|
|
14
5
|
}
|
|
@@ -2,32 +2,34 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DELETERequestHandler = void 0;
|
|
4
4
|
const webdav_utils_1 = require("../../utils/webdav.utils");
|
|
5
|
+
const trash_service_1 = require("../../services/drive/trash.service");
|
|
5
6
|
const logger_utils_1 = require("../../utils/logger.utils");
|
|
6
7
|
const errors_utils_1 = require("../../utils/errors.utils");
|
|
8
|
+
const config_service_1 = require("../../services/config.service");
|
|
9
|
+
const format_utils_1 = require("../../utils/format.utils");
|
|
7
10
|
class DELETERequestHandler {
|
|
8
|
-
dependencies;
|
|
9
|
-
constructor(dependencies) {
|
|
10
|
-
this.dependencies = dependencies;
|
|
11
|
-
}
|
|
12
11
|
handle = async (req, res) => {
|
|
13
|
-
const { driveFileService, driveFolderService, trashService } = this.dependencies;
|
|
14
12
|
const resource = await webdav_utils_1.WebDavUtils.getRequestedResource(req.url);
|
|
15
13
|
logger_utils_1.webdavLogger.info(`[DELETE] Request received for item at ${resource.url}`);
|
|
16
|
-
const driveItem = await webdav_utils_1.WebDavUtils.getDriveItemFromResource(
|
|
17
|
-
resource,
|
|
18
|
-
driveFolderService,
|
|
19
|
-
driveFileService: driveFileService,
|
|
20
|
-
});
|
|
14
|
+
const driveItem = await webdav_utils_1.WebDavUtils.getDriveItemFromResource(resource);
|
|
21
15
|
if (!driveItem) {
|
|
22
16
|
throw new errors_utils_1.NotFoundError(`Resource not found on Internxt Drive at ${resource.url}`);
|
|
23
17
|
}
|
|
24
|
-
|
|
25
|
-
await
|
|
26
|
-
|
|
27
|
-
|
|
18
|
+
const type = format_utils_1.FormatUtils.capitalizeFirstLetter(driveItem.itemType);
|
|
19
|
+
const configs = await config_service_1.ConfigService.instance.readWebdavConfig();
|
|
20
|
+
if (configs.deleteFilesPermanently) {
|
|
21
|
+
logger_utils_1.webdavLogger.info(`[DELETE] [${driveItem.uuid}] Deleting permanently ${driveItem.itemType}`);
|
|
22
|
+
await trash_service_1.TrashService.instance.deleteItemPermanently(driveItem.itemType, driveItem.uuid);
|
|
23
|
+
logger_utils_1.webdavLogger.info(`[DELETE] [${driveItem.uuid}] ${type} deleted permanently successfully`);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
logger_utils_1.webdavLogger.info(`[DELETE] [${driveItem.uuid}] Trashing ${driveItem.itemType}`);
|
|
27
|
+
await trash_service_1.TrashService.instance.trashItems({
|
|
28
|
+
items: [{ type: driveItem.itemType, uuid: driveItem.uuid }],
|
|
29
|
+
});
|
|
30
|
+
logger_utils_1.webdavLogger.info(`[DELETE] [${driveItem.uuid}] ${type} trashed successfully`);
|
|
31
|
+
}
|
|
28
32
|
res.status(204).send();
|
|
29
|
-
const type = driveItem.itemType.charAt(0).toUpperCase() + driveItem.itemType.substring(1);
|
|
30
|
-
logger_utils_1.webdavLogger.info(`[DELETE] [${driveItem.uuid}] ${type} trashed successfully`);
|
|
31
33
|
};
|
|
32
34
|
}
|
|
33
35
|
exports.DELETERequestHandler = DELETERequestHandler;
|
|
@@ -1,18 +1,5 @@
|
|
|
1
1
|
import { WebDavMethodHandler } from '../../types/webdav.types';
|
|
2
2
|
import { Request, Response } from 'express';
|
|
3
|
-
import { DriveFileService } from '../../services/drive/drive-file.service';
|
|
4
|
-
import { NetworkFacade } from '../../services/network/network-facade.service';
|
|
5
|
-
import { DownloadService } from '../../services/network/download.service';
|
|
6
|
-
import { CryptoService } from '../../services/crypto.service';
|
|
7
|
-
import { AuthService } from '../../services/auth.service';
|
|
8
3
|
export declare class GETRequestHandler implements WebDavMethodHandler {
|
|
9
|
-
private readonly dependencies;
|
|
10
|
-
constructor(dependencies: {
|
|
11
|
-
driveFileService: DriveFileService;
|
|
12
|
-
downloadService: DownloadService;
|
|
13
|
-
cryptoService: CryptoService;
|
|
14
|
-
authService: AuthService;
|
|
15
|
-
networkFacade: NetworkFacade;
|
|
16
|
-
});
|
|
17
4
|
handle: (req: Request, res: Response) => Promise<void>;
|
|
18
5
|
}
|
|
@@ -2,30 +2,22 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.GETRequestHandler = void 0;
|
|
4
4
|
const webdav_utils_1 = require("../../utils/webdav.utils");
|
|
5
|
+
const auth_service_1 = require("../../services/auth.service");
|
|
5
6
|
const errors_utils_1 = require("../../utils/errors.utils");
|
|
6
7
|
const logger_utils_1 = require("../../utils/logger.utils");
|
|
7
8
|
const network_utils_1 = require("../../utils/network.utils");
|
|
8
9
|
const command_types_1 = require("../../types/command.types");
|
|
10
|
+
const cli_utils_1 = require("../../utils/cli.utils");
|
|
9
11
|
class GETRequestHandler {
|
|
10
|
-
dependencies;
|
|
11
|
-
constructor(dependencies) {
|
|
12
|
-
this.dependencies = dependencies;
|
|
13
|
-
}
|
|
14
12
|
handle = async (req, res) => {
|
|
15
|
-
const { driveFileService, authService, networkFacade } = this.dependencies;
|
|
16
13
|
const resource = await webdav_utils_1.WebDavUtils.getRequestedResource(req.url);
|
|
17
|
-
if (resource.name.startsWith('._'))
|
|
18
|
-
throw new errors_utils_1.NotFoundError('File not found');
|
|
19
14
|
logger_utils_1.webdavLogger.info(`[GET] Request received item at ${resource.url}`);
|
|
20
|
-
const driveFile = await webdav_utils_1.WebDavUtils.getDriveFileFromResource(
|
|
21
|
-
url: resource.url,
|
|
22
|
-
driveFileService,
|
|
23
|
-
});
|
|
15
|
+
const driveFile = await webdav_utils_1.WebDavUtils.getDriveFileFromResource(resource.url);
|
|
24
16
|
if (!driveFile) {
|
|
25
17
|
throw new errors_utils_1.NotFoundError(`Resource not found on Internxt Drive at ${resource.url}, if trying to access a folder use PROPFIND instead.`);
|
|
26
18
|
}
|
|
27
19
|
logger_utils_1.webdavLogger.info(`[GET] [${driveFile.uuid}] Found Drive File`);
|
|
28
|
-
const { user } = await
|
|
20
|
+
const { user } = await auth_service_1.AuthService.instance.getAuthDetails();
|
|
29
21
|
logger_utils_1.webdavLogger.info(`[GET] [${driveFile.uuid}] Network ready for download`);
|
|
30
22
|
res.header('Content-Type', 'application/octet-stream');
|
|
31
23
|
const fileSize = driveFile.size ?? 0;
|
|
@@ -52,7 +44,8 @@ class GETRequestHandler {
|
|
|
52
44
|
if (!driveFile.fileId) {
|
|
53
45
|
throw new command_types_1.NotValidFileIdError();
|
|
54
46
|
}
|
|
55
|
-
const
|
|
47
|
+
const { networkFacade, bucket, mnemonic } = await cli_utils_1.CLIUtils.prepareNetwork(user);
|
|
48
|
+
const [executeDownload] = await networkFacade.downloadToStream(bucket, mnemonic, driveFile.fileId, contentLength, writable, rangeOptions);
|
|
56
49
|
logger_utils_1.webdavLogger.info(`[GET] [${driveFile.uuid}] Download prepared, executing...`);
|
|
57
50
|
res.status(200);
|
|
58
51
|
await executeDownload;
|
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
import { Request, Response } from 'express';
|
|
2
2
|
import { WebDavMethodHandler } from '../../types/webdav.types';
|
|
3
|
-
import { DriveFileService } from '../../services/drive/drive-file.service';
|
|
4
3
|
export declare class HEADRequestHandler implements WebDavMethodHandler {
|
|
5
|
-
private readonly dependencies;
|
|
6
|
-
constructor(dependencies: {
|
|
7
|
-
driveFileService: DriveFileService;
|
|
8
|
-
});
|
|
9
4
|
handle: (req: Request, res: Response) => Promise<void>;
|
|
10
5
|
}
|
|
@@ -6,41 +6,29 @@ const logger_utils_1 = require("../../utils/logger.utils");
|
|
|
6
6
|
const network_utils_1 = require("../../utils/network.utils");
|
|
7
7
|
const errors_utils_1 = require("../../utils/errors.utils");
|
|
8
8
|
class HEADRequestHandler {
|
|
9
|
-
dependencies;
|
|
10
|
-
constructor(dependencies) {
|
|
11
|
-
this.dependencies = dependencies;
|
|
12
|
-
}
|
|
13
9
|
handle = async (req, res) => {
|
|
14
|
-
const { driveFileService } = this.dependencies;
|
|
15
10
|
const resource = await webdav_utils_1.WebDavUtils.getRequestedResource(req.url);
|
|
16
|
-
logger_utils_1.webdavLogger.info(`[HEAD] Request received for
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
throw new errors_utils_1.NotFoundError(`Resource not found on Internxt Drive at ${resource.url}`);
|
|
24
|
-
}
|
|
25
|
-
logger_utils_1.webdavLogger.info(`[HEAD] [${driveFile.uuid}] Found Drive File`);
|
|
11
|
+
logger_utils_1.webdavLogger.info(`[HEAD] Request received for item at ${resource.url}`);
|
|
12
|
+
const driveItem = await webdav_utils_1.WebDavUtils.getDriveItemFromResource(resource);
|
|
13
|
+
if (!driveItem) {
|
|
14
|
+
throw new errors_utils_1.NotFoundError(`Resource not found on Internxt Drive at ${resource.url}`);
|
|
15
|
+
}
|
|
16
|
+
logger_utils_1.webdavLogger.info(`[HEAD] [${driveItem.uuid}] Found Drive item`);
|
|
17
|
+
if (driveItem.itemType === 'file') {
|
|
26
18
|
const range = req.headers['range'];
|
|
27
19
|
const rangeOptions = network_utils_1.NetworkUtils.parseRangeHeader({
|
|
28
20
|
range,
|
|
29
|
-
totalFileSize:
|
|
21
|
+
totalFileSize: driveItem.size,
|
|
30
22
|
});
|
|
31
|
-
let contentLength =
|
|
23
|
+
let contentLength = driveItem.size;
|
|
32
24
|
if (rangeOptions) {
|
|
33
|
-
logger_utils_1.webdavLogger.info(`[HEAD] [${
|
|
25
|
+
logger_utils_1.webdavLogger.info(`[HEAD] [${driveItem.uuid}] Range request received:`, { rangeOptions });
|
|
34
26
|
contentLength = rangeOptions.rangeSize;
|
|
35
27
|
}
|
|
36
28
|
res.header('Content-Type', 'application/octet-stream');
|
|
37
29
|
res.header('Content-length', contentLength.toString());
|
|
38
|
-
res.status(200).send();
|
|
39
|
-
}
|
|
40
|
-
catch {
|
|
41
|
-
res.header('Content-Type', 'application/octet-stream');
|
|
42
|
-
res.status(200).send();
|
|
43
30
|
}
|
|
31
|
+
res.status(200).send();
|
|
44
32
|
};
|
|
45
33
|
}
|
|
46
34
|
exports.HEADRequestHandler = HEADRequestHandler;
|
|
@@ -1,12 +1,5 @@
|
|
|
1
1
|
import { WebDavMethodHandler } from '../../types/webdav.types';
|
|
2
2
|
import { Request, Response } from 'express';
|
|
3
|
-
import { DriveFolderService } from '../../services/drive/drive-folder.service';
|
|
4
|
-
import { WebDavFolderService } from '../services/webdav-folder.service';
|
|
5
3
|
export declare class MKCOLRequestHandler implements WebDavMethodHandler {
|
|
6
|
-
private readonly dependencies;
|
|
7
|
-
constructor(dependencies: {
|
|
8
|
-
driveFolderService: DriveFolderService;
|
|
9
|
-
webDavFolderService: WebDavFolderService;
|
|
10
|
-
});
|
|
11
4
|
handle: (req: Request, res: Response) => Promise<void>;
|
|
12
5
|
}
|
|
@@ -4,28 +4,21 @@ exports.MKCOLRequestHandler = void 0;
|
|
|
4
4
|
const webdav_utils_1 = require("../../utils/webdav.utils");
|
|
5
5
|
const logger_utils_1 = require("../../utils/logger.utils");
|
|
6
6
|
const xml_utils_1 = require("../../utils/xml.utils");
|
|
7
|
+
const webdav_folder_service_1 = require("../../services/webdav/webdav-folder.service");
|
|
7
8
|
const errors_utils_1 = require("../../utils/errors.utils");
|
|
8
9
|
class MKCOLRequestHandler {
|
|
9
|
-
dependencies;
|
|
10
|
-
constructor(dependencies) {
|
|
11
|
-
this.dependencies = dependencies;
|
|
12
|
-
}
|
|
13
10
|
handle = async (req, res) => {
|
|
14
|
-
const { driveFolderService, webDavFolderService } = this.dependencies;
|
|
15
11
|
const resource = await webdav_utils_1.WebDavUtils.getRequestedResource(req.url);
|
|
16
12
|
logger_utils_1.webdavLogger.info(`[MKCOL] Request received for folder at ${resource.url}`);
|
|
17
|
-
const parentDriveFolderItem = (await
|
|
18
|
-
(await
|
|
19
|
-
const driveFolderItem = await webdav_utils_1.WebDavUtils.getDriveFolderFromResource(
|
|
20
|
-
url: resource.url,
|
|
21
|
-
driveFolderService,
|
|
22
|
-
});
|
|
13
|
+
const parentDriveFolderItem = (await webdav_folder_service_1.WebDavFolderService.instance.getDriveFolderItemFromPath(resource.parentPath)) ??
|
|
14
|
+
(await webdav_folder_service_1.WebDavFolderService.instance.createParentPathOrThrow(resource.parentPath));
|
|
15
|
+
const driveFolderItem = await webdav_utils_1.WebDavUtils.getDriveFolderFromResource(resource.url);
|
|
23
16
|
const folderAlreadyExists = !!driveFolderItem;
|
|
24
17
|
if (folderAlreadyExists) {
|
|
25
18
|
logger_utils_1.webdavLogger.info(`[MKCOL] ❌ Folder '${resource.url}' already exists`);
|
|
26
19
|
throw new errors_utils_1.MethodNotAllowed('Folder already exists');
|
|
27
20
|
}
|
|
28
|
-
const newFolder = await
|
|
21
|
+
const newFolder = await webdav_folder_service_1.WebDavFolderService.instance.createFolder({
|
|
29
22
|
folderName: resource.path.base,
|
|
30
23
|
parentFolderUuid: parentDriveFolderItem.uuid,
|
|
31
24
|
});
|
|
@@ -1,14 +1,5 @@
|
|
|
1
1
|
import { Request, Response } from 'express';
|
|
2
|
-
import { DriveFileService } from '../../services/drive/drive-file.service';
|
|
3
|
-
import { DriveFolderService } from '../../services/drive/drive-folder.service';
|
|
4
2
|
import { WebDavMethodHandler } from '../../types/webdav.types';
|
|
5
|
-
import { WebDavFolderService } from '../services/webdav-folder.service';
|
|
6
3
|
export declare class MOVERequestHandler implements WebDavMethodHandler {
|
|
7
|
-
private readonly dependencies;
|
|
8
|
-
constructor(dependencies: {
|
|
9
|
-
driveFolderService: DriveFolderService;
|
|
10
|
-
driveFileService: DriveFileService;
|
|
11
|
-
webDavFolderService: WebDavFolderService;
|
|
12
|
-
});
|
|
13
4
|
handle: (req: Request, res: Response) => Promise<void>;
|
|
14
5
|
}
|
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.MOVERequestHandler = void 0;
|
|
4
|
+
const drive_file_service_1 = require("../../services/drive/drive-file.service");
|
|
5
|
+
const drive_folder_service_1 = require("../../services/drive/drive-folder.service");
|
|
4
6
|
const errors_utils_1 = require("../../utils/errors.utils");
|
|
5
7
|
const logger_utils_1 = require("../../utils/logger.utils");
|
|
6
8
|
const webdav_utils_1 = require("../../utils/webdav.utils");
|
|
9
|
+
const webdav_folder_service_1 = require("../../services/webdav/webdav-folder.service");
|
|
7
10
|
class MOVERequestHandler {
|
|
8
|
-
dependencies;
|
|
9
|
-
constructor(dependencies) {
|
|
10
|
-
this.dependencies = dependencies;
|
|
11
|
-
}
|
|
12
11
|
handle = async (req, res) => {
|
|
13
|
-
const { driveFolderService, driveFileService, webDavFolderService } = this.dependencies;
|
|
14
12
|
const resource = await webdav_utils_1.WebDavUtils.getRequestedResource(req.url);
|
|
15
13
|
logger_utils_1.webdavLogger.info(`[MOVE] Request received for item at ${resource.url}`);
|
|
16
14
|
const destinationUrl = req.header('destination');
|
|
@@ -20,11 +18,7 @@ class MOVERequestHandler {
|
|
|
20
18
|
const destinationPath = webdav_utils_1.WebDavUtils.removeHostFromURL(destinationUrl);
|
|
21
19
|
const destinationResource = await webdav_utils_1.WebDavUtils.getRequestedResource(destinationPath);
|
|
22
20
|
logger_utils_1.webdavLogger.info('[MOVE] Destination resource found', { destinationResource });
|
|
23
|
-
const originalDriveItem = await webdav_utils_1.WebDavUtils.getDriveItemFromResource(
|
|
24
|
-
resource,
|
|
25
|
-
driveFolderService,
|
|
26
|
-
driveFileService,
|
|
27
|
-
});
|
|
21
|
+
const originalDriveItem = await webdav_utils_1.WebDavUtils.getDriveItemFromResource(resource);
|
|
28
22
|
if (!originalDriveItem) {
|
|
29
23
|
throw new errors_utils_1.NotFoundError(`Resource not found on Internxt Drive at ${resource.url}`);
|
|
30
24
|
}
|
|
@@ -33,7 +27,7 @@ class MOVERequestHandler {
|
|
|
33
27
|
with UUID ${originalDriveItem.uuid} to ${destinationResource.name}`);
|
|
34
28
|
if (originalDriveItem.itemType === 'folder') {
|
|
35
29
|
const folder = originalDriveItem;
|
|
36
|
-
await
|
|
30
|
+
await drive_folder_service_1.DriveFolderService.instance.renameFolder({
|
|
37
31
|
folderUuid: folder.uuid,
|
|
38
32
|
name: destinationResource.name,
|
|
39
33
|
});
|
|
@@ -42,7 +36,7 @@ class MOVERequestHandler {
|
|
|
42
36
|
const file = originalDriveItem;
|
|
43
37
|
const plainName = destinationResource.path.name;
|
|
44
38
|
const fileType = destinationResource.path.ext.replace('.', '');
|
|
45
|
-
await
|
|
39
|
+
await drive_file_service_1.DriveFileService.instance.renameFile(file.uuid, {
|
|
46
40
|
plainName: plainName,
|
|
47
41
|
type: fileType,
|
|
48
42
|
});
|
|
@@ -50,11 +44,11 @@ class MOVERequestHandler {
|
|
|
50
44
|
}
|
|
51
45
|
else {
|
|
52
46
|
logger_utils_1.webdavLogger.info(`[MOVE] Moving ${originalDriveItem.itemType} with UUID ${originalDriveItem.uuid} to ${destinationPath}`);
|
|
53
|
-
const destinationFolderItem = (await
|
|
54
|
-
(await
|
|
47
|
+
const destinationFolderItem = (await webdav_folder_service_1.WebDavFolderService.instance.getDriveFolderItemFromPath(destinationResource.parentPath)) ??
|
|
48
|
+
(await webdav_folder_service_1.WebDavFolderService.instance.createParentPathOrThrow(destinationResource.parentPath));
|
|
55
49
|
if (originalDriveItem.itemType === 'folder') {
|
|
56
50
|
const folder = originalDriveItem;
|
|
57
|
-
await
|
|
51
|
+
await drive_folder_service_1.DriveFolderService.instance.moveFolder(folder.uuid, {
|
|
58
52
|
destinationFolder: destinationFolderItem.uuid,
|
|
59
53
|
name: destinationResource.name,
|
|
60
54
|
});
|
|
@@ -63,7 +57,7 @@ class MOVERequestHandler {
|
|
|
63
57
|
const file = originalDriveItem;
|
|
64
58
|
const plainName = destinationResource.path.name;
|
|
65
59
|
const fileType = destinationResource.path.ext.replace('.', '');
|
|
66
|
-
await
|
|
60
|
+
await drive_file_service_1.DriveFileService.instance.moveFile(file.uuid, {
|
|
67
61
|
destinationFolder: destinationFolderItem.uuid,
|
|
68
62
|
name: plainName,
|
|
69
63
|
type: fileType,
|
|
@@ -1,13 +1,6 @@
|
|
|
1
1
|
import { WebDavMethodHandler } from '../../types/webdav.types';
|
|
2
|
-
import { DriveFolderService } from '../../services/drive/drive-folder.service';
|
|
3
|
-
import { DriveFileService } from '../../services/drive/drive-file.service';
|
|
4
2
|
import { Request, Response } from 'express';
|
|
5
3
|
export declare class PROPFINDRequestHandler implements WebDavMethodHandler {
|
|
6
|
-
private readonly dependencies;
|
|
7
|
-
constructor(dependencies: {
|
|
8
|
-
driveFolderService: DriveFolderService;
|
|
9
|
-
driveFileService: DriveFileService;
|
|
10
|
-
});
|
|
11
4
|
handle: (req: Request, res: Response) => Promise<void>;
|
|
12
5
|
private readonly getFileMetaXML;
|
|
13
6
|
private readonly getFolderContentXML;
|
|
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.PROPFINDRequestHandler = void 0;
|
|
7
7
|
const xml_utils_1 = require("../../utils/xml.utils");
|
|
8
|
+
const drive_folder_service_1 = require("../../services/drive/drive-folder.service");
|
|
8
9
|
const format_utils_1 = require("../../utils/format.utils");
|
|
9
10
|
const node_crypto_1 = require("node:crypto");
|
|
10
11
|
const mime_types_1 = __importDefault(require("mime-types"));
|
|
@@ -12,19 +13,10 @@ const webdav_utils_1 = require("../../utils/webdav.utils");
|
|
|
12
13
|
const logger_utils_1 = require("../../utils/logger.utils");
|
|
13
14
|
const usage_service_1 = require("../../services/usage.service");
|
|
14
15
|
class PROPFINDRequestHandler {
|
|
15
|
-
dependencies;
|
|
16
|
-
constructor(dependencies) {
|
|
17
|
-
this.dependencies = dependencies;
|
|
18
|
-
}
|
|
19
16
|
handle = async (req, res) => {
|
|
20
|
-
const { driveFolderService, driveFileService } = this.dependencies;
|
|
21
17
|
const resource = await webdav_utils_1.WebDavUtils.getRequestedResource(req.url);
|
|
22
18
|
logger_utils_1.webdavLogger.info(`[PROPFIND] Request received for item at ${resource.url}`);
|
|
23
|
-
const driveItem = await webdav_utils_1.WebDavUtils.getDriveItemFromResource(
|
|
24
|
-
resource,
|
|
25
|
-
driveFolderService,
|
|
26
|
-
driveFileService,
|
|
27
|
-
});
|
|
19
|
+
const driveItem = await webdav_utils_1.WebDavUtils.getDriveItemFromResource(resource);
|
|
28
20
|
if (!driveItem) {
|
|
29
21
|
res.status(404).send();
|
|
30
22
|
return;
|
|
@@ -83,8 +75,7 @@ class PROPFINDRequestHandler {
|
|
|
83
75
|
return xml;
|
|
84
76
|
};
|
|
85
77
|
getFolderChildsXMLNode = async (relativePath, folderUuid) => {
|
|
86
|
-
const
|
|
87
|
-
const folderContent = await driveFolderService.getFolderContent(folderUuid);
|
|
78
|
+
const folderContent = await drive_folder_service_1.DriveFolderService.instance.getFolderContent(folderUuid);
|
|
88
79
|
const foldersXML = folderContent.folders.map((folder) => {
|
|
89
80
|
const folderRelativePath = webdav_utils_1.WebDavUtils.joinURL(relativePath, folder.plainName, '/');
|
|
90
81
|
return this.driveFolderItemToXMLNode({
|
|
@@ -94,11 +85,10 @@ class PROPFINDRequestHandler {
|
|
|
94
85
|
status: folder.deleted || folder.removed ? 'TRASHED' : 'EXISTS',
|
|
95
86
|
createdAt: new Date(folder.createdAt),
|
|
96
87
|
updatedAt: new Date(folder.updatedAt),
|
|
97
|
-
|
|
98
|
-
|
|
88
|
+
creationTime: new Date(folder.creationTime),
|
|
89
|
+
modificationTime: new Date(folder.modificationTime),
|
|
99
90
|
uuid: folder.uuid,
|
|
100
|
-
|
|
101
|
-
parentUuid: null,
|
|
91
|
+
parentUuid: folder.parentUuid,
|
|
102
92
|
}, folderRelativePath);
|
|
103
93
|
});
|
|
104
94
|
const filesXML = folderContent.files.map((file) => {
|
|
@@ -107,12 +97,10 @@ class PROPFINDRequestHandler {
|
|
|
107
97
|
itemType: 'file',
|
|
108
98
|
name: file.plainName,
|
|
109
99
|
bucket: file.bucket,
|
|
110
|
-
id: file.id,
|
|
111
100
|
fileId: file.fileId,
|
|
112
101
|
uuid: file.uuid,
|
|
113
102
|
type: file.type,
|
|
114
103
|
status: file.status,
|
|
115
|
-
folderId: file.folderId,
|
|
116
104
|
folderUuid: file.folderUuid,
|
|
117
105
|
size: Number(file.size),
|
|
118
106
|
creationTime: new Date(file.creationTime),
|
|
@@ -124,7 +112,7 @@ class PROPFINDRequestHandler {
|
|
|
124
112
|
return foldersXML.concat(filesXML);
|
|
125
113
|
};
|
|
126
114
|
driveFolderRootStatsToXMLNode = async (driveFolderItem, relativePath) => {
|
|
127
|
-
const totalUsage =
|
|
115
|
+
const totalUsage = await usage_service_1.UsageService.instance.fetchUsage();
|
|
128
116
|
const spaceLimit = await usage_service_1.UsageService.instance.fetchSpaceLimit();
|
|
129
117
|
const driveFolderXML = {
|
|
130
118
|
[xml_utils_1.XMLUtils.addDefaultNamespace('href')]: xml_utils_1.XMLUtils.encodeWebDavUri(relativePath),
|
|
@@ -1,20 +1,5 @@
|
|
|
1
1
|
import { Request, Response } from 'express';
|
|
2
|
-
import { DriveFileService } from '../../services/drive/drive-file.service';
|
|
3
|
-
import { NetworkFacade } from '../../services/network/network-facade.service';
|
|
4
|
-
import { AuthService } from '../../services/auth.service';
|
|
5
2
|
import { WebDavMethodHandler } from '../../types/webdav.types';
|
|
6
|
-
import { TrashService } from '../../services/drive/trash.service';
|
|
7
|
-
import { WebDavFolderService } from '../services/webdav-folder.service';
|
|
8
|
-
import { DriveFolderService } from '../../services/drive/drive-folder.service';
|
|
9
3
|
export declare class PUTRequestHandler implements WebDavMethodHandler {
|
|
10
|
-
private readonly dependencies;
|
|
11
|
-
constructor(dependencies: {
|
|
12
|
-
driveFileService: DriveFileService;
|
|
13
|
-
driveFolderService: DriveFolderService;
|
|
14
|
-
webDavFolderService: WebDavFolderService;
|
|
15
|
-
trashService: TrashService;
|
|
16
|
-
authService: AuthService;
|
|
17
|
-
networkFacade: NetworkFacade;
|
|
18
|
-
});
|
|
19
4
|
handle: (req: Request, res: Response) => Promise<void>;
|
|
20
5
|
}
|