smartssh/ts/smartssh.classes.sshinstance.ts

103 lines
3.0 KiB
TypeScript
Raw Normal View History

2022-10-11 11:05:29 +00:00
import * as plugins from './smartssh.plugins.js';
import * as helpers from './smartssh.classes.helpers.js';
2016-05-31 17:00:52 +00:00
2022-10-11 11:05:29 +00:00
import { SshDir } from './smartssh.classes.sshdir.js';
import { SshConfig } from './smartssh.classes.sshconfig.js';
import { SshKey } from './smartssh.classes.sshkey.js';
2016-05-31 17:00:52 +00:00
2018-09-17 20:32:31 +00:00
/**
* SshInstance is the main class dealing with ssh management
*/
2016-05-31 22:56:24 +00:00
export class SshInstance {
2018-09-17 20:32:31 +00:00
private _sshKeyArray: SshKey[]; // holds all ssh keys
private _sshConfig: SshConfig; // sshConfig (e.g. represents ~/.ssh/config)
private _sshDir: SshDir; // points to sshDir class instance.
private _sshSync: boolean; // if set to true, the ssh dir will be kept in sync automatically
constructor(optionsArg: { sshDirPath?: string; sshSync?: boolean } = {}) {
optionsArg ? void 0 : (optionsArg = {});
this._sshKeyArray = [];
this._sshConfig = new SshConfig(this._sshKeyArray);
this._sshDir = new SshDir(this._sshKeyArray, this._sshConfig, optionsArg.sshDirPath);
this._sshSync = optionsArg.sshSync;
}
2016-11-23 11:38:38 +00:00
2017-06-15 17:25:12 +00:00
// altering methods
2018-09-17 20:32:31 +00:00
addKey(sshKeyArg: SshKey) {
this._syncAuto('from');
this._sshKeyArray.push(sshKeyArg);
this._syncAuto('to');
}
removeKey(sshKeyArg: SshKey) {
this._syncAuto('from');
2017-06-15 17:25:12 +00:00
let filteredArray = this._sshKeyArray.filter((sshKeyArg2: SshKey) => {
2018-09-17 20:32:31 +00:00
return sshKeyArg != sshKeyArg2;
});
this._sshKeyArray = filteredArray;
this._syncAuto('to');
}
replaceKey(sshKeyOldArg: SshKey, sshKeyNewArg: SshKey) {
this._syncAuto('from');
this.removeKey(sshKeyOldArg);
this.addKey(sshKeyNewArg);
this._syncAuto('to');
}
2016-11-23 11:38:38 +00:00
2018-09-17 20:32:31 +00:00
// non altering methods
getKey(hostArg: string): SshKey {
this._syncAuto('from');
2022-10-11 11:05:29 +00:00
let filteredArray = this._sshKeyArray.filter(function (keyArg) {
2018-09-17 20:32:31 +00:00
return keyArg.host === hostArg;
});
2017-06-15 17:25:12 +00:00
if (filteredArray.length > 0) {
2018-09-17 20:32:31 +00:00
return filteredArray[0];
2017-06-15 17:25:12 +00:00
} else {
2018-09-17 20:32:31 +00:00
return undefined;
2017-06-15 17:25:12 +00:00
}
2018-09-17 20:32:31 +00:00
}
get sshKeys(): SshKey[] {
this._syncAuto('from');
return this._sshKeyArray;
}
2016-06-24 00:49:55 +00:00
2017-06-15 17:25:12 +00:00
// FS methods
2016-06-24 00:49:55 +00:00
2017-06-15 17:25:12 +00:00
/**
* write SshInstance to disk
*/
2018-09-17 20:32:31 +00:00
writeToDisk(dirPathArg?: string) {
this._sync('to', dirPathArg);
2017-06-15 17:25:12 +00:00
}
2016-06-24 00:49:55 +00:00
2017-06-15 17:25:12 +00:00
/**
* read ab SshInstance from disk
*/
2018-09-17 20:32:31 +00:00
readFromDisk(dirPathArg?: string) {
this._sync('from', dirPathArg);
2017-06-15 17:25:12 +00:00
}
2016-06-24 00:49:55 +00:00
2017-06-15 17:25:12 +00:00
/* ===============================================================
========================= Private Methods ========================
================================================================*/
2016-06-24 18:58:55 +00:00
2017-06-15 17:25:12 +00:00
/**
* method to invoke SshInstance _sync automatically when sshSync is true
*/
2018-09-17 20:32:31 +00:00
private _syncAuto(directionArg: 'from' | 'to') {
if (this._sshSync) {
// if auto sync is not enabled, do nothing
this._sync(directionArg);
}
2017-06-15 17:25:12 +00:00
}
2016-06-24 00:49:55 +00:00
2017-06-15 17:25:12 +00:00
/**
* private method to sync SshInstance
*/
2018-09-17 20:32:31 +00:00
private _sync(directionArg: 'from' | 'to', dirPathArg?: string) {
2017-06-15 17:25:12 +00:00
if (directionArg === 'from') {
2018-09-17 20:32:31 +00:00
this._sshDir.readFromDir(dirPathArg); // call sync method of sshDir class;
2017-06-15 17:25:12 +00:00
} else if (directionArg === 'to') {
2018-09-17 20:32:31 +00:00
this._sshDir.writeToDir(dirPathArg);
2017-06-15 17:25:12 +00:00
}
2018-09-17 20:32:31 +00:00
}
2016-05-31 17:00:52 +00:00
}