UNPKG

tabby-sftp-tab

Version:

Plugin that allows you to open sftp tab like SecureCRT

1,086 lines (937 loc) 47 kB
(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__) => { "use strict"; /** * 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__) => { "use strict"; /*! * 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) => { "use strict"; /*! * 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__) => { "use strict"; /*! * 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__) => { "use strict"; __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__) => { "use strict"; __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__) => { "use strict"; __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__) => { "use strict"; __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__) => { "use strict"; __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__) => { "use strict"; __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__) => { "use strict"; __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__) => { "use strict"; __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__) => { "use strict"; __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) => { "use strict"; module.exports = __WEBPACK_EXTERNAL_MODULE__angular_common__; /***/ }), /***/ "@angular/core": /*!********************************!*\ !*** external "@angular/core" ***! \********************************/ /***/ ((module) => { "use strict"; module.exports = __WEBPACK_EXTERNAL_MODULE__angular_core__; /***/ }), /***/ "@angular/forms": /*!*********************************!*\ !*** external "@angular/forms" ***! \*********************************/ /***/ ((module) => { "use strict"; module.exports = __WEBPACK_EXTERNAL_MODULE__angular_forms__; /***/ }), /***/ "@ng-bootstrap/ng-bootstrap": /*!*********************************************!*\ !*** external "@ng-bootstrap/ng-bootstrap" ***! \*********************************************/ /***/ ((module) => { "use strict"; module.exports = __WEBPACK_EXTERNAL_MODULE__ng_bootstrap_ng_bootstrap__; /***/ }), /***/ "tabby-core": /*!*****************************!*\ !*** external "tabby-core" ***! \*****************************/ /***/ ((module) => { "use strict"; module.exports = __WEBPACK_EXTERNAL_MODULE_tabby_core__; /***/ }), /***/ "tabby-settings": /*!*********************************!*\ !*** external "tabby-settings" ***! \*********************************/ /***/ ((module) => { "use strict"; 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. (() => { "use strict"; /*!**********************!*\ !*** ./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