tabby-sftp-tab
Version:
Plugin that allows you to open sftp tab like SecureCRT
1,086 lines (937 loc) • 47 kB
JavaScript
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory(require("@angular/core"), require("@angular/common"), require("@angular/forms"), require("@ng-bootstrap/ng-bootstrap"), require("tabby-core"), require("tabby-settings"));
else if(typeof define === 'function' && define.amd)
define(["@angular/core", "@angular/common", "@angular/forms", "@ng-bootstrap/ng-bootstrap", "tabby-core", "tabby-settings"], factory);
else {
var a = typeof exports === 'object' ? factory(require("@angular/core"), require("@angular/common"), require("@angular/forms"), require("@ng-bootstrap/ng-bootstrap"), require("tabby-core"), require("tabby-settings")) : factory(root["@angular/core"], root["@angular/common"], root["@angular/forms"], root["@ng-bootstrap/ng-bootstrap"], root["tabby-core"], root["tabby-settings"]);
for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];
}
})(global, (__WEBPACK_EXTERNAL_MODULE__angular_core__, __WEBPACK_EXTERNAL_MODULE__angular_common__, __WEBPACK_EXTERNAL_MODULE__angular_forms__, __WEBPACK_EXTERNAL_MODULE__ng_bootstrap_ng_bootstrap__, __WEBPACK_EXTERNAL_MODULE_tabby_core__, __WEBPACK_EXTERNAL_MODULE_tabby_settings__) => {
return /******/ (() => { // webpackBootstrap
/******/ var __webpack_modules__ = ({
/***/ "./node_modules/clone-deep/index.js":
/*!******************************************!*\
!*** ./node_modules/clone-deep/index.js ***!
\******************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
;
/**
* Module dependenices
*/
const clone = __webpack_require__(/*! shallow-clone */ "./node_modules/shallow-clone/index.js");
const typeOf = __webpack_require__(/*! kind-of */ "./node_modules/kind-of/index.js");
const isPlainObject = __webpack_require__(/*! is-plain-object */ "./node_modules/is-plain-object/index.js");
function cloneDeep(val, instanceClone) {
switch (typeOf(val)) {
case 'object':
return cloneObjectDeep(val, instanceClone);
case 'array':
return cloneArrayDeep(val, instanceClone);
default: {
return clone(val);
}
}
}
function cloneObjectDeep(val, instanceClone) {
if (typeof instanceClone === 'function') {
return instanceClone(val);
}
if (instanceClone || isPlainObject(val)) {
const res = new val.constructor();
for (let key in val) {
res[key] = cloneDeep(val[key], instanceClone);
}
return res;
}
return val;
}
function cloneArrayDeep(val, instanceClone) {
const res = new val.constructor(val.length);
for (let i = 0; i < val.length; i++) {
res[i] = cloneDeep(val[i], instanceClone);
}
return res;
}
/**
* Expose `cloneDeep`
*/
module.exports = cloneDeep;
/***/ }),
/***/ "./node_modules/is-plain-object/index.js":
/*!***********************************************!*\
!*** ./node_modules/is-plain-object/index.js ***!
\***********************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
;
/*!
* is-plain-object <https://github.com/jonschlinkert/is-plain-object>
*
* Copyright (c) 2014-2017, Jon Schlinkert.
* Released under the MIT License.
*/
var isObject = __webpack_require__(/*! isobject */ "./node_modules/isobject/index.js");
function isObjectObject(o) {
return isObject(o) === true
&& Object.prototype.toString.call(o) === '[object Object]';
}
module.exports = function isPlainObject(o) {
var ctor,prot;
if (isObjectObject(o) === false) return false;
// If has modified constructor
ctor = o.constructor;
if (typeof ctor !== 'function') return false;
// If has modified prototype
prot = ctor.prototype;
if (isObjectObject(prot) === false) return false;
// If constructor does not have an Object-specific method
if (prot.hasOwnProperty('isPrototypeOf') === false) {
return false;
}
// Most likely a plain Object
return true;
};
/***/ }),
/***/ "./node_modules/isobject/index.js":
/*!****************************************!*\
!*** ./node_modules/isobject/index.js ***!
\****************************************/
/***/ ((module) => {
;
/*!
* isobject <https://github.com/jonschlinkert/isobject>
*
* Copyright (c) 2014-2017, Jon Schlinkert.
* Released under the MIT License.
*/
module.exports = function isObject(val) {
return val != null && typeof val === 'object' && Array.isArray(val) === false;
};
/***/ }),
/***/ "./node_modules/kind-of/index.js":
/*!***************************************!*\
!*** ./node_modules/kind-of/index.js ***!
\***************************************/
/***/ ((module) => {
var toString = Object.prototype.toString;
module.exports = function kindOf(val) {
if (val === void 0) return 'undefined';
if (val === null) return 'null';
var type = typeof val;
if (type === 'boolean') return 'boolean';
if (type === 'string') return 'string';
if (type === 'number') return 'number';
if (type === 'symbol') return 'symbol';
if (type === 'function') {
return isGeneratorFn(val) ? 'generatorfunction' : 'function';
}
if (isArray(val)) return 'array';
if (isBuffer(val)) return 'buffer';
if (isArguments(val)) return 'arguments';
if (isDate(val)) return 'date';
if (isError(val)) return 'error';
if (isRegexp(val)) return 'regexp';
switch (ctorName(val)) {
case 'Symbol': return 'symbol';
case 'Promise': return 'promise';
// Set, Map, WeakSet, WeakMap
case 'WeakMap': return 'weakmap';
case 'WeakSet': return 'weakset';
case 'Map': return 'map';
case 'Set': return 'set';
// 8-bit typed arrays
case 'Int8Array': return 'int8array';
case 'Uint8Array': return 'uint8array';
case 'Uint8ClampedArray': return 'uint8clampedarray';
// 16-bit typed arrays
case 'Int16Array': return 'int16array';
case 'Uint16Array': return 'uint16array';
// 32-bit typed arrays
case 'Int32Array': return 'int32array';
case 'Uint32Array': return 'uint32array';
case 'Float32Array': return 'float32array';
case 'Float64Array': return 'float64array';
}
if (isGeneratorObj(val)) {
return 'generator';
}
// Non-plain objects
type = toString.call(val);
switch (type) {
case '[object Object]': return 'object';
// iterators
case '[object Map Iterator]': return 'mapiterator';
case '[object Set Iterator]': return 'setiterator';
case '[object String Iterator]': return 'stringiterator';
case '[object Array Iterator]': return 'arrayiterator';
}
// other
return type.slice(8, -1).toLowerCase().replace(/\s/g, '');
};
function ctorName(val) {
return typeof val.constructor === 'function' ? val.constructor.name : null;
}
function isArray(val) {
if (Array.isArray) return Array.isArray(val);
return val instanceof Array;
}
function isError(val) {
return val instanceof Error || (typeof val.message === 'string' && val.constructor && typeof val.constructor.stackTraceLimit === 'number');
}
function isDate(val) {
if (val instanceof Date) return true;
return typeof val.toDateString === 'function'
&& typeof val.getDate === 'function'
&& typeof val.setDate === 'function';
}
function isRegexp(val) {
if (val instanceof RegExp) return true;
return typeof val.flags === 'string'
&& typeof val.ignoreCase === 'boolean'
&& typeof val.multiline === 'boolean'
&& typeof val.global === 'boolean';
}
function isGeneratorFn(name, val) {
return ctorName(name) === 'GeneratorFunction';
}
function isGeneratorObj(val) {
return typeof val.throw === 'function'
&& typeof val.return === 'function'
&& typeof val.next === 'function';
}
function isArguments(val) {
try {
if (typeof val.length === 'number' && typeof val.callee === 'function') {
return true;
}
} catch (err) {
if (err.message.indexOf('callee') !== -1) {
return true;
}
}
return false;
}
/**
* If you need to support Safari 5-7 (8-10 yr-old browser),
* take a look at https://github.com/feross/is-buffer
*/
function isBuffer(val) {
if (val.constructor && typeof val.constructor.isBuffer === 'function') {
return val.constructor.isBuffer(val);
}
return false;
}
/***/ }),
/***/ "./node_modules/shallow-clone/index.js":
/*!*********************************************!*\
!*** ./node_modules/shallow-clone/index.js ***!
\*********************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
;
/*!
* shallow-clone <https://github.com/jonschlinkert/shallow-clone>
*
* Copyright (c) 2015-present, Jon Schlinkert.
* Released under the MIT License.
*/
const valueOf = Symbol.prototype.valueOf;
const typeOf = __webpack_require__(/*! kind-of */ "./node_modules/kind-of/index.js");
function clone(val, deep) {
switch (typeOf(val)) {
case 'array':
return val.slice();
case 'object':
return Object.assign({}, val);
case 'date':
return new val.constructor(Number(val));
case 'map':
return new Map(val);
case 'set':
return new Set(val);
case 'buffer':
return cloneBuffer(val);
case 'symbol':
return cloneSymbol(val);
case 'arraybuffer':
return cloneArrayBuffer(val);
case 'float32array':
case 'float64array':
case 'int16array':
case 'int32array':
case 'int8array':
case 'uint16array':
case 'uint32array':
case 'uint8clampedarray':
case 'uint8array':
return cloneTypedArray(val);
case 'regexp':
return cloneRegExp(val);
case 'error':
return Object.create(val);
default: {
return val;
}
}
}
function cloneRegExp(val) {
const flags = val.flags !== void 0 ? val.flags : (/\w+$/.exec(val) || void 0);
const re = new val.constructor(val.source, flags);
re.lastIndex = val.lastIndex;
return re;
}
function cloneArrayBuffer(val) {
const res = new val.constructor(val.byteLength);
new Uint8Array(res).set(new Uint8Array(val));
return res;
}
function cloneTypedArray(val, deep) {
return new val.constructor(val.buffer, val.byteOffset, val.length);
}
function cloneBuffer(val) {
const len = val.length;
const buf = Buffer.allocUnsafe ? Buffer.allocUnsafe(len) : Buffer.from(len);
val.copy(buf);
return buf;
}
function cloneSymbol(val) {
return valueOf ? Object(valueOf.call(val)) : {};
}
/**
* Expose `clone`
*/
module.exports = clone;
/***/ }),
/***/ "./src/config.ts":
/*!***********************!*\
!*** ./src/config.ts ***!
\***********************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
;
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ SftpTabConfigProvider: () => (/* binding */ SftpTabConfigProvider)
/* harmony export */ });
/* harmony import */ var tabby_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tabby-core */ "tabby-core");
/* harmony import */ var tabby_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(tabby_core__WEBPACK_IMPORTED_MODULE_0__);
/** @hidden */
class SftpTabConfigProvider extends tabby_core__WEBPACK_IMPORTED_MODULE_0__.ConfigProvider {
constructor() {
super(...arguments);
this.platformDefaults = {
[tabby_core__WEBPACK_IMPORTED_MODULE_0__.Platform.macOS]: (__webpack_require__(/*! ./configDefaults.macos.yaml */ "./src/configDefaults.macos.yaml")["default"]),
[tabby_core__WEBPACK_IMPORTED_MODULE_0__.Platform.Windows]: (__webpack_require__(/*! ./configDefaults.windows.yaml */ "./src/configDefaults.windows.yaml")["default"]),
[tabby_core__WEBPACK_IMPORTED_MODULE_0__.Platform.Linux]: (__webpack_require__(/*! ./configDefaults.linux.yaml */ "./src/configDefaults.linux.yaml")["default"]),
[tabby_core__WEBPACK_IMPORTED_MODULE_0__.Platform.Web]: (__webpack_require__(/*! ./configDefaults.web.yaml */ "./src/configDefaults.web.yaml")["default"]),
};
this.defaults = (__webpack_require__(/*! ./configDefaults.yaml */ "./src/configDefaults.yaml")["default"]);
}
}
/***/ }),
/***/ "./src/contextMenu.ts":
/*!****************************!*\
!*** ./src/contextMenu.ts ***!
\****************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
;
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ SftptabContextMenuProvider: () => (/* binding */ SftptabContextMenuProvider)
/* harmony export */ });
/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "@angular/core");
/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_angular_core__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var tabby_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! tabby-core */ "tabby-core");
/* harmony import */ var tabby_core__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(tabby_core__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _services_sftpTab_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./services/sftpTab.service */ "./src/services/sftpTab.service.ts");
var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (undefined && undefined.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
// import { Logger,LogService } from 'tabby-core';
let SftptabContextMenuProvider = class SftptabContextMenuProvider extends tabby_core__WEBPACK_IMPORTED_MODULE_1__.TabContextMenuItemProvider {
// private logger: Logger;
constructor(
// private log: LogService
sftptab) {
super();
this.sftptab = sftptab;
// this.logger = log.create('open-sftp-tab-context-menu');
}
getItems(tab) {
return __awaiter(this, void 0, void 0, function* () {
return [
{
label: 'Open Sftp Tab',
click: () => {
this.sftptab.opensftp(tab);
// this.logger("succ")
},
},
];
});
}
};
SftptabContextMenuProvider = __decorate([
(0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.Injectable)(),
__metadata("design:paramtypes", [_services_sftpTab_service__WEBPACK_IMPORTED_MODULE_2__.SftpTabService])
], SftptabContextMenuProvider);
/***/ }),
/***/ "./src/hotkey.ts":
/*!***********************!*\
!*** ./src/hotkey.ts ***!
\***********************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
;
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ SftpTabHotkeyProvider: () => (/* binding */ SftpTabHotkeyProvider)
/* harmony export */ });
/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "@angular/core");
/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_angular_core__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var tabby_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! tabby-core */ "tabby-core");
/* harmony import */ var tabby_core__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(tabby_core__WEBPACK_IMPORTED_MODULE_1__);
var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
/** @hidden */
let SftpTabHotkeyProvider = class SftpTabHotkeyProvider extends tabby_core__WEBPACK_IMPORTED_MODULE_1__.HotkeyProvider {
provide() {
return __awaiter(this, void 0, void 0, function* () {
return [
{
id: 'open-sftp-tab',
name: 'open sftp tab like SecureCRT',
},
];
});
}
};
SftpTabHotkeyProvider = __decorate([
(0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.Injectable)()
], SftpTabHotkeyProvider);
/***/ }),
/***/ "./src/services/sftpTab.service.ts":
/*!*****************************************!*\
!*** ./src/services/sftpTab.service.ts ***!
\*****************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
;
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ SftpTabService: () => (/* binding */ SftpTabService)
/* harmony export */ });
/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "@angular/core");
/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_angular_core__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var tabby_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! tabby-core */ "tabby-core");
/* harmony import */ var tabby_core__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(tabby_core__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var clone_deep__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! clone-deep */ "./node_modules/clone-deep/index.js");
/* harmony import */ var clone_deep__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(clone_deep__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../config */ "./src/config.ts");
/* harmony import */ var tabby_settings__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! tabby-settings */ "tabby-settings");
/* harmony import */ var tabby_settings__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(tabby_settings__WEBPACK_IMPORTED_MODULE_4__);
var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (undefined && undefined.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
// import { Logger, LogService, HotkeysService, HostAppService } from 'tabby-core';
let SftpTabService = class SftpTabService {
constructor(config, app, profilesService, hostApp, hotkeys, tabsService, log) {
this.config = config;
this.app = app;
this.profilesService = profilesService;
this.hostApp = hostApp;
this.hotkeys = hotkeys;
this.tabsService = tabsService;
this.sftpTabConfigProvider = new _config__WEBPACK_IMPORTED_MODULE_3__.SftpTabConfigProvider;
this.logger = log.create('open-sftp-tab');
this.logger.info('starting...');
}
init() {
this.hotkeys.hotkey$.subscribe((h) => __awaiter(this, void 0, void 0, function* () {
if (h === 'open-sftp-tab') {
this.opensftp(null);
}
}));
this.logger.info('init succ!');
this.config.ready$.toPromise().then(() => {
this.tryAddSftpProfilesTemplateToConfigService().then(() => {
this.logger.info('call tryAddSftpProfilesTemplateToConfigService after config.ready');
});
});
}
findFirstSshProfile(token) {
var _a;
// this.logger.info(`token:${token}`, token)
this.logger.info('token:', token);
if (token.type == "app:ssh-tab") {
if (token.profile != null) {
return token.profile;
}
}
if (((_a = token === null || token === void 0 ? void 0 : token.children) === null || _a === void 0 ? void 0 : _a.length) > 0) {
// find first children ssh-tab of origin tab(split-tab)
for (let index = 0; index < token.children.length; index++) {
const curtab = token.children[index];
if (curtab.type == "app:ssh-tab") {
if (curtab.profile != null) {
return curtab.profile;
}
}
}
}
return null;
}
// add sftp profile template to config service and save to config file
tryAddSftpProfilesTemplateToConfigService() {
return __awaiter(this, void 0, void 0, function* () {
let modifiedConfig = false;
this.sftpTabConfigProvider.defaults.profiles.forEach(sftpProfile => {
let find_in_config = false;
this.config.store.profiles.forEach(profile => {
if ((profile === null || profile === void 0 ? void 0 : profile.name) == sftpProfile.name) {
find_in_config = true;
}
});
if (!find_in_config) {
this.config.store.profiles = [...this.config.store.profiles, clone_deep__WEBPACK_IMPORTED_MODULE_2___default()(sftpProfile)];
modifiedConfig = true;
}
});
// set isTemplate to true
this.sftpTabConfigProvider.defaults.profiles.forEach(sftpProfile => {
for (let index = 0; index < this.config.store.profiles.length; index++) {
const profile = this.config.store.profiles[index];
if ((profile === null || profile === void 0 ? void 0 : profile.name) == sftpProfile.name && (profile === null || profile === void 0 ? void 0 : profile.isTemplate) != true) {
profile.isTemplate = true;
modifiedConfig = true;
}
}
});
if (modifiedConfig) {
yield this.config.save();
yield this.config.load();
// If the settings tab is already open, close and reopen the settings tab on the same tabs index.
const settingsTabOld = this.app.tabs.find(tab => tab instanceof tabby_settings__WEBPACK_IMPORTED_MODULE_4__.SettingsTabComponent);
if (settingsTabOld) {
const settingsTabOldIdx = this.app.tabs.indexOf(settingsTabOld);
this.app.closeTab(settingsTabOld);
const settingsTab = this.tabsService.create({ type: tabby_settings__WEBPACK_IMPORTED_MODULE_4__.SettingsTabComponent });
this.app.addTabRaw(settingsTab, settingsTabOldIdx);
// this.app.selectTab(settingsTab)
}
}
});
}
findSftpProfileTemplate() {
return __awaiter(this, void 0, void 0, function* () {
let profileName = "";
if (this.hostApp.platform === tabby_core__WEBPACK_IMPORTED_MODULE_1__.Platform.macOS) {
profileName = "ssh2sftp_mac_template";
}
else if (this.hostApp.platform === tabby_core__WEBPACK_IMPORTED_MODULE_1__.Platform.Linux) {
profileName = "ssh2sftp_linux_template";
}
else if (this.hostApp.platform === tabby_core__WEBPACK_IMPORTED_MODULE_1__.Platform.Windows) {
profileName = "ssh2sftp_win_template";
}
else if (this.hostApp.platform === tabby_core__WEBPACK_IMPORTED_MODULE_1__.Platform.Web) {
return null;
}
let sftpProfileTemplate = (yield this.profilesService.getProfiles()).find(x => x.name === profileName);
if (!sftpProfileTemplate) {
// Attempt to add a default sftp profile when not found
this.logger.warn(`Requested profile ${profileName} not found, try adding ...`, profileName);
yield this.tryAddSftpProfilesTemplateToConfigService();
sftpProfileTemplate = (yield this.profilesService.getProfiles()).find(x => x.name === profileName);
}
return sftpProfileTemplate;
});
}
openSftpImpl(activeTab) {
var _a, _b, _c, _d, _e, _f;
return __awaiter(this, void 0, void 0, function* () {
let ans = null;
if (activeTab == null) {
activeTab = this.app.activeTab;
}
let sftpProfileTemplate = yield this.findSftpProfileTemplate();
if (!sftpProfileTemplate) {
// Report an error if it cannot be found the second time
this.logger.warn(`Requested profile ${sftpProfileTemplate} not found`, sftpProfileTemplate);
return null;
}
else {
let sftpProfile = clone_deep__WEBPACK_IMPORTED_MODULE_2___default()(sftpProfileTemplate);
const token = yield activeTab.getRecoveryToken();
let sshprofile = this.findFirstSshProfile(token);
if (sshprofile != null) {
sftpProfile.name = "sftp_" + (sshprofile === null || sshprofile === void 0 ? void 0 : sshprofile.name);
if ((sftpProfile === null || sftpProfile === void 0 ? void 0 : sftpProfile.options) && (sshprofile === null || sshprofile === void 0 ? void 0 : sshprofile.options)) {
let args = sftpProfile.options["args"];
if (args) {
// only support multiple jump hosts of type ProxyCommand and ProxyJump in .ssh/config
if ((((_a = sshprofile.options) === null || _a === void 0 ? void 0 : _a.proxyCommand) != null || ((_b = sshprofile.options) === null || _b === void 0 ? void 0 : _b.jumpHost) != null) &&
((sshprofile === null || sshprofile === void 0 ? void 0 : sshprofile.id) != null && sshprofile.id.startsWith('openssh-config:'))) {
args.push(sshprofile.id.replace('openssh-config:', ''));
}
else {
if (((_c = sshprofile.options) === null || _c === void 0 ? void 0 : _c.privateKeys) != null) {
const privateKeys = sshprofile.options.privateKeys;
privateKeys.forEach(privateKey => {
args.push("-i");
args.push(privateKey);
});
}
if (((_d = sshprofile.options) === null || _d === void 0 ? void 0 : _d.port) != null) {
const port = sshprofile.options.port;
if (port > 0) {
args.push("-P");
args.push(port.toString());
}
}
let user = '';
if (((_e = sshprofile.options) === null || _e === void 0 ? void 0 : _e.user) != null) {
user = sshprofile.options.user;
}
let host = '';
if (((_f = sshprofile.options) === null || _f === void 0 ? void 0 : _f.host) != null) {
host = sshprofile.options.host;
}
if (host != '') {
if (user != '') {
args.push(`${user}@${host}`);
}
else {
args.push(host);
}
}
}
}
this.logger.info('sftp args:', args);
}
// this.logger.debug('sftpProfile:', sftpProfile)
let params = yield this.profilesService.newTabParametersForProfile(sftpProfile);
// this.logger.debug('params:', params)
if (params) {
const sftptab = this.tabsService.create(params);
if (sftptab) {
const splitTab = this.tabsService.create({ type: tabby_core__WEBPACK_IMPORTED_MODULE_1__.SplitTabComponent });
splitTab.addTab(sftptab, null, 'r');
this.app.addTabRaw(splitTab, this.app.tabs.indexOf(activeTab) + 1);
this.app.selectTab(splitTab);
splitTab.focus(sftptab);
ans = splitTab;
this.logger.info('open sftp tab for ssh profile succ');
}
}
return ans;
}
else {
this.logger.warn('open sftp tab just for ssh profile connection. can not find ssh profile! can not open sftp tab!!!');
}
}
return ans;
});
}
opensftp(activeTab) {
this.logger.info('try open sftp tab for ssh profile');
this.openSftpImpl(activeTab).then((baseTabComponent) => {
if (baseTabComponent == null) {
this.logger.error('open sftp tab for ssh profile error!!!');
}
});
}
};
SftpTabService = __decorate([
(0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.Injectable)(),
__metadata("design:paramtypes", [tabby_core__WEBPACK_IMPORTED_MODULE_1__.ConfigService,
tabby_core__WEBPACK_IMPORTED_MODULE_1__.AppService,
tabby_core__WEBPACK_IMPORTED_MODULE_1__.ProfilesService,
tabby_core__WEBPACK_IMPORTED_MODULE_1__.HostAppService,
tabby_core__WEBPACK_IMPORTED_MODULE_1__.HotkeysService,
tabby_core__WEBPACK_IMPORTED_MODULE_1__.TabsService,
tabby_core__WEBPACK_IMPORTED_MODULE_1__.LogService])
], SftpTabService);
/***/ }),
/***/ "./src/configDefaults.linux.yaml":
/*!***************************************!*\
!*** ./src/configDefaults.linux.yaml ***!
\***************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
;
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({hotkeys:{'open-sftp-tab':['Ctrl-Shift-S']}});
/***/ }),
/***/ "./src/configDefaults.macos.yaml":
/*!***************************************!*\
!*** ./src/configDefaults.macos.yaml ***!
\***************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
;
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({hotkeys:{'open-sftp-tab':['Ctrl-Shift-S']}});
/***/ }),
/***/ "./src/configDefaults.web.yaml":
/*!*************************************!*\
!*** ./src/configDefaults.web.yaml ***!
\*************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
;
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (null);
/***/ }),
/***/ "./src/configDefaults.windows.yaml":
/*!*****************************************!*\
!*** ./src/configDefaults.windows.yaml ***!
\*****************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
;
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({hotkeys:{'open-sftp-tab':['Ctrl-Shift-S']}});
/***/ }),
/***/ "./src/configDefaults.yaml":
/*!*********************************!*\
!*** ./src/configDefaults.yaml ***!
\*********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
;
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({profiles:[{type:'local',name:'ssh2sftp_win_template',icon:'fas fa-terminal',options:{command:'c:\\Git\\usr\\bin\\sftp.exe',env:{},cwd:'',args:['-oStrictHostKeyChecking=no','-oServerAliveInterval=30','-oServerAliveCountMax=1051200','-oTCPKeepAlive=yes']},group:'ssh2sftp_template',id:'local:custom:ssh2sftp_win_template:c617da05-d05c-482d-8ca6-3c7eb99452e9',disableDynamicTitle:true,isTemplate:true},{type:'local',name:'ssh2sftp_linux_template',icon:'fas fa-terminal',options:{command:'/usr/bin/sftp',env:{},cwd:'',args:['-oStrictHostKeyChecking=no','-oServerAliveInterval=30','-oServerAliveCountMax=1051200','-oTCPKeepAlive=yes']},group:'ssh2sftp_template',id:'local:custom:ssh2sftp_linux_template:6c4bcc75-f690-482a-a882-40e1c9851a3d',disableDynamicTitle:true,isTemplate:true},{type:'local',name:'ssh2sftp_mac_template',icon:'fas fa-terminal',options:{command:'/usr/local/opt/openssh/bin/sftp',args:['-oStrictHostKeyChecking=no','-oServerAliveInterval=30','-oServerAliveCountMax=1051200','-oTCPKeepAlive=yes'],env:{},cwd:''},id:'local:custom:ssh2sftp_mac_template:33162a26-7807-4c5e-ac2d-68cd2d9a4a24',group:'ssh2sftp_template',disableDynamicTitle:true,isTemplate:true}]});
/***/ }),
/***/ "@angular/common":
/*!**********************************!*\
!*** external "@angular/common" ***!
\**********************************/
/***/ ((module) => {
;
module.exports = __WEBPACK_EXTERNAL_MODULE__angular_common__;
/***/ }),
/***/ "@angular/core":
/*!********************************!*\
!*** external "@angular/core" ***!
\********************************/
/***/ ((module) => {
;
module.exports = __WEBPACK_EXTERNAL_MODULE__angular_core__;
/***/ }),
/***/ "@angular/forms":
/*!*********************************!*\
!*** external "@angular/forms" ***!
\*********************************/
/***/ ((module) => {
;
module.exports = __WEBPACK_EXTERNAL_MODULE__angular_forms__;
/***/ }),
/***/ "@ng-bootstrap/ng-bootstrap":
/*!*********************************************!*\
!*** external "@ng-bootstrap/ng-bootstrap" ***!
\*********************************************/
/***/ ((module) => {
;
module.exports = __WEBPACK_EXTERNAL_MODULE__ng_bootstrap_ng_bootstrap__;
/***/ }),
/***/ "tabby-core":
/*!*****************************!*\
!*** external "tabby-core" ***!
\*****************************/
/***/ ((module) => {
;
module.exports = __WEBPACK_EXTERNAL_MODULE_tabby_core__;
/***/ }),
/***/ "tabby-settings":
/*!*********************************!*\
!*** external "tabby-settings" ***!
\*********************************/
/***/ ((module) => {
;
module.exports = __WEBPACK_EXTERNAL_MODULE_tabby_settings__;
/***/ })
/******/ });
/************************************************************************/
/******/ // The module cache
/******/ var __webpack_module_cache__ = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // Check if module is in cache
/******/ var cachedModule = __webpack_module_cache__[moduleId];
/******/ if (cachedModule !== undefined) {
/******/ return cachedModule.exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = __webpack_module_cache__[moduleId] = {
/******/ // no module.id needed
/******/ // no module.loaded needed
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/************************************************************************/
/******/ /* webpack/runtime/compat get default export */
/******/ (() => {
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = (module) => {
/******/ var getter = module && module.__esModule ?
/******/ () => (module['default']) :
/******/ () => (module);
/******/ __webpack_require__.d(getter, { a: getter });
/******/ return getter;
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/define property getters */
/******/ (() => {
/******/ // define getter functions for harmony exports
/******/ __webpack_require__.d = (exports, definition) => {
/******/ for(var key in definition) {
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ }
/******/ }
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/hasOwnProperty shorthand */
/******/ (() => {
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ })();
/******/
/******/ /* webpack/runtime/make namespace object */
/******/ (() => {
/******/ // define __esModule on exports
/******/ __webpack_require__.r = (exports) => {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/ })();
/******/
/************************************************************************/
var __webpack_exports__ = {};
// This entry need to be wrapped in an IIFE because it need to be in strict mode.
(() => {
;
/*!**********************!*\
!*** ./src/index.ts ***!
\**********************/
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "@angular/core");
/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_angular_core__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/common */ "@angular/common");
/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_angular_common__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _angular_forms__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/forms */ "@angular/forms");
/* harmony import */ var _angular_forms__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_angular_forms__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _ng_bootstrap_ng_bootstrap__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @ng-bootstrap/ng-bootstrap */ "@ng-bootstrap/ng-bootstrap");
/* harmony import */ var _ng_bootstrap_ng_bootstrap__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_ng_bootstrap_ng_bootstrap__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var tabby_core__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! tabby-core */ "tabby-core");
/* harmony import */ var tabby_core__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(tabby_core__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _hotkey__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./hotkey */ "./src/hotkey.ts");
/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./config */ "./src/config.ts");
/* harmony import */ var _contextMenu__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./contextMenu */ "./src/contextMenu.ts");
/* harmony import */ var _services_sftpTab_service__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./services/sftpTab.service */ "./src/services/sftpTab.service.ts");
var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (undefined && undefined.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
let SftpTabModule = class SftpTabModule {
constructor(service) {
this.service = service;
this.service.init();
}
};
SftpTabModule = __decorate([
(0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.NgModule)({
imports: [_angular_common__WEBPACK_IMPORTED_MODULE_1__.CommonModule, _angular_forms__WEBPACK_IMPORTED_MODULE_2__.FormsModule, (tabby_core__WEBPACK_IMPORTED_MODULE_4___default()), _ng_bootstrap_ng_bootstrap__WEBPACK_IMPORTED_MODULE_3__.NgbModule],
providers: [
_services_sftpTab_service__WEBPACK_IMPORTED_MODULE_8__.SftpTabService,
{
provide: tabby_core__WEBPACK_IMPORTED_MODULE_4__.HotkeyProvider,
useClass: _hotkey__WEBPACK_IMPORTED_MODULE_5__.SftpTabHotkeyProvider,
multi: true,
},
{ provide: tabby_core__WEBPACK_IMPORTED_MODULE_4__.TabContextMenuItemProvider, useClass: _contextMenu__WEBPACK_IMPORTED_MODULE_7__.SftptabContextMenuProvider, multi: true },
{
provide: tabby_core__WEBPACK_IMPORTED_MODULE_4__.ConfigProvider,
useClass: _config__WEBPACK_IMPORTED_MODULE_6__.SftpTabConfigProvider,
multi: true,
},
],
}),
__metadata("design:paramtypes", [_services_sftpTab_service__WEBPACK_IMPORTED_MODULE_8__.SftpTabService])
], SftpTabModule);
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SftpTabModule);
})();
/******/ return __webpack_exports__;
/******/ })()
;
});
//# sourceMappingURL=index.js.map