feat(SSH Node): Credentials test (#6279)

This commit is contained in:
Michael Kret 2023-05-19 16:03:23 +03:00 committed by GitHub
parent 8fe8aad6a7
commit 3569d53917
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -1,6 +1,9 @@
import type {
ICredentialTestFunctions,
ICredentialsDecrypted,
IDataObject,
IExecuteFunctions,
INodeCredentialTestResult,
INodeExecutionData,
INodeType,
INodeTypeDescription,
@ -63,6 +66,7 @@ export class Ssh implements INodeType {
{
name: 'sshPassword',
required: true,
testedBy: 'sshConnectionTest',
displayOptions: {
show: {
authentication: ['password'],
@ -272,6 +276,60 @@ export class Ssh implements INodeType {
],
};
methods = {
credentialTest: {
async sshConnectionTest(
this: ICredentialTestFunctions,
credential: ICredentialsDecrypted,
): Promise<INodeCredentialTestResult> {
const credentials = credential.data as IDataObject;
const ssh = new NodeSSH();
const temporaryFiles: string[] = [];
try {
if (!credentials.privateKey) {
await ssh.connect({
host: credentials.host as string,
username: credentials.username as string,
port: credentials.port as number,
password: credentials.password as string,
});
} else {
const { path } = await tmpFile({ prefix: 'n8n-ssh-' });
temporaryFiles.push(path);
await writeFile(path, credentials.privateKey as string);
const options: Config = {
host: credentials.host as string,
username: credentials.username as string,
port: credentials.port as number,
privateKey: path,
};
if (credentials.passphrase) {
options.passphrase = credentials.passphrase as string;
}
await ssh.connect(options);
}
} catch (error) {
const message = `SSH connection failed: ${error.message}`;
return {
status: 'Error',
message,
};
} finally {
ssh.dispose();
for (const tempFile of temporaryFiles) await rm(tempFile);
}
return {
status: 'OK',
message: 'Connection successful!',
};
},
},
};
async execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]> {
const items = this.getInputData();