ftpd-lite 1.0.5 → 1.0.10

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.
@@ -1,120 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.fileTransfer = exports.FileTransfer = void 0;
37
- const path = __importStar(require("path"));
38
- const types_1 = require("./types");
39
- const userManager_1 = require("./userManager");
40
- class FileTransfer {
41
- constructor() {
42
- this.userManager = null;
43
- }
44
- getUserManager() {
45
- if (!this.userManager) {
46
- this.userManager = global.__userManager ||
47
- new userManager_1.UserManager(path.join(__dirname, '../users.json'));
48
- }
49
- return this.userManager;
50
- }
51
- checkPermission(user, permission) {
52
- return true;
53
- }
54
- async uploadFile(conn, remotePath, data) {
55
- console.log(`[FileTransfer] File upload: ${conn.user || 'unknown'} - ${remotePath}`);
56
- if (!this.userManager.checkPermission(conn.user || '', 'write')) {
57
- conn.lastReply = types_1.ReplyCode.NO_PERMISSION;
58
- conn.lastMessage = `Permission denied: upload`;
59
- }
60
- conn.lastReply = types_1.ReplyCode.CMD_ERR;
61
- conn.lastMessage = `Command not yet implemented: STOR`;
62
- }
63
- async downloadFile(conn, remotePath) {
64
- console.log(`[FileTransfer] File download: ${conn.user || 'unknown'} - ${remotePath}`);
65
- if (!this.userManager.checkPermission(conn.user || '', 'read')) {
66
- conn.lastReply = types_1.ReplyCode.NO_PERMISSION;
67
- conn.lastMessage = `Permission denied: download`;
68
- }
69
- conn.lastReply = types_1.ReplyCode.CMD_ERR;
70
- conn.lastMessage = `Command not yet implemented: RETR`;
71
- }
72
- async deleteFile(conn, remotePath) {
73
- console.log(`[FileTransfer] File delete: ${conn.user || 'unknown'} - ${remotePath}`);
74
- if (!this.userManager.checkPermission(conn.user || '', 'delete')) {
75
- conn.lastReply = types_1.ReplyCode.NO_PERMISSION;
76
- conn.lastMessage = `Permission denied: delete`;
77
- }
78
- conn.lastReply = types_1.ReplyCode.CMD_ERR;
79
- conn.lastMessage = `Command not yet implemented: DELE`;
80
- }
81
- async createDirectory(conn, remotePath) {
82
- console.log(`[FileTransfer] Directory creation: ${conn.user || 'unknown'} - ${remotePath}`);
83
- if (!this.userManager.checkPermission(conn.user || '', 'mkd')) {
84
- conn.lastReply = types_1.ReplyCode.NO_PERMISSION;
85
- conn.lastMessage = `Permission denied: create directory`;
86
- }
87
- conn.lastReply = types_1.ReplyCode.CMD_ERR;
88
- conn.lastMessage = `Command not yet implemented: MKD`;
89
- }
90
- async removeDirectory(conn, remotePath) {
91
- console.log(`[FileTransfer] Directory removal: ${conn.user || 'unknown'} - ${remotePath}`);
92
- if (!this.userManager.checkPermission(conn.user || '', 'rmdir')) {
93
- conn.lastReply = types_1.ReplyCode.NO_PERMISSION;
94
- conn.lastMessage = `Permission denied: remove directory`;
95
- }
96
- conn.lastReply = types_1.ReplyCode.CMD_ERR;
97
- conn.lastMessage = `Command not yet implemented: RMD`;
98
- }
99
- async renameFile(conn, oldPath, newPath) {
100
- console.log(`[FileTransfer] File rename: ${conn.user || 'unknown'} - ${oldPath} -> ${newPath}`);
101
- if (!this.userManager.checkPermission(conn.user || '', 'rename')) {
102
- conn.lastReply = types_1.ReplyCode.NO_PERMISSION;
103
- conn.lastMessage = `Permission denied: rename`;
104
- }
105
- conn.lastReply = types_1.ReplyCode.CMD_ERR;
106
- conn.lastMessage = `Command not yet implemented: RNFR/RNTO`;
107
- }
108
- async changeFileMode(conn, remotePath, mode) {
109
- console.log(`[FileTransfer] File permissions change: ${conn.user || 'unknown'} - ${remotePath}`);
110
- if (!this.userManager.checkPermission(conn.user || '', 'chmod')) {
111
- conn.lastReply = types_1.ReplyCode.NO_PERMISSION;
112
- conn.lastMessage = `Permission denied: chmod`;
113
- }
114
- conn.lastReply = types_1.ReplyCode.CMD_ERR;
115
- conn.lastMessage = `Command not yet implemented: CHMOD`;
116
- }
117
- }
118
- exports.FileTransfer = FileTransfer;
119
- exports.fileTransfer = new FileTransfer();
120
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZVRyYW5zZmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2ZpbGVUcmFuc2Zlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxNQUFZLElBQUksaUNBQWE7QUFDN0IsbUNBQW1EO0FBQ25ELCtDQUE0QztBQUs1QztJQUdFO1FBRUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFXLENBQUM7SUFDakMsQ0FBQztJQUtPLGNBQWM7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUV0QixJQUFJLENBQUMsV0FBVyxHQUFJLE1BQWMsQ0FBQyxhQUFhO2dCQUM5QyxJQUFJLHlCQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQztRQUMzRCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFLTyxlQUFlLENBQUMsSUFBWSxFQUFFLFVBQWtCO1FBRXRELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUtNLEtBQUssQ0FBQyxVQUFVLENBQ3JCLElBQW1CLEVBQ25CLFVBQWtCLEVBQ2xCLElBQVk7UUFFWixPQUFPLENBQUMsR0FBRyxDQUFDLCtCQUErQixJQUFJLENBQUMsSUFBSSxJQUFJLFNBQVMsTUFBTSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBR3JGLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ2hFLElBQUksQ0FBQyxTQUFTLEdBQUcsaUJBQVMsQ0FBQyxhQUFhLENBQUM7WUFDekMsSUFBSSxDQUFDLFdBQVcsR0FBRywyQkFBMkIsQ0FBQztRQUNqRCxDQUFDO1FBR0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxpQkFBUyxDQUFDLE9BQU8sQ0FBQztRQUNuQyxJQUFJLENBQUMsV0FBVyxHQUFHLG1DQUFtQyxDQUFDO0lBQ3pELENBQUM7SUFLTSxLQUFLLENBQUMsWUFBWSxDQUN2QixJQUFtQixFQUNuQixVQUFrQjtRQUVsQixPQUFPLENBQUMsR0FBRyxDQUFDLGlDQUFpQyxJQUFJLENBQUMsSUFBSSxJQUFJLFNBQVMsTUFBTSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBR3ZGLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQy9ELElBQUksQ0FBQyxTQUFTLEdBQUcsaUJBQVMsQ0FBQyxhQUFhLENBQUM7WUFDekMsSUFBSSxDQUFDLFdBQVcsR0FBRyw2QkFBNkIsQ0FBQztRQUNuRCxDQUFDO1FBR0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxpQkFBUyxDQUFDLE9BQU8sQ0FBQztRQUNuQyxJQUFJLENBQUMsV0FBVyxHQUFHLG1DQUFtQyxDQUFDO0lBQ3pELENBQUM7SUFLTSxLQUFLLENBQUMsVUFBVSxDQUNyQixJQUFtQixFQUNuQixVQUFrQjtRQUVsQixPQUFPLENBQUMsR0FBRyxDQUFDLCtCQUErQixJQUFJLENBQUMsSUFBSSxJQUFJLFNBQVMsTUFBTSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBR3JGLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ2pFLElBQUksQ0FBQyxTQUFTLEdBQUcsaUJBQVMsQ0FBQyxhQUFhLENBQUM7WUFDekMsSUFBSSxDQUFDLFdBQVcsR0FBRywyQkFBMkIsQ0FBQztRQUNqRCxDQUFDO1FBR0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxpQkFBUyxDQUFDLE9BQU8sQ0FBQztRQUNuQyxJQUFJLENBQUMsV0FBVyxHQUFHLG1DQUFtQyxDQUFDO0lBQ3pELENBQUM7SUFLTSxLQUFLLENBQUMsZUFBZSxDQUMxQixJQUFtQixFQUNuQixVQUFrQjtRQUVsQixPQUFPLENBQUMsR0FBRyxDQUFDLHNDQUFzQyxJQUFJLENBQUMsSUFBSSxJQUFJLFNBQVMsTUFBTSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBRzVGLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzlELElBQUksQ0FBQyxTQUFTLEdBQUcsaUJBQVMsQ0FBQyxhQUFhLENBQUM7WUFDekMsSUFBSSxDQUFDLFdBQVcsR0FBRyxxQ0FBcUMsQ0FBQztRQUMzRCxDQUFDO1FBR0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxpQkFBUyxDQUFDLE9BQU8sQ0FBQztRQUNuQyxJQUFJLENBQUMsV0FBVyxHQUFHLGtDQUFrQyxDQUFDO0lBQ3hELENBQUM7SUFLTSxLQUFLLENBQUMsZUFBZSxDQUMxQixJQUFtQixFQUNuQixVQUFrQjtRQUVsQixPQUFPLENBQUMsR0FBRyxDQUFDLHFDQUFxQyxJQUFJLENBQUMsSUFBSSxJQUFJLFNBQVMsTUFBTSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBRzNGLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ2hFLElBQUksQ0FBQyxTQUFTLEdBQUcsaUJBQVMsQ0FBQyxhQUFhLENBQUM7WUFDekMsSUFBSSxDQUFDLFdBQVcsR0FBRyxxQ0FBcUMsQ0FBQztRQUMzRCxDQUFDO1FBR0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxpQkFBUyxDQUFDLE9BQU8sQ0FBQztRQUNuQyxJQUFJLENBQUMsV0FBVyxHQUFHLGtDQUFrQyxDQUFDO0lBQ3hELENBQUM7SUFLTSxLQUFLLENBQUMsVUFBVSxDQUNyQixJQUFtQixFQUNuQixPQUFlLEVBQ2YsT0FBZTtRQUVmLE9BQU8sQ0FBQyxHQUFHLENBQUMsK0JBQStCLElBQUksQ0FBQyxJQUFJLElBQUksU0FBUyxNQUFNLE9BQU8sT0FBTyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBR2hHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ2pFLElBQUksQ0FBQyxTQUFTLEdBQUcsaUJBQVMsQ0FBQyxhQUFhLENBQUM7WUFDekMsSUFBSSxDQUFDLFdBQVcsR0FBRywyQkFBMkIsQ0FBQztRQUNqRCxDQUFDO1FBR0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxpQkFBUyxDQUFDLE9BQU8sQ0FBQztRQUNuQyxJQUFJLENBQUMsV0FBVyxHQUFHLHdDQUF3QyxDQUFDO0lBQzlELENBQUM7SUFLTSxLQUFLLENBQUMsY0FBYyxDQUN6QixJQUFtQixFQUNuQixVQUFrQixFQUNsQixJQUFZO1FBRVosT0FBTyxDQUFDLEdBQUcsQ0FBQywyQ0FBMkMsSUFBSSxDQUFDLElBQUksSUFBSSxTQUFTLE1BQU0sVUFBVSxFQUFFLENBQUMsQ0FBQztRQUdqRyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNoRSxJQUFJLENBQUMsU0FBUyxHQUFHLGlCQUFTLENBQUMsYUFBYSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxXQUFXLEdBQUcsMEJBQTBCLENBQUM7UUFDaEQsQ0FBQztRQUdELElBQUksQ0FBQyxTQUFTLEdBQUcsaUJBQVMsQ0FBQyxPQUFPLENBQUM7UUFDbkMsSUFBSSxDQUFDLFdBQVcsR0FBRyxvQ0FBb0MsQ0FBQztJQUMxRCxDQUFDO0NBQ0Y7O0FBR1ksUUFBQSxZQUFZLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBSZXBseUNvZGUsIEZ0cENvbm5lY3Rpb24gfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IFVzZXJNYW5hZ2VyIH0gZnJvbSAnLi91c2VyTWFuYWdlcic7XG5cbi8qKlxuICogRmlsZVRyYW5zZmVyIC0gRG9zeWEgdHJhbnNmZXIgacWfbGVtbGVyaVxuICovXG5leHBvcnQgY2xhc3MgRmlsZVRyYW5zZmVyIHtcbiAgcHJpdmF0ZSB1c2VyTWFuYWdlcjogVXNlck1hbmFnZXI7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLy8gRMO2bmfDvCBiYcSfxLFtbMSxbMSxxJ/EsW5kYW4ga2HDp8Sxbm1hayBpw6dpbiBsYXp5IGluaXRcbiAgICB0aGlzLnVzZXJNYW5hZ2VyID0gbnVsbCBhcyBhbnk7XG4gIH1cblxuICAvKipcbiAgICogVXNlck1hbmFnZXIgc2luZ2xldG9uJ8SxbsSxIGFsXG4gICAqL1xuICBwcml2YXRlIGdldFVzZXJNYW5hZ2VyKCk6IFVzZXJNYW5hZ2VyIHtcbiAgICBpZiAoIXRoaXMudXNlck1hbmFnZXIpIHtcbiAgICAgIC8vIETDtm5nw7wgYmHEn8SxbWzEsWzEscSfxLFuxLEgw6fDtnptZWsgacOnaW4gZ2xvYmFsIGluc3RhbmNlIGt1bGxhblxuICAgICAgdGhpcy51c2VyTWFuYWdlciA9IChnbG9iYWwgYXMgYW55KS5fX3VzZXJNYW5hZ2VyIHx8IFxuICAgICAgICBuZXcgVXNlck1hbmFnZXIocGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL3VzZXJzLmpzb24nKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnVzZXJNYW5hZ2VyO1xuICB9XG5cbiAgLyoqXG4gICAqIMSwemluIGtvbnRyb2zDvCAtIFRPRE86IEltcGxlbWVudFxuICAgKi9cbiAgcHJpdmF0ZSBjaGVja1Blcm1pc3Npb24odXNlcjogc3RyaW5nLCBwZXJtaXNzaW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAvLyBUT0RPOiBJbXBsZW1lbnQgcGVybWlzc2lvbiBjaGVja2luZ1xuICAgIHJldHVybiB0cnVlOyAvLyBQbGFjZWhvbGRlclxuICB9XG5cbiAgLyoqXG4gICAqIERvc3lhIHnDvGtsZSAoU1RPUikgLSBUT0RPOiBJbXBsZW1lbnRcbiAgICovXG4gIHB1YmxpYyBhc3luYyB1cGxvYWRGaWxlKFxuICAgIGNvbm46IEZ0cENvbm5lY3Rpb24sXG4gICAgcmVtb3RlUGF0aDogc3RyaW5nLFxuICAgIGRhdGE6IEJ1ZmZlclxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zb2xlLmxvZyhgW0ZpbGVUcmFuc2Zlcl0gRmlsZSB1cGxvYWQ6ICR7Y29ubi51c2VyIHx8ICd1bmtub3duJ30gLSAke3JlbW90ZVBhdGh9YCk7XG4gICAgXG4gICAgLy8gxLB6aW4ga29udHJvbMO8XG4gICAgaWYgKCF0aGlzLnVzZXJNYW5hZ2VyLmNoZWNrUGVybWlzc2lvbihjb25uLnVzZXIgfHwgJycsICd3cml0ZScpKSB7XG4gICAgICBjb25uLmxhc3RSZXBseSA9IFJlcGx5Q29kZS5OT19QRVJNSVNTSU9OO1xuICAgICAgY29ubi5sYXN0TWVzc2FnZSA9IGBQZXJtaXNzaW9uIGRlbmllZDogdXBsb2FkYDtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBEb3N5YSB5w7xrbGVtZSBpbXBsZW1lbnRhc3lvbnVcbiAgICBjb25uLmxhc3RSZXBseSA9IFJlcGx5Q29kZS5DTURfRVJSO1xuICAgIGNvbm4ubGFzdE1lc3NhZ2UgPSBgQ29tbWFuZCBub3QgeWV0IGltcGxlbWVudGVkOiBTVE9SYDsgIFxuICB9XG5cbiAgLyoqXG4gICAqIERvc3lhIGluZGlyIChSRVRSKSAtIFRPRE86IEltcGxlbWVudFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGRvd25sb2FkRmlsZShcbiAgICBjb25uOiBGdHBDb25uZWN0aW9uLFxuICAgIHJlbW90ZVBhdGg6IHN0cmluZ1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zb2xlLmxvZyhgW0ZpbGVUcmFuc2Zlcl0gRmlsZSBkb3dubG9hZDogJHtjb25uLnVzZXIgfHwgJ3Vua25vd24nfSAtICR7cmVtb3RlUGF0aH1gKTtcbiAgICBcbiAgICAvLyDEsHppbiBrb250cm9sw7xcbiAgICBpZiAoIXRoaXMudXNlck1hbmFnZXIuY2hlY2tQZXJtaXNzaW9uKGNvbm4udXNlciB8fCAnJywgJ3JlYWQnKSkge1xuICAgICAgY29ubi5sYXN0UmVwbHkgPSBSZXBseUNvZGUuTk9fUEVSTUlTU0lPTjtcbiAgICAgIGNvbm4ubGFzdE1lc3NhZ2UgPSBgUGVybWlzc2lvbiBkZW5pZWQ6IGRvd25sb2FkYDtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBEb3N5YSBpbmRpcm1lIGltcGxlbWVudGFzeW9udVxuICAgIGNvbm4ubGFzdFJlcGx5ID0gUmVwbHlDb2RlLkNNRF9FUlI7XG4gICAgY29ubi5sYXN0TWVzc2FnZSA9IGBDb21tYW5kIG5vdCB5ZXQgaW1wbGVtZW50ZWQ6IFJFVFJgOyAgXG4gIH1cblxuICAvKipcbiAgICogRG9zeWEgc2lsIChERUxFKSAtIFRPRE86IEltcGxlbWVudFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGRlbGV0ZUZpbGUoXG4gICAgY29ubjogRnRwQ29ubmVjdGlvbixcbiAgICByZW1vdGVQYXRoOiBzdHJpbmdcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc29sZS5sb2coYFtGaWxlVHJhbnNmZXJdIEZpbGUgZGVsZXRlOiAke2Nvbm4udXNlciB8fCAndW5rbm93bid9IC0gJHtyZW1vdGVQYXRofWApO1xuICAgIFxuICAgIC8vIMSwemluIGtvbnRyb2zDvFxuICAgIGlmICghdGhpcy51c2VyTWFuYWdlci5jaGVja1Blcm1pc3Npb24oY29ubi51c2VyIHx8ICcnLCAnZGVsZXRlJykpIHtcbiAgICAgIGNvbm4ubGFzdFJlcGx5ID0gUmVwbHlDb2RlLk5PX1BFUk1JU1NJT047XG4gICAgICBjb25uLmxhc3RNZXNzYWdlID0gYFBlcm1pc3Npb24gZGVuaWVkOiBkZWxldGVgO1xuICAgIH1cblxuICAgIC8vIFRPRE86IERvc3lhIHNpbG1lIGltcGxlbWVudGFzeW9udVxuICAgIGNvbm4ubGFzdFJlcGx5ID0gUmVwbHlDb2RlLkNNRF9FUlI7XG4gICAgY29ubi5sYXN0TWVzc2FnZSA9IGBDb21tYW5kIG5vdCB5ZXQgaW1wbGVtZW50ZWQ6IERFTEVgOyAgXG4gIH1cblxuICAvKipcbiAgICogRGl6aW4gb2x1xZ90dXJtYSAoTUtEKSAtIFRPRE86IEltcGxlbWVudFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNyZWF0ZURpcmVjdG9yeShcbiAgICBjb25uOiBGdHBDb25uZWN0aW9uLFxuICAgIHJlbW90ZVBhdGg6IHN0cmluZ1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zb2xlLmxvZyhgW0ZpbGVUcmFuc2Zlcl0gRGlyZWN0b3J5IGNyZWF0aW9uOiAke2Nvbm4udXNlciB8fCAndW5rbm93bid9IC0gJHtyZW1vdGVQYXRofWApO1xuICAgIFxuICAgIC8vIMSwemluIGtvbnRyb2zDvFxuICAgIGlmICghdGhpcy51c2VyTWFuYWdlci5jaGVja1Blcm1pc3Npb24oY29ubi51c2VyIHx8ICcnLCAnbWtkJykpIHtcbiAgICAgIGNvbm4ubGFzdFJlcGx5ID0gUmVwbHlDb2RlLk5PX1BFUk1JU1NJT047XG4gICAgICBjb25uLmxhc3RNZXNzYWdlID0gYFBlcm1pc3Npb24gZGVuaWVkOiBjcmVhdGUgZGlyZWN0b3J5YDtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBEaXppbiBvbHXFn3R1cm1hIGltcGxlbWVudGFzeW9udVxuICAgIGNvbm4ubGFzdFJlcGx5ID0gUmVwbHlDb2RlLkNNRF9FUlI7XG4gICAgY29ubi5sYXN0TWVzc2FnZSA9IGBDb21tYW5kIG5vdCB5ZXQgaW1wbGVtZW50ZWQ6IE1LRGA7ICBcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXppbiBzaWxtZSAoUk1EKSAtIFRPRE86IEltcGxlbWVudFxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlbW92ZURpcmVjdG9yeShcbiAgICBjb25uOiBGdHBDb25uZWN0aW9uLFxuICAgIHJlbW90ZVBhdGg6IHN0cmluZ1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zb2xlLmxvZyhgW0ZpbGVUcmFuc2Zlcl0gRGlyZWN0b3J5IHJlbW92YWw6ICR7Y29ubi51c2VyIHx8ICd1bmtub3duJ30gLSAke3JlbW90ZVBhdGh9YCk7XG4gICAgXG4gICAgLy8gxLB6aW4ga29udHJvbMO8XG4gICAgaWYgKCF0aGlzLnVzZXJNYW5hZ2VyLmNoZWNrUGVybWlzc2lvbihjb25uLnVzZXIgfHwgJycsICdybWRpcicpKSB7XG4gICAgICBjb25uLmxhc3RSZXBseSA9IFJlcGx5Q29kZS5OT19QRVJNSVNTSU9OO1xuICAgICAgY29ubi5sYXN0TWVzc2FnZSA9IGBQZXJtaXNzaW9uIGRlbmllZDogcmVtb3ZlIGRpcmVjdG9yeWA7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogRGl6aW4gc2lsbWUgaW1wbGVtZW50YXN5b251XG4gICAgY29ubi5sYXN0UmVwbHkgPSBSZXBseUNvZGUuQ01EX0VSUjtcbiAgICBjb25uLmxhc3RNZXNzYWdlID0gYENvbW1hbmQgbm90IHlldCBpbXBsZW1lbnRlZDogUk1EYDsgIFxuICB9XG5cbiAgLyoqXG4gICAqIERvc3lhIHllbmlkZW4gYWRsYW5kxLFybWEgKFJORlIvUk5UTykgLSBUT0RPOiBJbXBsZW1lbnRcbiAgICovXG4gIHB1YmxpYyBhc3luYyByZW5hbWVGaWxlKFxuICAgIGNvbm46IEZ0cENvbm5lY3Rpb24sXG4gICAgb2xkUGF0aDogc3RyaW5nLFxuICAgIG5ld1BhdGg6IHN0cmluZ1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zb2xlLmxvZyhgW0ZpbGVUcmFuc2Zlcl0gRmlsZSByZW5hbWU6ICR7Y29ubi51c2VyIHx8ICd1bmtub3duJ30gLSAke29sZFBhdGh9IC0+ICR7bmV3UGF0aH1gKTtcbiAgICBcbiAgICAvLyDEsHppbiBrb250cm9sw7xcbiAgICBpZiAoIXRoaXMudXNlck1hbmFnZXIuY2hlY2tQZXJtaXNzaW9uKGNvbm4udXNlciB8fCAnJywgJ3JlbmFtZScpKSB7XG4gICAgICBjb25uLmxhc3RSZXBseSA9IFJlcGx5Q29kZS5OT19QRVJNSVNTSU9OO1xuICAgICAgY29ubi5sYXN0TWVzc2FnZSA9IGBQZXJtaXNzaW9uIGRlbmllZDogcmVuYW1lYDtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBEb3N5YSB5ZW5pZGVuIGFkbGFuZMSxcm1hIGltcGxlbWVudGFzeW9udVxuICAgIGNvbm4ubGFzdFJlcGx5ID0gUmVwbHlDb2RlLkNNRF9FUlI7XG4gICAgY29ubi5sYXN0TWVzc2FnZSA9IGBDb21tYW5kIG5vdCB5ZXQgaW1wbGVtZW50ZWQ6IFJORlIvUk5UT2A7ICBcbiAgfVxuXG4gIC8qKlxuICAgKiBEb3N5YSBpemlubGVyaW5pIGRlxJ9pxZ90aXIgKENITU9EKSAtIFRPRE86IEltcGxlbWVudFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNoYW5nZUZpbGVNb2RlKFxuICAgIGNvbm46IEZ0cENvbm5lY3Rpb24sXG4gICAgcmVtb3RlUGF0aDogc3RyaW5nLFxuICAgIG1vZGU6IG51bWJlclxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zb2xlLmxvZyhgW0ZpbGVUcmFuc2Zlcl0gRmlsZSBwZXJtaXNzaW9ucyBjaGFuZ2U6ICR7Y29ubi51c2VyIHx8ICd1bmtub3duJ30gLSAke3JlbW90ZVBhdGh9YCk7XG4gICAgXG4gICAgLy8gxLB6aW4ga29udHJvbMO8XG4gICAgaWYgKCF0aGlzLnVzZXJNYW5hZ2VyLmNoZWNrUGVybWlzc2lvbihjb25uLnVzZXIgfHwgJycsICdjaG1vZCcpKSB7XG4gICAgICBjb25uLmxhc3RSZXBseSA9IFJlcGx5Q29kZS5OT19QRVJNSVNTSU9OO1xuICAgICAgY29ubi5sYXN0TWVzc2FnZSA9IGBQZXJtaXNzaW9uIGRlbmllZDogY2htb2RgO1xuICAgIH1cblxuICAgIC8vIFRPRE86IERvc3lhIGl6aW5sZXJpIGRlxJ9pxZ90aXJtZSBpbXBsZW1lbnRhc3lvbnVcbiAgICBjb25uLmxhc3RSZXBseSA9IFJlcGx5Q29kZS5DTURfRVJSO1xuICAgIGNvbm4ubGFzdE1lc3NhZ2UgPSBgQ29tbWFuZCBub3QgeWV0IGltcGxlbWVudGVkOiBDSE1PRGA7ICBcbiAgfVxufVxuXG4vLyBTaW5nbGV0b24gaW5zdGFuY2VcbmV4cG9ydCBjb25zdCBmaWxlVHJhbnNmZXIgPSBuZXcgRmlsZVRyYW5zZmVyKCk7Il19
@@ -1,119 +0,0 @@
1
- import * as net from 'net';
2
- export declare enum ReplyCode {
3
- CONTINUE = 125,
4
- DATA_CONNECT = 150,
5
- OK = 200,
6
- USER_OK = 230,
7
- PASS_OK = 230,
8
- SYS_NAME = 211,
9
- SYS_TYPE = 215,
10
- FEAT_OK = 211,
11
- RETR_OK = 226,
12
- STOR_OK = 226,
13
- DELE_OK = 250,
14
- RMD_OK = 250,
15
- MKD_OK = 257,
16
- LIST_OK = 150,
17
- LIST_END = 226,
18
- NOOP_OK = 200,
19
- QUIT_OK = 221,
20
- CWD_OK = 250,
21
- PWD_OK = 257,
22
- REST_OK = 350,
23
- USER_PASS = 331,
24
- PASS_ACC = 332,
25
- USER_ACC = 332,
26
- REST_NEW = 350,
27
- USER_ERR = 503,
28
- PASS_ERR = 503,
29
- CMD_ERR = 500,
30
- SYNTAX_ERR = 501,
31
- PARAM_ERR = 502,
32
- BAD_SEQ = 503,
33
- NO_SUCH_USER = 530,
34
- NOT_LOGGED = 530,
35
- WRITE_PROTECT = 451,
36
- INTERNAL_ERR = 500,
37
- BAD_CMD = 502,
38
- BAD_USER = 530,
39
- NOT_ALLOWED = 550,
40
- FILE_NOT_FOUND = 551,
41
- PATH_EXISTS = 550,
42
- NO_PERMISSION = 551,
43
- DIRECTORY_EXISTS = 551,
44
- FILE_EXISTS = 551,
45
- SYST_OK = 215,
46
- BAD_ADDRESS = 421,
47
- TIMEOUT = 421,
48
- SERVICE_NOT_AVAILABLE = 421
49
- }
50
- export type Permission = 'read' | 'write' | 'list' | 'create' | 'append' | 'delete' | 'chmod' | 'mkd' | 'rmdir' | 'rename' | 'deletemyfiles' | 'nopasswd' | 'passive' | 'port' | 'nonlocalbind' | 'private' | 'tls';
51
- export interface UserPermissions {
52
- read?: boolean;
53
- write?: boolean;
54
- list?: boolean;
55
- create?: boolean;
56
- append?: boolean;
57
- delete?: boolean;
58
- chmod?: boolean;
59
- mkd?: boolean;
60
- rmdir?: boolean;
61
- rename?: boolean;
62
- deletemyfiles?: boolean;
63
- nopasswd?: boolean;
64
- passive?: boolean;
65
- port?: boolean;
66
- nonlocalbind?: boolean;
67
- private?: boolean;
68
- tls?: boolean;
69
- }
70
- export interface FtpConnection {
71
- socket: net.Socket;
72
- user: string | null;
73
- pass: string | null;
74
- homeDir: string;
75
- currentDir: string;
76
- permissions: UserPermissions;
77
- transferMode: 'ascii' | 'binary' | null;
78
- transferSize: number;
79
- lastReply: number;
80
- lastMessage: string;
81
- }
82
- export interface User {
83
- username: string;
84
- password: string;
85
- homeDir: string;
86
- permissions: UserPermissions;
87
- isActive: boolean;
88
- }
89
- export interface UserManagerData {
90
- users: User[];
91
- lastUpdated: string;
92
- }
93
- export interface DataConnection {
94
- socket: net.Socket;
95
- passive: boolean;
96
- localPort: number;
97
- state: 'listening' | 'connecting' | 'connected' | 'closing' | 'closed';
98
- }
99
- export interface CommandResult {
100
- code: number;
101
- message: string;
102
- data?: unknown;
103
- }
104
- export type CommandHandler = (conn: FtpConnection, args: string) => Promise<CommandResult> | CommandResult;
105
- export interface ServerConfig {
106
- port: number;
107
- dataPort: number;
108
- userFile: string;
109
- maxConnections: number;
110
- logLevel: 'debug' | 'info' | 'warn' | 'error';
111
- }
112
- export interface TransferStatus {
113
- file: string;
114
- state: 'pending' | 'transferring' | 'complete' | 'failed';
115
- size: number;
116
- transferred: number;
117
- mode: 'ascii' | 'binary';
118
- timestamp: string;
119
- }
@@ -1,53 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ReplyCode = void 0;
4
- var ReplyCode;
5
- (function (ReplyCode) {
6
- ReplyCode[ReplyCode["CONTINUE"] = 125] = "CONTINUE";
7
- ReplyCode[ReplyCode["DATA_CONNECT"] = 150] = "DATA_CONNECT";
8
- ReplyCode[ReplyCode["OK"] = 200] = "OK";
9
- ReplyCode[ReplyCode["USER_OK"] = 230] = "USER_OK";
10
- ReplyCode[ReplyCode["PASS_OK"] = 230] = "PASS_OK";
11
- ReplyCode[ReplyCode["SYS_NAME"] = 211] = "SYS_NAME";
12
- ReplyCode[ReplyCode["SYS_TYPE"] = 215] = "SYS_TYPE";
13
- ReplyCode[ReplyCode["FEAT_OK"] = 211] = "FEAT_OK";
14
- ReplyCode[ReplyCode["RETR_OK"] = 226] = "RETR_OK";
15
- ReplyCode[ReplyCode["STOR_OK"] = 226] = "STOR_OK";
16
- ReplyCode[ReplyCode["DELE_OK"] = 250] = "DELE_OK";
17
- ReplyCode[ReplyCode["RMD_OK"] = 250] = "RMD_OK";
18
- ReplyCode[ReplyCode["MKD_OK"] = 257] = "MKD_OK";
19
- ReplyCode[ReplyCode["LIST_OK"] = 150] = "LIST_OK";
20
- ReplyCode[ReplyCode["LIST_END"] = 226] = "LIST_END";
21
- ReplyCode[ReplyCode["NOOP_OK"] = 200] = "NOOP_OK";
22
- ReplyCode[ReplyCode["QUIT_OK"] = 221] = "QUIT_OK";
23
- ReplyCode[ReplyCode["CWD_OK"] = 250] = "CWD_OK";
24
- ReplyCode[ReplyCode["PWD_OK"] = 257] = "PWD_OK";
25
- ReplyCode[ReplyCode["REST_OK"] = 350] = "REST_OK";
26
- ReplyCode[ReplyCode["USER_PASS"] = 331] = "USER_PASS";
27
- ReplyCode[ReplyCode["PASS_ACC"] = 332] = "PASS_ACC";
28
- ReplyCode[ReplyCode["USER_ACC"] = 332] = "USER_ACC";
29
- ReplyCode[ReplyCode["REST_NEW"] = 350] = "REST_NEW";
30
- ReplyCode[ReplyCode["USER_ERR"] = 503] = "USER_ERR";
31
- ReplyCode[ReplyCode["PASS_ERR"] = 503] = "PASS_ERR";
32
- ReplyCode[ReplyCode["CMD_ERR"] = 500] = "CMD_ERR";
33
- ReplyCode[ReplyCode["SYNTAX_ERR"] = 501] = "SYNTAX_ERR";
34
- ReplyCode[ReplyCode["PARAM_ERR"] = 502] = "PARAM_ERR";
35
- ReplyCode[ReplyCode["BAD_SEQ"] = 503] = "BAD_SEQ";
36
- ReplyCode[ReplyCode["NO_SUCH_USER"] = 530] = "NO_SUCH_USER";
37
- ReplyCode[ReplyCode["NOT_LOGGED"] = 530] = "NOT_LOGGED";
38
- ReplyCode[ReplyCode["WRITE_PROTECT"] = 451] = "WRITE_PROTECT";
39
- ReplyCode[ReplyCode["INTERNAL_ERR"] = 500] = "INTERNAL_ERR";
40
- ReplyCode[ReplyCode["BAD_CMD"] = 502] = "BAD_CMD";
41
- ReplyCode[ReplyCode["BAD_USER"] = 530] = "BAD_USER";
42
- ReplyCode[ReplyCode["NOT_ALLOWED"] = 550] = "NOT_ALLOWED";
43
- ReplyCode[ReplyCode["FILE_NOT_FOUND"] = 551] = "FILE_NOT_FOUND";
44
- ReplyCode[ReplyCode["PATH_EXISTS"] = 550] = "PATH_EXISTS";
45
- ReplyCode[ReplyCode["NO_PERMISSION"] = 551] = "NO_PERMISSION";
46
- ReplyCode[ReplyCode["DIRECTORY_EXISTS"] = 551] = "DIRECTORY_EXISTS";
47
- ReplyCode[ReplyCode["FILE_EXISTS"] = 551] = "FILE_EXISTS";
48
- ReplyCode[ReplyCode["SYST_OK"] = 215] = "SYST_OK";
49
- ReplyCode[ReplyCode["BAD_ADDRESS"] = 421] = "BAD_ADDRESS";
50
- ReplyCode[ReplyCode["TIMEOUT"] = 421] = "TIMEOUT";
51
- ReplyCode[ReplyCode["SERVICE_NOT_AVAILABLE"] = 421] = "SERVICE_NOT_AVAILABLE";
52
- })(ReplyCode || (exports.ReplyCode = ReplyCode = {}));
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBVUEsSUFBWSxTQXdEWDtBQXhERCxXQUFZLFNBQVM7SUFFbkIsbURBQWMsQ0FBQTtJQUNkLDJEQUFrQixDQUFBO0lBR2xCLHVDQUFRLENBQUE7SUFDUixpREFBYSxDQUFBO0lBQ2IsaURBQWEsQ0FBQTtJQUNiLG1EQUFjLENBQUE7SUFDZCxtREFBYyxDQUFBO0lBQ2QsaURBQWEsQ0FBQTtJQUNiLGlEQUFhLENBQUE7SUFDYixpREFBYSxDQUFBO0lBQ2IsaURBQWEsQ0FBQTtJQUNiLCtDQUFZLENBQUE7SUFDWiwrQ0FBWSxDQUFBO0lBQ1osaURBQWEsQ0FBQTtJQUNiLG1EQUFjLENBQUE7SUFDZCxpREFBYSxDQUFBO0lBQ2IsaURBQWEsQ0FBQTtJQUNiLCtDQUFZLENBQUE7SUFDWiwrQ0FBWSxDQUFBO0lBQ1osaURBQWEsQ0FBQTtJQUdiLHFEQUFlLENBQUE7SUFDZixtREFBYyxDQUFBO0lBQ2QsbURBQWMsQ0FBQTtJQUNkLG1EQUFjLENBQUE7SUFHZCxtREFBYyxDQUFBO0lBQ2QsbURBQWMsQ0FBQTtJQUNkLGlEQUFhLENBQUE7SUFDYix1REFBZ0IsQ0FBQTtJQUNoQixxREFBZSxDQUFBO0lBQ2YsaURBQWEsQ0FBQTtJQUNiLDJEQUFrQixDQUFBO0lBQ2xCLHVEQUFnQixDQUFBO0lBQ2hCLDZEQUFtQixDQUFBO0lBR25CLDJEQUFrQixDQUFBO0lBQ2xCLGlEQUFhLENBQUE7SUFDYixtREFBYyxDQUFBO0lBQ2QseURBQWlCLENBQUE7SUFDakIsK0RBQW9CLENBQUE7SUFDcEIseURBQWlCLENBQUE7SUFDakIsNkRBQW1CLENBQUE7SUFDbkIsbUVBQXNCLENBQUE7SUFDdEIseURBQWlCLENBQUE7SUFDakIsaURBQWEsQ0FBQTtJQUNiLHlEQUFpQixDQUFBO0lBQ2pCLGlEQUFhLENBQUE7SUFDYiw2RUFBMkIsQ0FBQTtBQUM3QixDQUFDLEVBeERXLFNBQVMsYUFBVCxTQUFTLEdBQVQsU0FBUyxRQXdEcEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBuZXQgZnJvbSAnbmV0JztcblxuLyoqXG4gKiBSRkMgOTU5IEZUUCBQcm90b2NvbCBUeXBlc1xuICogaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvaW5mby9yZmM5NTlcbiAqL1xuXG4vKipcbiAqIEZUUCBZYW7EsXQgS29kbGFyxLEgKFJGQyA5NTkpXG4gKi9cbmV4cG9ydCBlbnVtIFJlcGx5Q29kZSB7XG4gIC8qKiAxMDAtMTk5OiDEsMWfbGVtIHRhbWFtbGFubWFkxLEsIGJpbGdpIG1lc2FqxLEgKi9cbiAgQ09OVElOVUUgPSAxMjUsXG4gIERBVEFfQ09OTkVDVCA9IDE1MCxcbiAgXG4gIC8qKiAyMDAtMjk5OiBCYcWfYXLEsWzEsSAqL1xuICBPSyA9IDIwMCxcbiAgVVNFUl9PSyA9IDIzMCxcbiAgUEFTU19PSyA9IDIzMCxcbiAgU1lTX05BTUUgPSAyMTEsXG4gIFNZU19UWVBFID0gMjE1LFxuICBGRUFUX09LID0gMjExLFxuICBSRVRSX09LID0gMjI2LFxuICBTVE9SX09LID0gMjI2LFxuICBERUxFX09LID0gMjUwLFxuICBSTURfT0sgPSAyNTAsXG4gIE1LRF9PSyA9IDI1NyxcbiAgTElTVF9PSyA9IDE1MCxcbiAgTElTVF9FTkQgPSAyMjYsXG4gIE5PT1BfT0sgPSAyMDAsXG4gIFFVSVRfT0sgPSAyMjEsXG4gIENXRF9PSyA9IDI1MCxcbiAgUFdEX09LID0gMjU3LFxuICBSRVNUX09LID0gMzUwLFxuICBcbiAgLyoqIDMwMC0zOTk6IEJla2xleWVuIGJpbGdpICovXG4gIFVTRVJfUEFTUyA9IDMzMSxcbiAgUEFTU19BQ0MgPSAzMzIsXG4gIFVTRVJfQUNDID0gMzMyLFxuICBSRVNUX05FVyA9IDM1MCxcbiAgXG4gIC8qKiA0MDAtNDk5OiBHZcOnaWNpIGhhdGEgKi9cbiAgVVNFUl9FUlIgPSA1MDMsXG4gIFBBU1NfRVJSID0gNTAzLFxuICBDTURfRVJSID0gNTAwLFxuICBTWU5UQVhfRVJSID0gNTAxLFxuICBQQVJBTV9FUlIgPSA1MDIsXG4gIEJBRF9TRVEgPSA1MDMsXG4gIE5PX1NVQ0hfVVNFUiA9IDUzMCxcbiAgTk9UX0xPR0dFRCA9IDUzMCxcbiAgV1JJVEVfUFJPVEVDVCA9IDQ1MSxcbiAgXG4gIC8qKiA1MDAtNTk5OiBLYWzEsWPEsSBoYXRhICovXG4gIElOVEVSTkFMX0VSUiA9IDUwMCxcbiAgQkFEX0NNRCA9IDUwMixcbiAgQkFEX1VTRVIgPSA1MzAsXG4gIE5PVF9BTExPV0VEID0gNTUwLFxuICBGSUxFX05PVF9GT1VORCA9IDU1MSxcbiAgUEFUSF9FWElTVFMgPSA1NTAsXG4gIE5PX1BFUk1JU1NJT04gPSA1NTEsXG4gIERJUkVDVE9SWV9FWElTVFMgPSA1NTEsXG4gIEZJTEVfRVhJU1RTID0gNTUxLFxuICBTWVNUX09LID0gMjE1LFxuICBCQURfQUREUkVTUyA9IDQyMSxcbiAgVElNRU9VVCA9IDQyMSxcbiAgU0VSVklDRV9OT1RfQVZBSUxBQkxFID0gNDIxLFxufVxuXG4vKipcbiAqIEt1bGxhbsSxY8SxIGl6aW4gdMO8cmxlcmlcbiAqL1xuZXhwb3J0IHR5cGUgUGVybWlzc2lvbiA9IFxuICB8ICdyZWFkJyAgICAgICAgICAgLy8gRG9zeWEgb2t1bWFcbiAgfCAnd3JpdGUnICAgICAgICAgIC8vIERvc3lhIHlhem1hXG4gIHwgJ2xpc3QnICAgICAgICAgICAvLyBEaXppbiBsaXN0ZWxlbWVcbiAgfCAnY3JlYXRlJyAgICAgICAgIC8vIERvc3lhL2RpemluIG9sdcWfdHVybWFcbiAgfCAnYXBwZW5kJyAgICAgICAgIC8vIERvc3lhIGVrbGVtZVxuICB8ICdkZWxldGUnICAgICAgICAgLy8gRG9zeWEgc2lsbWVcbiAgfCAnY2htb2QnICAgICAgICAgIC8vIERvc3lhIGl6aW5sZXJpIGRlxJ9pxZ90aXJtZVxuICB8ICdta2QnICAgICAgICAgICAgLy8gRGl6aW4gb2x1xZ90dXJtYVxuICB8ICdybWRpcicgICAgICAgICAgLy8gRGl6aW4gc2lsbWVcbiAgfCAncmVuYW1lJyAgICAgICAgIC8vIERvc3lhIHllbmlkZW4gYWRsYW5kxLFybWFcbiAgfCAnZGVsZXRlbXlmaWxlcycgIC8vIEtlbmRpIGRvc3lhbGFyxLFuxLEgc2lsbWVcbiAgfCAnbm9wYXNzd2QnICAgICAgIC8vIMWeaWZyZXNpeiBnaXJpxZ9cbiAgfCAncGFzc2l2ZScgICAgICAgIC8vIFBhc2lmIG1vZCAoUEFTVilcbiAgfCAncG9ydCcgICAgICAgICAgIC8vIEFrdGlmIG1vZCAoUE9SVClcbiAgfCAnbm9ubG9jYWxiaW5kJyAgIC8vIFllcmVsIG9sbWF5YW4gYmHEn2xhbm1hXG4gIHwgJ3ByaXZhdGUnICAgICAgICAvLyDDlnplbCBrb211dGxhclxuICB8ICd0bHMnOyAgICAgICAgICAgIC8vIFRMUy9TU0xcblxuLyoqXG4gKiBLdWxsYW7EsWPEsSBpemluIG9iamVzaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJQZXJtaXNzaW9ucyB7XG4gIHJlYWQ/OiBib29sZWFuO1xuICB3cml0ZT86IGJvb2xlYW47XG4gIGxpc3Q/OiBib29sZWFuO1xuICBjcmVhdGU/OiBib29sZWFuO1xuICBhcHBlbmQ/OiBib29sZWFuO1xuICBkZWxldGU/OiBib29sZWFuO1xuICBjaG1vZD86IGJvb2xlYW47XG4gIG1rZD86IGJvb2xlYW47XG4gIHJtZGlyPzogYm9vbGVhbjtcbiAgcmVuYW1lPzogYm9vbGVhbjtcbiAgZGVsZXRlbXlmaWxlcz86IGJvb2xlYW47XG4gIG5vcGFzc3dkPzogYm9vbGVhbjtcbiAgcGFzc2l2ZT86IGJvb2xlYW47XG4gIHBvcnQ/OiBib29sZWFuO1xuICBub25sb2NhbGJpbmQ/OiBib29sZWFuO1xuICBwcml2YXRlPzogYm9vbGVhbjtcbiAgdGxzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBGVFAgQmHEn2xhbnTEsSBiaWxnaWxlcmlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGdHBDb25uZWN0aW9uIHtcbiAgc29ja2V0OiBuZXQuU29ja2V0O1xuICB1c2VyOiBzdHJpbmcgfCBudWxsO1xuICBwYXNzOiBzdHJpbmcgfCBudWxsO1xuICBob21lRGlyOiBzdHJpbmc7XG4gIGN1cnJlbnREaXI6IHN0cmluZztcbiAgcGVybWlzc2lvbnM6IFVzZXJQZXJtaXNzaW9ucztcbiAgdHJhbnNmZXJNb2RlOiAnYXNjaWknIHwgJ2JpbmFyeScgfCBudWxsO1xuICB0cmFuc2ZlclNpemU6IG51bWJlcjtcbiAgbGFzdFJlcGx5OiBudW1iZXI7XG4gIGxhc3RNZXNzYWdlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogS3VsbGFuxLFjxLEgYmlsZ2lsZXJpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlciB7XG4gIHVzZXJuYW1lOiBzdHJpbmc7XG4gIHBhc3N3b3JkOiBzdHJpbmc7XG4gIGhvbWVEaXI6IHN0cmluZztcbiAgcGVybWlzc2lvbnM6IFVzZXJQZXJtaXNzaW9ucztcbiAgaXNBY3RpdmU6IGJvb2xlYW47XG59XG5cbi8qKlxuICogS3VsbGFuxLFjxLEgecO2bmV0aW1pIHZlcml0YWJhbsSxXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlck1hbmFnZXJEYXRhIHtcbiAgdXNlcnM6IFVzZXJbXTtcbiAgbGFzdFVwZGF0ZWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBWZXJpIGJhxJ9sYW50xLFzxLEgYmlsZ2lsZXJpIChQT1JUL1BBU1YpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YUNvbm5lY3Rpb24ge1xuICBzb2NrZXQ6IG5ldC5Tb2NrZXQ7XG4gIHBhc3NpdmU6IGJvb2xlYW47XG4gIGxvY2FsUG9ydDogbnVtYmVyO1xuICBzdGF0ZTogJ2xpc3RlbmluZycgfCAnY29ubmVjdGluZycgfCAnY29ubmVjdGVkJyB8ICdjbG9zaW5nJyB8ICdjbG9zZWQnO1xufVxuXG4vKipcbiAqIEtvbXV0IHNvbnXDpyBvYmplc2lcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21tYW5kUmVzdWx0IHtcbiAgY29kZTogbnVtYmVyO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIGRhdGE/OiB1bmtub3duO1xufVxuXG4vKipcbiAqIEtvbXV0IGnFn2xldmkgdGlwIHRhbsSxbWxhbWFzxLFcbiAqL1xuZXhwb3J0IHR5cGUgQ29tbWFuZEhhbmRsZXIgPSAoY29ubjogRnRwQ29ubmVjdGlvbiwgYXJnczogc3RyaW5nKSA9PiBQcm9taXNlPENvbW1hbmRSZXN1bHQ+IHwgQ29tbWFuZFJlc3VsdDtcblxuLyoqXG4gKiBTZXJ2ZXIgYXlhcmxhcsSxXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmVyQ29uZmlnIHtcbiAgcG9ydDogbnVtYmVyO1xuICBkYXRhUG9ydDogbnVtYmVyO1xuICB1c2VyRmlsZTogc3RyaW5nO1xuICBtYXhDb25uZWN0aW9uczogbnVtYmVyO1xuICBsb2dMZXZlbDogJ2RlYnVnJyB8ICdpbmZvJyB8ICd3YXJuJyB8ICdlcnJvcic7XG59XG5cbi8qKlxuICogRG9zeWEgdHJhbnNmZXIgZHVydW11XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNmZXJTdGF0dXMge1xuICBmaWxlOiBzdHJpbmc7XG4gIHN0YXRlOiAncGVuZGluZycgfCAndHJhbnNmZXJyaW5nJyB8ICdjb21wbGV0ZScgfCAnZmFpbGVkJztcbiAgc2l6ZTogbnVtYmVyO1xuICB0cmFuc2ZlcnJlZDogbnVtYmVyO1xuICBtb2RlOiAnYXNjaWknIHwgJ2JpbmFyeSc7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xufVxuIl19