n8n-nodes-smbclient 1.0.0 → 1.0.1
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.
|
@@ -16,6 +16,7 @@ export declare class SmbClientWrapper {
|
|
|
16
16
|
rmdir(remoteDir: string): Promise<void>;
|
|
17
17
|
del(remotePath: string): Promise<void>;
|
|
18
18
|
close(): Promise<void>;
|
|
19
|
+
private escapeSmbArg;
|
|
19
20
|
}
|
|
20
21
|
export declare function connectToSmbServer(this: IExecuteFunctions | ITriggerFunctions): Promise<{
|
|
21
22
|
client: SmbClientWrapper;
|
|
@@ -31,11 +31,20 @@ const execFileAsync = (0, node_util_1.promisify)(node_child_process_1.execFile);
|
|
|
31
31
|
const redactCmd = (s) => {
|
|
32
32
|
if (!s)
|
|
33
33
|
return s;
|
|
34
|
-
s = s.replace(/-U\s
|
|
35
|
-
s = s.replace(/-A\s
|
|
34
|
+
s = s.replace(/-U\s+\S+/g, '-U ***');
|
|
35
|
+
s = s.replace(/-A\s+\S+/g, '-A ***');
|
|
36
36
|
s = s.replace(/\/\/[^/\s]+\/\S+/g, '//***');
|
|
37
37
|
return s;
|
|
38
38
|
};
|
|
39
|
+
const maskSecrets = (value, secrets) => {
|
|
40
|
+
let result = value;
|
|
41
|
+
for (const secret of secrets) {
|
|
42
|
+
if (secret) {
|
|
43
|
+
result = result.split(secret).join('***');
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return result;
|
|
47
|
+
};
|
|
39
48
|
class SmbClientWrapper {
|
|
40
49
|
constructor(auth, smbclientPath = 'smbclient', node) {
|
|
41
50
|
this.auth = auth;
|
|
@@ -59,25 +68,25 @@ class SmbClientWrapper {
|
|
|
59
68
|
async runOne(cmd) {
|
|
60
69
|
var _a, _b;
|
|
61
70
|
const args = [...this.buildBaseArgs(), '-c', cmd];
|
|
71
|
+
const { username, password, domain } = this.auth;
|
|
72
|
+
const rawCmd = [this.smbclientPath, ...args].join(' ');
|
|
73
|
+
const safeCmd = maskSecrets(redactCmd(rawCmd), [username, password, domain]);
|
|
62
74
|
try {
|
|
63
75
|
const { stdout, stderr } = await execFileAsync(this.smbclientPath, args, {
|
|
64
76
|
maxBuffer: 10 * 1024 * 1024,
|
|
65
77
|
});
|
|
66
78
|
if (stderr && /NT_STATUS|Error|failed/i.test(stderr)) {
|
|
67
|
-
const
|
|
68
|
-
const safeCmd = redactCmd([this.smbclientPath, ...args].join(' ')).replace(username, '***').replace(password, '***');
|
|
79
|
+
const safeErr = maskSecrets(stderr.trim(), [username, password, domain]);
|
|
69
80
|
throw new n8n_workflow_1.NodeOperationError(this.node, {
|
|
70
|
-
message: `smbclient failed. cmd="${safeCmd}" stderr="${
|
|
81
|
+
message: `smbclient failed. cmd="${safeCmd}" stderr="${safeErr}"`,
|
|
71
82
|
});
|
|
72
83
|
}
|
|
73
84
|
return stdout !== null && stdout !== void 0 ? stdout : '';
|
|
74
85
|
}
|
|
75
86
|
catch (err) {
|
|
76
|
-
const
|
|
77
|
-
const safeCmd = redactCmd((err === null || err === void 0 ? void 0 : err.cmd) || [this.smbclientPath, ...args].join(' ')).replace(username, '***').replace(password, '***');
|
|
78
|
-
const msg = (((_b = (_a = err === null || err === void 0 ? void 0 : err.stderr) === null || _a === void 0 ? void 0 : _a.trim) === null || _b === void 0 ? void 0 : _b.call(_a)) || (err === null || err === void 0 ? void 0 : err.message) || 'smbclient command failed').replace(username, '***').replace(password, '***');
|
|
87
|
+
const safeErr = maskSecrets(((_b = (_a = err === null || err === void 0 ? void 0 : err.stderr) === null || _a === void 0 ? void 0 : _a.trim) === null || _b === void 0 ? void 0 : _b.call(_a)) || (err === null || err === void 0 ? void 0 : err.message) || 'smbclient command failed', [username, password, domain]);
|
|
79
88
|
throw new n8n_workflow_1.NodeOperationError(this.node, {
|
|
80
|
-
message: `smbclient failed. cmd="${safeCmd}" stderr="${
|
|
89
|
+
message: `smbclient failed. cmd="${safeCmd}" stderr="${safeErr}"`,
|
|
81
90
|
});
|
|
82
91
|
}
|
|
83
92
|
}
|
|
@@ -102,7 +111,12 @@ class SmbClientWrapper {
|
|
|
102
111
|
};
|
|
103
112
|
}
|
|
104
113
|
async list(dir) {
|
|
105
|
-
const
|
|
114
|
+
const normalizedDir = (dir !== null && dir !== void 0 ? dir : '').trim();
|
|
115
|
+
const safeDir = this.escapeSmbArg(normalizedDir);
|
|
116
|
+
const command = normalizedDir && normalizedDir !== '/' && normalizedDir !== '.'
|
|
117
|
+
? `cd "${safeDir}"; ls`
|
|
118
|
+
: 'ls';
|
|
119
|
+
const out = await this.runOne(command);
|
|
106
120
|
const lines = out
|
|
107
121
|
.split('\n')
|
|
108
122
|
.map((l) => l.trim())
|
|
@@ -210,6 +224,9 @@ class SmbClientWrapper {
|
|
|
210
224
|
}
|
|
211
225
|
async close() {
|
|
212
226
|
}
|
|
227
|
+
escapeSmbArg(value) {
|
|
228
|
+
return String(value).replace(/"/g, '\\"');
|
|
229
|
+
}
|
|
213
230
|
}
|
|
214
231
|
exports.SmbClientWrapper = SmbClientWrapper;
|
|
215
232
|
async function connectToSmbServer() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SmbClientWrapper.js","sourceRoot":"","sources":["../../../nodes/Smb2/SmbClientWrapper.ts"],"names":[],"mappings":";;;AAuBA,4CAQC;
|
|
1
|
+
{"version":3,"file":"SmbClientWrapper.js","sourceRoot":"","sources":["../../../nodes/Smb2/SmbClientWrapper.ts"],"names":[],"mappings":"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"}
|
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "n8n-nodes-smbclient",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"description": "Transfer files via Samba (SMB2) and smbclient package with n8n, some of the base work are based on https://github.com/drudge/n8n-nodes-smb work.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"n8n-community-node-package",
|
|
@@ -35,11 +35,20 @@ export function getReadableError(error: any): string {
|
|
|
35
35
|
const execFileAsync = promisify(execFile);
|
|
36
36
|
const redactCmd = (s: string): string => {
|
|
37
37
|
if (!s) return s;
|
|
38
|
-
s = s.replace(/-U\s
|
|
39
|
-
s = s.replace(/-A\s
|
|
38
|
+
s = s.replace(/-U\s+\S+/g, '-U ***');
|
|
39
|
+
s = s.replace(/-A\s+\S+/g, '-A ***');
|
|
40
40
|
s = s.replace(/\/\/[^/\s]+\/\S+/g, '//***');
|
|
41
41
|
return s;
|
|
42
42
|
}
|
|
43
|
+
const maskSecrets = (value: string, secrets: Array<string | undefined>): string => {
|
|
44
|
+
let result = value;
|
|
45
|
+
for (const secret of secrets) {
|
|
46
|
+
if (secret) {
|
|
47
|
+
result = result.split(secret).join('***');
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return result;
|
|
51
|
+
};
|
|
43
52
|
|
|
44
53
|
export class SmbClientWrapper {
|
|
45
54
|
constructor(
|
|
@@ -69,29 +78,36 @@ export class SmbClientWrapper {
|
|
|
69
78
|
private async runOne(cmd: string): Promise<string> {
|
|
70
79
|
const args = [...this.buildBaseArgs(), '-c', cmd];
|
|
71
80
|
|
|
81
|
+
const {username, password, domain} = this.auth;
|
|
82
|
+
|
|
83
|
+
const rawCmd = [this.smbclientPath, ...args].join(' ');
|
|
84
|
+
const safeCmd = maskSecrets(redactCmd(rawCmd), [username, password, domain]);
|
|
85
|
+
|
|
72
86
|
try {
|
|
73
87
|
const {stdout, stderr} = await execFileAsync(this.smbclientPath, args, {
|
|
74
88
|
maxBuffer: 10 * 1024 * 1024,
|
|
75
89
|
});
|
|
76
|
-
|
|
90
|
+
|
|
91
|
+
// smbclient sometimes prints warnings to stderr; detect real errors
|
|
77
92
|
if (stderr && /NT_STATUS|Error|failed/i.test(stderr)) {
|
|
78
|
-
const
|
|
79
|
-
|
|
93
|
+
const safeErr = maskSecrets(stderr.trim(), [username, password, domain]);
|
|
94
|
+
|
|
80
95
|
throw new NodeOperationError(this.node, {
|
|
81
|
-
message: `smbclient failed. cmd="${safeCmd}" stderr="${
|
|
96
|
+
message: `smbclient failed. cmd="${safeCmd}" stderr="${safeErr}"`,
|
|
82
97
|
});
|
|
83
98
|
}
|
|
99
|
+
|
|
84
100
|
return stdout ?? '';
|
|
85
|
-
} catch (err) {
|
|
101
|
+
} catch (err: any) {
|
|
102
|
+
const safeErr = maskSecrets(
|
|
103
|
+
err?.stderr?.trim?.() || err?.message || 'smbclient command failed',
|
|
104
|
+
[username, password, domain]
|
|
105
|
+
);
|
|
86
106
|
|
|
87
|
-
const {username, password} = this.auth;
|
|
88
|
-
const safeCmd = redactCmd(err?.cmd || [this.smbclientPath, ...args].join(' ')).replace(username, '***').replace(password, '***');
|
|
89
|
-
const msg = (err?.stderr?.trim?.() || err?.message || 'smbclient command failed').replace(username, '***').replace(password, '***');
|
|
90
107
|
throw new NodeOperationError(this.node, {
|
|
91
|
-
message: `smbclient failed. cmd="${safeCmd}" stderr="${
|
|
92
|
-
})
|
|
108
|
+
message: `smbclient failed. cmd="${safeCmd}" stderr="${safeErr}"`,
|
|
109
|
+
});
|
|
93
110
|
}
|
|
94
|
-
|
|
95
111
|
}
|
|
96
112
|
|
|
97
113
|
async stat(remotePath: string): Promise<SmbStat> {
|
|
@@ -114,7 +130,16 @@ export class SmbClientWrapper {
|
|
|
114
130
|
}
|
|
115
131
|
|
|
116
132
|
async list(dir: string): Promise<SmbListEntry[]> {
|
|
117
|
-
const out = await this.runOne(`ls "${dir}"`);
|
|
133
|
+
// const out = await this.runOne(`ls "${dir}"`);
|
|
134
|
+
const normalizedDir = (dir ?? '').trim();
|
|
135
|
+
const safeDir = this.escapeSmbArg(normalizedDir);
|
|
136
|
+
|
|
137
|
+
const command =
|
|
138
|
+
normalizedDir && normalizedDir !== '/' && normalizedDir !== '.'
|
|
139
|
+
? `cd "${safeDir}"; ls`
|
|
140
|
+
: 'ls';
|
|
141
|
+
|
|
142
|
+
const out = await this.runOne(command);
|
|
118
143
|
|
|
119
144
|
const lines = out
|
|
120
145
|
.split('\n')
|
|
@@ -255,6 +280,10 @@ export class SmbClientWrapper {
|
|
|
255
280
|
async close(): Promise<void> {
|
|
256
281
|
/* no-op */
|
|
257
282
|
}
|
|
283
|
+
|
|
284
|
+
private escapeSmbArg(value: string): string {
|
|
285
|
+
return String(value).replace(/"/g, '\\"');
|
|
286
|
+
}
|
|
258
287
|
}
|
|
259
288
|
|
|
260
289
|
export async function connectToSmbServer(
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "n8n-nodes-smbclient",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"description": "Transfer files via Samba (SMB2) and smbclient package with n8n, some of the base work are based on https://github.com/drudge/n8n-nodes-smb work.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"n8n-community-node-package",
|