Compare commits
17 Commits
Author | SHA1 | Date | |
---|---|---|---|
56318f28cf | |||
32b26f21cd | |||
32c2698af7 | |||
27237f14c7 | |||
8f29f234f1 | |||
5091625953 | |||
f74b3a51b0 | |||
062f3ad060 | |||
ecd0fd8fad | |||
742bf694e4 | |||
38165f11db | |||
ef2b31b4b2 | |||
5b1f800067 | |||
6339a3ed9b | |||
bf27aaf167 | |||
9bc3aea59c | |||
f5ff302d4d |
8
.gitignore
vendored
8
.gitignore
vendored
@ -1,7 +1,5 @@
|
|||||||
.idea/
|
|
||||||
node_modules/
|
node_modules/
|
||||||
coverage/
|
coverage/
|
||||||
docs/
|
pages/
|
||||||
ts/typings/
|
public/
|
||||||
ts/*.js
|
test/temp/
|
||||||
ts/*.js.map
|
|
||||||
|
@ -3,7 +3,16 @@ image: hosttoday/ht-docker-node:npmts
|
|||||||
stages:
|
stages:
|
||||||
- test
|
- test
|
||||||
- release
|
- release
|
||||||
- page
|
- trigger
|
||||||
|
- pages
|
||||||
|
|
||||||
|
testLEGACY:
|
||||||
|
stage: test
|
||||||
|
script:
|
||||||
|
- npmci test legacy
|
||||||
|
tags:
|
||||||
|
- docker
|
||||||
|
allow_failure: true
|
||||||
|
|
||||||
testLTS:
|
testLTS:
|
||||||
stage: test
|
stage: test
|
||||||
@ -11,7 +20,6 @@ testLTS:
|
|||||||
- npmci test lts
|
- npmci test lts
|
||||||
tags:
|
tags:
|
||||||
- docker
|
- docker
|
||||||
- lossless
|
|
||||||
|
|
||||||
testSTABLE:
|
testSTABLE:
|
||||||
stage: test
|
stage: test
|
||||||
@ -19,13 +27,6 @@ testSTABLE:
|
|||||||
- npmci test stable
|
- npmci test stable
|
||||||
tags:
|
tags:
|
||||||
- docker
|
- docker
|
||||||
- lossless
|
|
||||||
|
|
||||||
testLEGACY:
|
|
||||||
stage: test
|
|
||||||
script:
|
|
||||||
- npmci test legacy
|
|
||||||
allow_failure: true
|
|
||||||
|
|
||||||
release:
|
release:
|
||||||
stage: release
|
stage: release
|
||||||
@ -35,4 +36,24 @@ release:
|
|||||||
- tags
|
- tags
|
||||||
tags:
|
tags:
|
||||||
- docker
|
- docker
|
||||||
- lossless
|
|
||||||
|
trigger:
|
||||||
|
stage: trigger
|
||||||
|
script:
|
||||||
|
- npmci trigger
|
||||||
|
only:
|
||||||
|
- tags
|
||||||
|
tags:
|
||||||
|
- docker
|
||||||
|
|
||||||
|
pages:
|
||||||
|
image: hosttoday/ht-docker-node:npmpage
|
||||||
|
stage: pages
|
||||||
|
script:
|
||||||
|
- npmci command npmpage --host gitlab
|
||||||
|
only:
|
||||||
|
- tags
|
||||||
|
artifacts:
|
||||||
|
expire_in: 1 week
|
||||||
|
paths:
|
||||||
|
- public
|
||||||
|
5
Dockerfile
Normal file
5
Dockerfile
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
FROM hosttoday/ht-docker-node:npmts
|
||||||
|
COPY ./ /node-app
|
||||||
|
WORKDIR /node-app
|
||||||
|
RUN npm install
|
||||||
|
RUN npmts
|
19
README.md
19
README.md
@ -3,6 +3,23 @@ setups SSH quickly and in a painless manner
|
|||||||
|
|
||||||
> Attention: This is still alpha, so some things won't work, not all things are inplemented.
|
> Attention: This is still alpha, so some things won't work, not all things are inplemented.
|
||||||
|
|
||||||
|
## Availabililty
|
||||||
|
[](https://www.npmjs.com/package/smartssh)
|
||||||
|
[](https://gitlab.com/pushrocks/smartssh)
|
||||||
|
[](https://github.com/pushrocks/smartssh)
|
||||||
|
[](https://pushrocks.gitlab.io/smartssh/)
|
||||||
|
|
||||||
|
## Status for master
|
||||||
|
[](https://gitlab.com/pushrocks/smartssh/commits/master)
|
||||||
|
[](https://gitlab.com/pushrocks/smartssh/commits/master)
|
||||||
|
[](https://www.npmjs.com/package/smartssh)
|
||||||
|
[](https://david-dm.org/pushrocks/smartssh)
|
||||||
|
[](https://www.bithound.io/github/pushrocks/smartssh/master/dependencies/npm)
|
||||||
|
[](https://www.bithound.io/github/pushrocks/smartssh)
|
||||||
|
[](https://nodejs.org/dist/latest-v6.x/docs/api/)
|
||||||
|
[](https://nodejs.org/dist/latest-v6.x/docs/api/)
|
||||||
|
[](http://standardjs.com/)
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
@ -32,3 +49,5 @@ sshInstance.getKey({ // returns ssh key in the form sshKey, read more about the
|
|||||||
sshInstance.getKeys() // returns array of all available getKeys. Each key is in form of class sshKey
|
sshInstance.getKeys() // returns array of all available getKeys. Each key is in form of class sshKey
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
[](https://push.rocks)
|
||||||
|
10
dist/index.d.ts
vendored
10
dist/index.d.ts
vendored
@ -1,5 +1,5 @@
|
|||||||
import "typings-global";
|
import 'typings-global';
|
||||||
export { SshInstance } from "./smartssh.classes.sshinstance";
|
export { SshInstance } from './smartssh.classes.sshinstance';
|
||||||
export { SshKey } from "./smartssh.classes.sshkey";
|
export { SshKey } from './smartssh.classes.sshkey';
|
||||||
export { SshDir } from "./smartssh.classes.sshdir";
|
export { SshDir } from './smartssh.classes.sshdir';
|
||||||
export { SshConfig } from "./smartssh.classes.sshconfig";
|
export { SshConfig } from './smartssh.classes.sshconfig';
|
||||||
|
3
dist/index.js
vendored
3
dist/index.js
vendored
@ -8,5 +8,4 @@ var smartssh_classes_sshdir_1 = require("./smartssh.classes.sshdir");
|
|||||||
exports.SshDir = smartssh_classes_sshdir_1.SshDir;
|
exports.SshDir = smartssh_classes_sshdir_1.SshDir;
|
||||||
var smartssh_classes_sshconfig_1 = require("./smartssh.classes.sshconfig");
|
var smartssh_classes_sshconfig_1 = require("./smartssh.classes.sshconfig");
|
||||||
exports.SshConfig = smartssh_classes_sshconfig_1.SshConfig;
|
exports.SshConfig = smartssh_classes_sshconfig_1.SshConfig;
|
||||||
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsMEJBQXVCO0FBR3ZCLCtFQUEwRDtBQUFsRCxxREFBQSxXQUFXLENBQUE7QUFDbkIscUVBQWdEO0FBQXhDLDJDQUFBLE1BQU0sQ0FBQTtBQUNkLHFFQUFnRDtBQUF4QywyQ0FBQSxNQUFNLENBQUE7QUFDZCwyRUFBc0Q7QUFBOUMsaURBQUEsU0FBUyxDQUFBIn0=
|
||||||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxRQUFPLGdCQUNQLENBQUMsQ0FEc0I7QUFHdkIsNkNBQTBCLGdDQUFnQyxDQUFDO0FBQW5ELGlFQUFtRDtBQUMzRCx3Q0FBcUIsMkJBQTJCLENBQUM7QUFBekMsa0RBQXlDO0FBQ2pELHdDQUFxQiwyQkFBMkIsQ0FBQztBQUF6QyxrREFBeUM7QUFDakQsMkNBQXdCLDhCQUE4QixDQUFDO0FBQS9DLDJEQUErQyIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBcInR5cGluZ3MtZ2xvYmFsXCJcbmltcG9ydCAqIGFzIHBsdWdpbnMgZnJvbSBcIi4vc21hcnRzc2gucGx1Z2luc1wiO1xuXG5leHBvcnQge1NzaEluc3RhbmNlfSBmcm9tIFwiLi9zbWFydHNzaC5jbGFzc2VzLnNzaGluc3RhbmNlXCI7XG5leHBvcnQge1NzaEtleX0gZnJvbSBcIi4vc21hcnRzc2guY2xhc3Nlcy5zc2hrZXlcIjtcbmV4cG9ydCB7U3NoRGlyfSBmcm9tIFwiLi9zbWFydHNzaC5jbGFzc2VzLnNzaGRpclwiO1xuZXhwb3J0IHtTc2hDb25maWd9IGZyb20gXCIuL3NtYXJ0c3NoLmNsYXNzZXMuc3NoY29uZmlnXCI7Il19
|
|
4
dist/smartssh.classes.helpers.d.ts
vendored
4
dist/smartssh.classes.helpers.d.ts
vendored
@ -1,3 +1,3 @@
|
|||||||
import "typings-global";
|
import 'typings-global';
|
||||||
import { SshKey } from "./smartssh.classes.sshkey";
|
import { SshKey } from './smartssh.classes.sshkey';
|
||||||
export declare let sshKeyArrayFromDir: (dirArg: string) => SshKey[];
|
export declare let sshKeyArrayFromDir: (dirArg: string) => SshKey[];
|
||||||
|
5
dist/smartssh.classes.helpers.js
vendored
5
dist/smartssh.classes.helpers.js
vendored
@ -1,8 +1,7 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
require("typings-global");
|
require("typings-global");
|
||||||
exports.sshKeyArrayFromDir = function (dirArg) {
|
exports.sshKeyArrayFromDir = function (dirArg) {
|
||||||
var sshKeyArray = []; //TODO
|
let sshKeyArray = []; // TODO
|
||||||
return sshKeyArray;
|
return sshKeyArray;
|
||||||
};
|
};
|
||||||
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzc2guY2xhc3Nlcy5oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc21hcnRzc2guY2xhc3Nlcy5oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwwQkFBdUI7QUFJWixRQUFBLGtCQUFrQixHQUFHLFVBQVMsTUFBYztJQUNuRCxJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUEsQ0FBQyxPQUFPO0lBQzVCLE1BQU0sQ0FBQyxXQUFXLENBQUE7QUFDdEIsQ0FBQyxDQUFBIn0=
|
||||||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNtYXJ0c3NoLmNsYXNzZXMuaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsUUFBTyxnQkFDUCxDQUFDLENBRHNCO0FBSVosMEJBQWtCLEdBQUcsVUFBUyxNQUFhO0lBQ2xELElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU07SUFDNUIsTUFBTSxDQUFDLFdBQVcsQ0FBQztBQUN2QixDQUFDLENBQUEiLCJmaWxlIjoic21hcnRzc2guY2xhc3Nlcy5oZWxwZXJzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFwidHlwaW5ncy1nbG9iYWxcIlxuaW1wb3J0ICogYXMgcGx1Z2lucyBmcm9tIFwiLi9zbWFydHNzaC5wbHVnaW5zXCI7XG5pbXBvcnQge1NzaEtleX0gZnJvbSBcIi4vc21hcnRzc2guY2xhc3Nlcy5zc2hrZXlcIjtcblxuZXhwb3J0IGxldCBzc2hLZXlBcnJheUZyb21EaXIgPSBmdW5jdGlvbihkaXJBcmc6c3RyaW5nKTpTc2hLZXlbXXtcbiAgICBsZXQgc3NoS2V5QXJyYXkgPSBbXTsgLy9UT0RPXG4gICAgcmV0dXJuIHNzaEtleUFycmF5O1xufSJdfQ==
|
|
14
dist/smartssh.classes.sshconfig.d.ts
vendored
14
dist/smartssh.classes.sshconfig.d.ts
vendored
@ -1,15 +1,17 @@
|
|||||||
import "typings-global";
|
/// <reference types="q" />
|
||||||
import { SshKey } from "./smartssh.classes.sshkey";
|
import 'typings-global';
|
||||||
|
import { SshKey } from './smartssh.classes.sshkey';
|
||||||
export declare class SshConfig {
|
export declare class SshConfig {
|
||||||
sshKeyArray: SshKey[];
|
private _sshKeyArray;
|
||||||
constructor(sshKeyArrayArg: SshKey[]);
|
constructor(sshKeyArrayArg: SshKey[]);
|
||||||
/**
|
/**
|
||||||
* the current config
|
* stores a config file
|
||||||
*/
|
*/
|
||||||
config: configObject[];
|
store(dirPathArg: string): Q.Promise<{}>;
|
||||||
|
read(dirPathArg: any): Q.Promise<{}>;
|
||||||
}
|
}
|
||||||
export interface configObject {
|
export interface configObject {
|
||||||
host: string;
|
configString: string;
|
||||||
authorized: boolean;
|
authorized: boolean;
|
||||||
sshKey: SshKey;
|
sshKey: SshKey;
|
||||||
}
|
}
|
||||||
|
59
dist/smartssh.classes.sshconfig.js
vendored
59
dist/smartssh.classes.sshconfig.js
vendored
@ -1,24 +1,47 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
require("typings-global");
|
require("typings-global");
|
||||||
var SshConfig = (function () {
|
const plugins = require("./smartssh.plugins");
|
||||||
function SshConfig(sshKeyArrayArg) {
|
class SshConfig {
|
||||||
this.sshKeyArray = sshKeyArrayArg;
|
constructor(sshKeyArrayArg) {
|
||||||
|
this._sshKeyArray = sshKeyArrayArg;
|
||||||
}
|
}
|
||||||
Object.defineProperty(SshConfig.prototype, "config", {
|
/**
|
||||||
/**
|
* stores a config file
|
||||||
* the current config
|
*/
|
||||||
*/
|
store(dirPathArg) {
|
||||||
get: function () {
|
let done = plugins.q.defer();
|
||||||
var configArray;
|
let configArray = [];
|
||||||
return configArray;
|
let configString;
|
||||||
},
|
for (let key in this._sshKeyArray) {
|
||||||
enumerable: true,
|
let sshKey = this._sshKeyArray[key];
|
||||||
configurable: true
|
if (sshKey.host) {
|
||||||
});
|
configString = 'Host ' + sshKey.host + '\n' +
|
||||||
return SshConfig;
|
' HostName ' + sshKey.host + '\n' +
|
||||||
}());
|
' IdentityFile ~/.ssh/' + sshKey.host + '\n' +
|
||||||
|
' StrictHostKeyChecking no' + '\n';
|
||||||
|
}
|
||||||
|
configArray.push({
|
||||||
|
configString: configString,
|
||||||
|
authorized: sshKey.authorized,
|
||||||
|
sshKey: sshKey
|
||||||
|
});
|
||||||
|
}
|
||||||
|
let configFile = '';
|
||||||
|
for (let key in configArray) {
|
||||||
|
configFile = configFile + configArray[key].configString + '\n';
|
||||||
|
}
|
||||||
|
;
|
||||||
|
plugins.smartfile.memory.toFsSync(configFile, plugins.path.join(dirPathArg, 'config'));
|
||||||
|
return done.promise;
|
||||||
|
}
|
||||||
|
read(dirPathArg) {
|
||||||
|
let done = plugins.q.defer();
|
||||||
|
let configArray;
|
||||||
|
plugins.smartfile.fs.toStringSync(plugins.path.join(dirPathArg, 'config'));
|
||||||
|
return done.promise;
|
||||||
|
}
|
||||||
|
}
|
||||||
exports.SshConfig = SshConfig;
|
exports.SshConfig = SshConfig;
|
||||||
;
|
;
|
||||||
;
|
;
|
||||||
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzc2guY2xhc3Nlcy5zc2hjb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9zbWFydHNzaC5jbGFzc2VzLnNzaGNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsMEJBQXVCO0FBQ3ZCLDhDQUE2QztBQUk3QztJQUVJLFlBQVksY0FBd0I7UUFDaEMsSUFBSSxDQUFDLFlBQVksR0FBRyxjQUFjLENBQUE7SUFDdEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLFVBQWtCO1FBQ3BCLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUE7UUFDNUIsSUFBSSxXQUFXLEdBQW1CLEVBQUUsQ0FBQTtRQUNwQyxJQUFJLFlBQVksQ0FBQTtRQUNoQixHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztZQUNoQyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQ25DLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUNkLFlBQVksR0FBRyxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJO29CQUN4QixhQUFhLEdBQUcsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJO29CQUNsQyx3QkFBd0IsR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUk7b0JBQzdDLDRCQUE0QixHQUFHLElBQUksQ0FBQTtZQUMxRCxDQUFDO1lBQ0QsV0FBVyxDQUFDLElBQUksQ0FBQztnQkFDYixZQUFZLEVBQUUsWUFBWTtnQkFDMUIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO2dCQUM3QixNQUFNLEVBQUUsTUFBTTthQUNqQixDQUFDLENBQUE7UUFDTixDQUFDO1FBQ0QsSUFBSSxVQUFVLEdBQVcsRUFBRSxDQUFBO1FBQzNCLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDMUIsVUFBVSxHQUFHLFVBQVUsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQTtRQUNsRSxDQUFDO1FBQUEsQ0FBQztRQUNGLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUE7UUFDcEYsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUE7SUFDdkIsQ0FBQztJQUNELElBQUksQ0FBQyxVQUFVO1FBQ1gsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtRQUM1QixJQUFJLFdBQTJCLENBQUE7UUFDL0IsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBQyxRQUFRLENBQUMsQ0FBQyxDQUFBO1FBRXpFLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFBO0lBQ3ZCLENBQUM7Q0FDSjtBQXpDRCw4QkF5Q0M7QUFBQSxDQUFDO0FBTUQsQ0FBQyJ9
|
||||||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNtYXJ0c3NoLmNsYXNzZXMuc3NoY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxRQUFPLGdCQUFnQixDQUFDLENBQUE7QUFLeEI7SUFFSSxtQkFBWSxjQUF1QjtRQUMvQixJQUFJLENBQUMsV0FBVyxHQUFHLGNBQWMsQ0FBQztJQUN0QyxDQUFDO0lBS0Qsc0JBQUksNkJBQU07UUFIVjs7V0FFRzthQUNIO1lBQ0ksSUFBSSxXQUEwQixDQUFDO1lBQy9CLE1BQU0sQ0FBQyxXQUFXLENBQUM7UUFDdkIsQ0FBQzs7O09BQUE7SUFDTCxnQkFBQztBQUFELENBYkEsQUFhQyxJQUFBO0FBYlksaUJBQVMsWUFhckIsQ0FBQTtBQUFBLENBQUM7QUFNRCxDQUFDIiwiZmlsZSI6InNtYXJ0c3NoLmNsYXNzZXMuc3NoY29uZmlnLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFwidHlwaW5ncy1nbG9iYWxcIjtcbmltcG9ydCAqIGFzIHBsdWdpbnMgZnJvbSBcIi4vc21hcnRzc2gucGx1Z2luc1wiO1xuaW1wb3J0ICogYXMgaGVscGVycyBmcm9tIFwiLi9zbWFydHNzaC5jbGFzc2VzLmhlbHBlcnNcIjtcbmltcG9ydCB7U3NoS2V5fSBmcm9tIFwiLi9zbWFydHNzaC5jbGFzc2VzLnNzaGtleVwiXG5cbmV4cG9ydCBjbGFzcyBTc2hDb25maWcge1xuICAgIHNzaEtleUFycmF5OlNzaEtleVtdO1xuICAgIGNvbnN0cnVjdG9yKHNzaEtleUFycmF5QXJnOlNzaEtleVtdKXtcbiAgICAgICAgdGhpcy5zc2hLZXlBcnJheSA9IHNzaEtleUFycmF5QXJnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHRoZSBjdXJyZW50IGNvbmZpZ1xuICAgICAqL1xuICAgIGdldCBjb25maWcoKXtcbiAgICAgICAgbGV0IGNvbmZpZ0FycmF5OmNvbmZpZ09iamVjdFtdO1xuICAgICAgICByZXR1cm4gY29uZmlnQXJyYXk7XG4gICAgfVxufTtcblxuZXhwb3J0IGludGVyZmFjZSBjb25maWdPYmplY3Qge1xuICAgIGhvc3Q6c3RyaW5nO1xuICAgIGF1dGhvcml6ZWQ6Ym9vbGVhbjtcbiAgICBzc2hLZXk6U3NoS2V5O1xufTtcblxuIl19
|
|
17
dist/smartssh.classes.sshdir.d.ts
vendored
17
dist/smartssh.classes.sshdir.d.ts
vendored
@ -1,10 +1,13 @@
|
|||||||
import "typings-global";
|
import 'typings-global';
|
||||||
import { SshKey } from "./smartssh.classes.sshkey";
|
import { SshKey } from './smartssh.classes.sshkey';
|
||||||
|
import { SshConfig } from './smartssh.classes.sshconfig';
|
||||||
export declare class SshDir {
|
export declare class SshDir {
|
||||||
path: string;
|
private _path;
|
||||||
private sshKeyArray;
|
private _sshKeyArray;
|
||||||
constructor(sshKeyArray: SshKey[], sshDirPathArg?: string);
|
private _sshConfig;
|
||||||
writeToDir(): void;
|
constructor(sshKeyArray: SshKey[], sshConfig: SshConfig, sshDirPathArg?: string);
|
||||||
readFromDir(): void;
|
writeToDir(dirPathArg?: string): void;
|
||||||
|
readFromDir(dirPathArg?: string): void;
|
||||||
|
updateDirPath(dirPathArg: string): void;
|
||||||
getKeys(): SshKey[];
|
getKeys(): SshKey[];
|
||||||
}
|
}
|
||||||
|
51
dist/smartssh.classes.sshdir.js
vendored
51
dist/smartssh.classes.sshdir.js
vendored
@ -1,32 +1,41 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
require("typings-global");
|
require("typings-global");
|
||||||
var plugins = require("./smartssh.plugins");
|
const plugins = require("./smartssh.plugins");
|
||||||
var helpers = require("./smartssh.classes.helpers");
|
const helpers = require("./smartssh.classes.helpers");
|
||||||
var SshDir = (function () {
|
class SshDir {
|
||||||
function SshDir(sshKeyArray, sshDirPathArg) {
|
constructor(sshKeyArray, sshConfig, sshDirPathArg) {
|
||||||
this.sshKeyArray = sshKeyArray;
|
this._sshKeyArray = sshKeyArray;
|
||||||
|
this._sshConfig = sshConfig;
|
||||||
if (sshDirPathArg) {
|
if (sshDirPathArg) {
|
||||||
this.path = sshDirPathArg;
|
this._path = sshDirPathArg;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
this.path = plugins.path.join(plugins.smartpath.get.home(), ".ssh/");
|
this._path = plugins.path.join(plugins.smartpath.get.home(), '.ssh/');
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
SshDir.prototype.writeToDir = function () {
|
writeToDir(dirPathArg) {
|
||||||
var _this = this;
|
let path = this._path;
|
||||||
this.sshKeyArray.forEach(function (sshKeyArg) {
|
if (dirPathArg)
|
||||||
sshKeyArg.store(_this.path);
|
path = dirPathArg;
|
||||||
|
this._sshKeyArray.forEach((sshKeyArg) => {
|
||||||
|
sshKeyArg.store(path);
|
||||||
});
|
});
|
||||||
};
|
this._sshConfig.store(path);
|
||||||
|
}
|
||||||
;
|
;
|
||||||
SshDir.prototype.readFromDir = function () {
|
readFromDir(dirPathArg) {
|
||||||
};
|
let path = this._path;
|
||||||
SshDir.prototype.getKeys = function () {
|
if (dirPathArg)
|
||||||
return helpers.sshKeyArrayFromDir(this.path);
|
path = dirPathArg;
|
||||||
};
|
}
|
||||||
return SshDir;
|
updateDirPath(dirPathArg) {
|
||||||
}());
|
this._path = dirPathArg;
|
||||||
|
}
|
||||||
|
;
|
||||||
|
getKeys() {
|
||||||
|
return helpers.sshKeyArrayFromDir(this._path);
|
||||||
|
}
|
||||||
|
}
|
||||||
exports.SshDir = SshDir;
|
exports.SshDir = SshDir;
|
||||||
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzc2guY2xhc3Nlcy5zc2hkaXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9zbWFydHNzaC5jbGFzc2VzLnNzaGRpci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsMEJBQXVCO0FBQ3ZCLDhDQUE2QztBQUM3QyxzREFBcUQ7QUFJckQ7SUFJSSxZQUFZLFdBQXFCLEVBQUMsU0FBb0IsRUFBQyxhQUFzQjtRQUN6RSxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQTtRQUMvQixJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQTtRQUMzQixFQUFFLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQ2hCLElBQUksQ0FBQyxLQUFLLEdBQUcsYUFBYSxDQUFBO1FBQzlCLENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNKLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUMsT0FBTyxDQUFDLENBQUE7UUFDeEUsQ0FBQztRQUFBLENBQUM7SUFDTixDQUFDO0lBQ0QsVUFBVSxDQUFDLFVBQW1CO1FBQzFCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUE7UUFDckIsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDO1lBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQTtRQUNqQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVM7WUFDaEMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUN6QixDQUFDLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQy9CLENBQUM7SUFBQSxDQUFDO0lBQ0YsV0FBVyxDQUFDLFVBQW1CO1FBQzNCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUE7UUFDckIsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDO1lBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQTtJQUNyQyxDQUFDO0lBQ0QsYUFBYSxDQUFDLFVBQWtCO1FBQzVCLElBQUksQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFBO0lBQzNCLENBQUM7SUFBQSxDQUFDO0lBQ0YsT0FBTztRQUNILE1BQU0sQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ2pELENBQUM7Q0FDSjtBQS9CRCx3QkErQkMifQ==
|
||||||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNtYXJ0c3NoLmNsYXNzZXMuc3NoZGlyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxRQUFPLGdCQUFnQixDQUFDLENBQUE7QUFDeEIsSUFBWSxPQUFPLFdBQU0sb0JBQW9CLENBQUMsQ0FBQTtBQUM5QyxJQUFZLE9BQU8sV0FBTSw0QkFBNEIsQ0FBQyxDQUFBO0FBSXREO0lBR0ksZ0JBQVksV0FBb0IsRUFBQyxhQUFxQjtRQUNsRCxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUMvQixFQUFFLENBQUEsQ0FBQyxhQUFhLENBQUMsQ0FBQSxDQUFDO1lBQ2QsSUFBSSxDQUFDLElBQUksR0FBRyxhQUFhLENBQUM7UUFDOUIsQ0FBQztRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ0osSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBQyxPQUFPLENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBQUEsQ0FBQztJQUNOLENBQUM7SUFDRCwyQkFBVSxHQUFWO1FBQUEsaUJBS0M7UUFKRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxVQUFDLFNBQVM7WUFDL0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFL0IsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOztJQUNELDRCQUFXLEdBQVg7SUFFQSxDQUFDO0lBQ0Qsd0JBQU8sR0FBUDtRQUNJLE1BQU0sQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFDTCxhQUFDO0FBQUQsQ0F2QkEsQUF1QkMsSUFBQTtBQXZCWSxjQUFNLFNBdUJsQixDQUFBIiwiZmlsZSI6InNtYXJ0c3NoLmNsYXNzZXMuc3NoZGlyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFwidHlwaW5ncy1nbG9iYWxcIjtcbmltcG9ydCAqIGFzIHBsdWdpbnMgZnJvbSBcIi4vc21hcnRzc2gucGx1Z2luc1wiO1xuaW1wb3J0ICogYXMgaGVscGVycyBmcm9tIFwiLi9zbWFydHNzaC5jbGFzc2VzLmhlbHBlcnNcIjtcbmltcG9ydCB7U3NoSW5zdGFuY2V9IGZyb20gXCIuL3NtYXJ0c3NoLmNsYXNzZXMuc3NoaW5zdGFuY2VcIjtcbmltcG9ydCB7U3NoS2V5fSBmcm9tIFwiLi9zbWFydHNzaC5jbGFzc2VzLnNzaGtleVwiO1xuaW1wb3J0IHtTc2hDb25maWd9IGZyb20gXCIuL3NtYXJ0c3NoLmNsYXNzZXMuc3NoY29uZmlnXCI7XG5leHBvcnQgY2xhc3MgU3NoRGlyIHsgLy8gc3NoRGlyIGNsYXNzIC0+IE5PVCBFWFBPUlRFRCwgT05MWSBGT1IgSU5URVJOQUwgVVNFXG4gICAgcGF0aDpzdHJpbmc7IC8vIHRoZSBwYXRoIG9mIHRoZSBzc2ggZGlyZWN0b3J5XG4gICAgcHJpdmF0ZSBzc2hLZXlBcnJheTpTc2hLZXlbXTtcbiAgICBjb25zdHJ1Y3Rvcihzc2hLZXlBcnJheTpTc2hLZXlbXSxzc2hEaXJQYXRoQXJnPzpzdHJpbmcpe1xuICAgICAgICB0aGlzLnNzaEtleUFycmF5ID0gc3NoS2V5QXJyYXk7XG4gICAgICAgIGlmKHNzaERpclBhdGhBcmcpe1xuICAgICAgICAgICAgdGhpcy5wYXRoID0gc3NoRGlyUGF0aEFyZztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucGF0aCA9IHBsdWdpbnMucGF0aC5qb2luKHBsdWdpbnMuc21hcnRwYXRoLmdldC5ob21lKCksXCIuc3NoL1wiKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgd3JpdGVUb0RpcigpeyAvLyBzeW5jcyBzc2hJbnN0YW5jZSB0byBkaXJlY3RvcnlcbiAgICAgICAgdGhpcy5zc2hLZXlBcnJheS5mb3JFYWNoKChzc2hLZXlBcmcpID0+IHtcbiAgICAgICAgICAgIHNzaEtleUFyZy5zdG9yZSh0aGlzLnBhdGgpO1xuICAgICAgICAgICAgXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgcmVhZEZyb21EaXIoKXsgLy8gc3luY3Mgc3NoSW5zdGFuY2UgZnJvbSBkaXJlY3RvcnlcbiAgICAgICAgXG4gICAgfVxuICAgIGdldEtleXMoKXtcbiAgICAgICAgcmV0dXJuIGhlbHBlcnMuc3NoS2V5QXJyYXlGcm9tRGlyKHRoaXMucGF0aCk7XG4gICAgfVxufSJdfQ==
|
|
12
dist/smartssh.classes.sshinstance.d.ts
vendored
12
dist/smartssh.classes.sshinstance.d.ts
vendored
@ -1,5 +1,5 @@
|
|||||||
import "typings-global";
|
import 'typings-global';
|
||||||
import { SshKey } from "./smartssh.classes.sshkey";
|
import { SshKey } from './smartssh.classes.sshkey';
|
||||||
export declare class SshInstance {
|
export declare class SshInstance {
|
||||||
private _sshKeyArray;
|
private _sshKeyArray;
|
||||||
private _sshConfig;
|
private _sshConfig;
|
||||||
@ -13,15 +13,15 @@ export declare class SshInstance {
|
|||||||
removeKey(sshKeyArg: SshKey): void;
|
removeKey(sshKeyArg: SshKey): void;
|
||||||
replaceKey(sshKeyOldArg: SshKey, sshKeyNewArg: SshKey): void;
|
replaceKey(sshKeyOldArg: SshKey, sshKeyNewArg: SshKey): void;
|
||||||
getKey(hostArg: string): SshKey;
|
getKey(hostArg: string): SshKey;
|
||||||
sshKeys: SshKey[];
|
readonly sshKeys: SshKey[];
|
||||||
/**
|
/**
|
||||||
* write SshInstance to disk
|
* write SshInstance to disk
|
||||||
*/
|
*/
|
||||||
writeToDisk(): void;
|
writeToDisk(dirPathArg?: string): void;
|
||||||
/**
|
/**
|
||||||
* read ab SshInstance from disk
|
* read ab SshInstance from disk
|
||||||
*/
|
*/
|
||||||
readFromDisk(): void;
|
readFromDisk(dirPathArg?: string): void;
|
||||||
private _makeConfig();
|
private _makeConfig();
|
||||||
/**
|
/**
|
||||||
* method to invoke SshInstance _sync automatically when sshSync is true
|
* method to invoke SshInstance _sync automatically when sshSync is true
|
||||||
@ -30,5 +30,5 @@ export declare class SshInstance {
|
|||||||
/**
|
/**
|
||||||
* private method to sync SshInstance
|
* private method to sync SshInstance
|
||||||
*/
|
*/
|
||||||
private _sync(directionArg);
|
private _sync(directionArg, dirPathArg?);
|
||||||
}
|
}
|
||||||
|
101
dist/smartssh.classes.sshinstance.js
vendored
101
dist/smartssh.classes.sshinstance.js
vendored
File diff suppressed because one or more lines are too long
8
dist/smartssh.classes.sshkey.d.ts
vendored
8
dist/smartssh.classes.sshkey.d.ts
vendored
@ -1,9 +1,12 @@
|
|||||||
import "typings-global";
|
import 'typings-global';
|
||||||
export declare class SshKey {
|
export declare class SshKey {
|
||||||
private _privKey;
|
private _privKey;
|
||||||
private _pubKey;
|
private _pubKey;
|
||||||
private _hostVar;
|
private _hostVar;
|
||||||
private _authorized;
|
private _authorized;
|
||||||
|
/**
|
||||||
|
* the constructor for class SshKey
|
||||||
|
*/
|
||||||
constructor(optionsArg?: {
|
constructor(optionsArg?: {
|
||||||
private?: string;
|
private?: string;
|
||||||
public?: string;
|
public?: string;
|
||||||
@ -15,7 +18,8 @@ export declare class SshKey {
|
|||||||
privKeyBase64: string;
|
privKeyBase64: string;
|
||||||
pubKey: string;
|
pubKey: string;
|
||||||
pubKeyBase64: string;
|
pubKeyBase64: string;
|
||||||
|
authorized: boolean;
|
||||||
type: any;
|
type: any;
|
||||||
read(filePathArg: any): void;
|
read(filePathArg: any): void;
|
||||||
store(filePathArg?: string): void;
|
store(dirPathArg: string): void;
|
||||||
}
|
}
|
||||||
|
174
dist/smartssh.classes.sshkey.js
vendored
174
dist/smartssh.classes.sshkey.js
vendored
File diff suppressed because one or more lines are too long
19
dist/smartssh.plugins.d.ts
vendored
19
dist/smartssh.plugins.d.ts
vendored
@ -1,8 +1,11 @@
|
|||||||
import "typings-global";
|
import 'typings-global';
|
||||||
export import beautylog = require("beautylog");
|
import * as beautylog from 'beautylog';
|
||||||
export declare let base64: any;
|
import * as fs from 'fs-extra';
|
||||||
export declare let fs: any;
|
import * as minimatch from 'minimatch';
|
||||||
export declare let minimatch: any;
|
import * as path from 'path';
|
||||||
export import path = require("path");
|
import * as q from 'q';
|
||||||
export import smartfile = require("smartfile");
|
import * as shelljs from 'shelljs';
|
||||||
export import smartpath = require("smartpath");
|
import * as smartfile from 'smartfile';
|
||||||
|
import * as smartpath from 'smartpath';
|
||||||
|
import * as smartstring from 'smartstring';
|
||||||
|
export { beautylog, fs, minimatch, path, q, shelljs, smartfile, smartpath, smartstring };
|
||||||
|
28
dist/smartssh.plugins.js
vendored
28
dist/smartssh.plugins.js
vendored
@ -1,11 +1,21 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
require("typings-global");
|
require("typings-global");
|
||||||
exports.beautylog = require("beautylog");
|
const beautylog = require("beautylog");
|
||||||
exports.base64 = require("js-base64").Base64;
|
exports.beautylog = beautylog;
|
||||||
exports.fs = require("fs-extra");
|
const fs = require("fs-extra");
|
||||||
exports.minimatch = require("minimatch");
|
exports.fs = fs;
|
||||||
exports.path = require("path");
|
const minimatch = require("minimatch");
|
||||||
exports.smartfile = require("smartfile");
|
exports.minimatch = minimatch;
|
||||||
exports.smartpath = require("smartpath");
|
const path = require("path");
|
||||||
|
exports.path = path;
|
||||||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNtYXJ0c3NoLnBsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sZ0JBQ1AsQ0FBQyxDQURzQjtBQUNULGlCQUFTLFdBQVcsV0FBVyxDQUFDLENBQUM7QUFDcEMsY0FBTSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDckMsVUFBRSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN6QixpQkFBUyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUM5QixZQUFJLFdBQVcsTUFBTSxDQUFDLENBQUM7QUFDdkIsaUJBQVMsV0FBVyxXQUFXLENBQUMsQ0FBQztBQUNqQyxpQkFBUyxXQUFXLFdBQVcsQ0FBQyxDQUFDIiwiZmlsZSI6InNtYXJ0c3NoLnBsdWdpbnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXCJ0eXBpbmdzLWdsb2JhbFwiXG5leHBvcnQgaW1wb3J0IGJlYXV0eWxvZyA9IHJlcXVpcmUoXCJiZWF1dHlsb2dcIik7XG5leHBvcnQgbGV0IGJhc2U2NCA9IHJlcXVpcmUoXCJqcy1iYXNlNjRcIikuQmFzZTY0O1xuZXhwb3J0IGxldCBmcyA9IHJlcXVpcmUoXCJmcy1leHRyYVwiKTtcbmV4cG9ydCBsZXQgbWluaW1hdGNoID0gcmVxdWlyZShcIm1pbmltYXRjaFwiKTtcbmV4cG9ydCBpbXBvcnQgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xuZXhwb3J0IGltcG9ydCBzbWFydGZpbGUgPSByZXF1aXJlKFwic21hcnRmaWxlXCIpO1xuZXhwb3J0IGltcG9ydCBzbWFydHBhdGggPSByZXF1aXJlKFwic21hcnRwYXRoXCIpOyJdfQ==
|
const q = require("q");
|
||||||
|
exports.q = q;
|
||||||
|
const shelljs = require("shelljs");
|
||||||
|
exports.shelljs = shelljs;
|
||||||
|
const smartfile = require("smartfile");
|
||||||
|
exports.smartfile = smartfile;
|
||||||
|
const smartpath = require("smartpath");
|
||||||
|
exports.smartpath = smartpath;
|
||||||
|
const smartstring = require("smartstring");
|
||||||
|
exports.smartstring = smartstring;
|
||||||
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzc2gucGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0c3NoLnBsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDBCQUF1QjtBQUN2Qix1Q0FBc0M7QUFXbEMsOEJBQVM7QUFWYiwrQkFBOEI7QUFXMUIsZ0JBQUU7QUFWTix1Q0FBc0M7QUFXbEMsOEJBQVM7QUFWYiw2QkFBNEI7QUFXeEIsb0JBQUk7QUFWUix1QkFBc0I7QUFXbEIsY0FBQztBQVZMLG1DQUFrQztBQVc5QiwwQkFBTztBQVZYLHVDQUFzQztBQVdsQyw4QkFBUztBQVZiLHVDQUFzQztBQVdsQyw4QkFBUztBQVZiLDJDQUEwQztBQVd0QyxrQ0FBVyJ9
|
@ -1,3 +1,4 @@
|
|||||||
{
|
{
|
||||||
"mode":"default"
|
"mode":"default",
|
||||||
|
"coverageTreshold":50
|
||||||
}
|
}
|
30
package.json
30
package.json
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "smartssh",
|
"name": "smartssh",
|
||||||
"version": "1.1.0",
|
"version": "1.2.1",
|
||||||
"description": "setups SSH quickly and in a painless manner",
|
"description": "setups SSH quickly and in a painless manner",
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
"typings": "dist/index.d.ts",
|
"typings": "dist/index.d.ts",
|
||||||
@ -23,17 +23,25 @@
|
|||||||
},
|
},
|
||||||
"homepage": "https://gitlab.com/pushrocks/smartssh#readme",
|
"homepage": "https://gitlab.com/pushrocks/smartssh#readme",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"beautylog": "^5.0.12",
|
"@types/fs-extra": "0.0.35",
|
||||||
"fs-extra": "^0.30.0",
|
"@types/js-base64": "^2.1.5",
|
||||||
"js-base64": "^2.1.9",
|
"@types/minimatch": "^2.0.29",
|
||||||
"minimatch": "^3.0.2",
|
"@types/q": "0.0.32",
|
||||||
"smartfile": "^4.0.5",
|
"@types/shelljs": "^0.3.33",
|
||||||
"smartpath": "^3.2.2",
|
"beautylog": "^6.0.0",
|
||||||
"typings-global": "^1.0.3",
|
"fs-extra": "^1.0.0",
|
||||||
"typings-test": "^1.0.1"
|
"minimatch": "^3.0.3",
|
||||||
|
"q": "^1.4.1",
|
||||||
|
"shelljs": "^0.7.5",
|
||||||
|
"smartfile": "^4.1.0",
|
||||||
|
"smartpath": "^3.2.5",
|
||||||
|
"smartstring": "^2.0.22",
|
||||||
|
"typings-global": "^1.0.14"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"npmts-g": "^5.2.6",
|
"@types/should": "^8.1.30",
|
||||||
"should": "^9.0.2"
|
"npmts-g": "^5.2.8",
|
||||||
|
"should": "^11.1.1",
|
||||||
|
"typings-test": "^1.0.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
3
test/test.d.ts
vendored
3
test/test.d.ts
vendored
@ -1,2 +1 @@
|
|||||||
import "typings-test";
|
import 'typings-test';
|
||||||
import "should";
|
|
||||||
|
94
test/test.js
94
test/test.js
File diff suppressed because one or more lines are too long
127
test/test.ts
127
test/test.ts
@ -1,66 +1,75 @@
|
|||||||
import "typings-test"
|
import 'typings-test'
|
||||||
import "should";
|
import * as should from 'should'
|
||||||
import smartssh = require("../dist/index");
|
import smartssh = require('../dist/index')
|
||||||
describe("smartssh",function(){
|
import path = require('path')
|
||||||
let testSshInstance:smartssh.SshInstance;
|
describe('smartssh',function(){
|
||||||
let testSshKey:smartssh.SshKey;
|
let testSshInstance: smartssh.SshInstance
|
||||||
describe(".SshKey",function(){
|
let testSshKey: smartssh.SshKey
|
||||||
|
describe('.SshKey',function(){
|
||||||
it("'new' keyword should create a valid SshKey object",function(){
|
it("'new' keyword should create a valid SshKey object",function(){
|
||||||
testSshKey = new smartssh.SshKey({
|
testSshKey = new smartssh.SshKey({
|
||||||
host:"example.com",
|
host: 'example.com',
|
||||||
private:"someExamplePrivateKey",
|
private: 'someExamplePrivateKey',
|
||||||
public:"someExamplePublicKey"
|
public: 'someExamplePublicKey'
|
||||||
});
|
})
|
||||||
testSshKey.should.be.instanceof(smartssh.SshKey);
|
should(testSshKey).be.instanceof(smartssh.SshKey)
|
||||||
});
|
|
||||||
it(".type should be a valid type",function(){
|
|
||||||
testSshKey.type.should.equal("duplex");
|
|
||||||
});
|
|
||||||
it(".publicKey should be public key",function(){
|
|
||||||
testSshKey.pubKey.should.equal("someExamplePublicKey");
|
|
||||||
});
|
|
||||||
it(".privateKey should be private key",function(){
|
|
||||||
testSshKey.privKey.should.equal("someExamplePrivateKey");
|
|
||||||
});
|
|
||||||
it(".publicKeyBase64 should be public key base 64 encoded",function(){
|
|
||||||
testSshKey.pubKeyBase64;
|
|
||||||
})
|
})
|
||||||
});
|
it('.type should be a valid type',function(){
|
||||||
describe(".SshInstance",function(){
|
should(testSshKey.type).equal('duplex')
|
||||||
|
})
|
||||||
|
it('.publicKey should be public key',function(){
|
||||||
|
should(testSshKey.pubKey).equal('someExamplePublicKey')
|
||||||
|
})
|
||||||
|
it('.privateKey should be private key',function(){
|
||||||
|
should(testSshKey.privKey).equal('someExamplePrivateKey')
|
||||||
|
})
|
||||||
|
it('.publicKeyBase64 should be public key base 64 encoded',function(){
|
||||||
|
testSshKey.pubKeyBase64
|
||||||
|
})
|
||||||
|
it('.store() should store the file to disk',function(){
|
||||||
|
testSshKey.store(path.join(process.cwd(),'test/temp'))
|
||||||
|
})
|
||||||
|
})
|
||||||
|
describe('.SshInstance',function(){
|
||||||
it("'new' keyword should create a new SshInstance object from class",function(){
|
it("'new' keyword should create a new SshInstance object from class",function(){
|
||||||
testSshInstance = new smartssh.SshInstance();
|
testSshInstance = new smartssh.SshInstance({
|
||||||
testSshInstance.should.be.instanceof(smartssh.SshInstance);
|
sshDirPath: path.join(process.cwd(),'test/temp/')
|
||||||
});
|
})
|
||||||
it(".addKey() should accept a new SshKey object",function(){
|
should(testSshInstance).be.instanceof(smartssh.SshInstance)
|
||||||
testSshInstance.addKey(new smartssh.SshKey({
|
|
||||||
public:"somePublicKey",
|
|
||||||
private:"somePrivateKey",
|
|
||||||
host:"gitlab.com"
|
|
||||||
}));
|
|
||||||
testSshInstance.addKey(new smartssh.SshKey({
|
|
||||||
public:"somePublicKey",
|
|
||||||
private:"somePrivateKey",
|
|
||||||
host:"bitbucket.org"
|
|
||||||
}));
|
|
||||||
testSshInstance.addKey(new smartssh.SshKey({
|
|
||||||
public:"someGitHubPublicKey",
|
|
||||||
private:"someGitHubPrivateKey",
|
|
||||||
host:"github.com"
|
|
||||||
}));
|
|
||||||
});
|
|
||||||
it(".sshKeys should point to an array of sshKeys",function(){
|
|
||||||
let sshKeyArray = testSshInstance.sshKeys;
|
|
||||||
sshKeyArray.should.be.Array();
|
|
||||||
sshKeyArray[0].host.should.equal("gitlab.com");
|
|
||||||
sshKeyArray[1].host.should.equal("bitbucket.org");
|
|
||||||
sshKeyArray[2].host.should.equal("github.com");
|
|
||||||
});
|
|
||||||
it(".getKey() should get a specific key selected by host",function(){
|
|
||||||
testSshInstance.getKey("github.com").pubKey.should.equal("someGitHubPublicKey");
|
|
||||||
})
|
})
|
||||||
it(".removeKey() should remove a key",function(){
|
it('.addKey() should accept a new SshKey object',function(){
|
||||||
testSshInstance.removeKey(testSshInstance.getKey("bitbucket.org"));
|
testSshInstance.addKey(new smartssh.SshKey({
|
||||||
testSshInstance.sshKeys[1].host.should.equal("github.com");
|
public: 'somePublicKey',
|
||||||
|
private: 'somePrivateKey',
|
||||||
|
host: 'gitlab.com'
|
||||||
|
}))
|
||||||
|
testSshInstance.addKey(new smartssh.SshKey({
|
||||||
|
public: 'somePublicKey',
|
||||||
|
private: 'somePrivateKey',
|
||||||
|
host: 'bitbucket.org'
|
||||||
|
}))
|
||||||
|
testSshInstance.addKey(new smartssh.SshKey({
|
||||||
|
public: 'someGitHubPublicKey',
|
||||||
|
private: 'someGitHubPrivateKey',
|
||||||
|
host: 'github.com'
|
||||||
|
}))
|
||||||
})
|
})
|
||||||
});
|
it('.sshKeys should point to an array of sshKeys',function(){
|
||||||
|
let sshKeyArray = testSshInstance.sshKeys
|
||||||
|
should(sshKeyArray).be.Array()
|
||||||
|
should(sshKeyArray[0].host).equal('gitlab.com')
|
||||||
|
should(sshKeyArray[1].host).equal('bitbucket.org')
|
||||||
|
should(sshKeyArray[2].host).equal('github.com')
|
||||||
|
})
|
||||||
|
it('.getKey() should get a specific key selected by host',function(){
|
||||||
|
should(testSshInstance.getKey('github.com').pubKey).equal('someGitHubPublicKey')
|
||||||
|
})
|
||||||
|
it('.removeKey() should remove a key',function(){
|
||||||
|
testSshInstance.removeKey(testSshInstance.getKey('bitbucket.org'))
|
||||||
|
should(testSshInstance.sshKeys[1].host).equal('github.com')
|
||||||
|
})
|
||||||
|
it('it should store to disk',function(){
|
||||||
|
testSshInstance.writeToDisk()
|
||||||
|
})
|
||||||
|
})
|
||||||
})
|
})
|
12
ts/index.ts
12
ts/index.ts
@ -1,7 +1,7 @@
|
|||||||
import "typings-global"
|
import 'typings-global'
|
||||||
import * as plugins from "./smartssh.plugins";
|
import * as plugins from './smartssh.plugins'
|
||||||
|
|
||||||
export {SshInstance} from "./smartssh.classes.sshinstance";
|
export {SshInstance} from './smartssh.classes.sshinstance'
|
||||||
export {SshKey} from "./smartssh.classes.sshkey";
|
export {SshKey} from './smartssh.classes.sshkey'
|
||||||
export {SshDir} from "./smartssh.classes.sshdir";
|
export {SshDir} from './smartssh.classes.sshdir'
|
||||||
export {SshConfig} from "./smartssh.classes.sshconfig";
|
export {SshConfig} from './smartssh.classes.sshconfig'
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import "typings-global"
|
import 'typings-global'
|
||||||
import * as plugins from "./smartssh.plugins";
|
import * as plugins from './smartssh.plugins'
|
||||||
import {SshKey} from "./smartssh.classes.sshkey";
|
import {SshKey} from './smartssh.classes.sshkey'
|
||||||
|
|
||||||
export let sshKeyArrayFromDir = function(dirArg:string):SshKey[]{
|
export let sshKeyArrayFromDir = function(dirArg: string): SshKey[]{
|
||||||
let sshKeyArray = []; //TODO
|
let sshKeyArray = [] // TODO
|
||||||
return sshKeyArray;
|
return sshKeyArray
|
||||||
}
|
}
|
@ -1,26 +1,54 @@
|
|||||||
import "typings-global";
|
import 'typings-global'
|
||||||
import * as plugins from "./smartssh.plugins";
|
import * as plugins from './smartssh.plugins'
|
||||||
import * as helpers from "./smartssh.classes.helpers";
|
import * as helpers from './smartssh.classes.helpers'
|
||||||
import {SshKey} from "./smartssh.classes.sshkey"
|
import {SshKey} from './smartssh.classes.sshkey'
|
||||||
|
|
||||||
export class SshConfig {
|
export class SshConfig {
|
||||||
sshKeyArray:SshKey[];
|
private _sshKeyArray: SshKey[]
|
||||||
constructor(sshKeyArrayArg:SshKey[]){
|
constructor(sshKeyArrayArg: SshKey[]) {
|
||||||
this.sshKeyArray = sshKeyArrayArg;
|
this._sshKeyArray = sshKeyArrayArg
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* the current config
|
* stores a config file
|
||||||
*/
|
*/
|
||||||
get config(){
|
store(dirPathArg: string) {
|
||||||
let configArray:configObject[];
|
let done = plugins.q.defer()
|
||||||
return configArray;
|
let configArray: configObject[] = []
|
||||||
|
let configString
|
||||||
|
for (let key in this._sshKeyArray) {
|
||||||
|
let sshKey = this._sshKeyArray[key]
|
||||||
|
if (sshKey.host) {
|
||||||
|
configString = 'Host ' + sshKey.host + '\n' +
|
||||||
|
' HostName ' + sshKey.host + '\n' +
|
||||||
|
' IdentityFile ~/.ssh/' + sshKey.host + '\n' +
|
||||||
|
' StrictHostKeyChecking no' + '\n'
|
||||||
|
}
|
||||||
|
configArray.push({
|
||||||
|
configString: configString,
|
||||||
|
authorized: sshKey.authorized,
|
||||||
|
sshKey: sshKey
|
||||||
|
})
|
||||||
|
}
|
||||||
|
let configFile: string = ''
|
||||||
|
for (let key in configArray) {
|
||||||
|
configFile = configFile + configArray[key].configString + '\n'
|
||||||
|
};
|
||||||
|
plugins.smartfile.memory.toFsSync(configFile,plugins.path.join(dirPathArg,'config'))
|
||||||
|
return done.promise
|
||||||
|
}
|
||||||
|
read(dirPathArg) {
|
||||||
|
let done = plugins.q.defer()
|
||||||
|
let configArray: configObject[]
|
||||||
|
plugins.smartfile.fs.toStringSync(plugins.path.join(dirPathArg,'config'))
|
||||||
|
|
||||||
|
return done.promise
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export interface configObject {
|
export interface configObject {
|
||||||
host:string;
|
configString: string
|
||||||
authorized:boolean;
|
authorized: boolean
|
||||||
sshKey:SshKey;
|
sshKey: SshKey
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,30 +1,38 @@
|
|||||||
import "typings-global";
|
import 'typings-global'
|
||||||
import * as plugins from "./smartssh.plugins";
|
import * as plugins from './smartssh.plugins'
|
||||||
import * as helpers from "./smartssh.classes.helpers";
|
import * as helpers from './smartssh.classes.helpers'
|
||||||
import {SshInstance} from "./smartssh.classes.sshinstance";
|
import {SshInstance} from './smartssh.classes.sshinstance'
|
||||||
import {SshKey} from "./smartssh.classes.sshkey";
|
import {SshKey} from './smartssh.classes.sshkey'
|
||||||
import {SshConfig} from "./smartssh.classes.sshconfig";
|
import {SshConfig} from './smartssh.classes.sshconfig'
|
||||||
export class SshDir { // sshDir class -> NOT EXPORTED, ONLY FOR INTERNAL USE
|
export class SshDir { // sshDir class -> NOT EXPORTED, ONLY FOR INTERNAL USE
|
||||||
path:string; // the path of the ssh directory
|
private _path: string // the path of the ssh directory
|
||||||
private sshKeyArray:SshKey[];
|
private _sshKeyArray: SshKey[]
|
||||||
constructor(sshKeyArray:SshKey[],sshDirPathArg?:string){
|
private _sshConfig: SshConfig
|
||||||
this.sshKeyArray = sshKeyArray;
|
constructor(sshKeyArray: SshKey[],sshConfig: SshConfig,sshDirPathArg?: string) {
|
||||||
if(sshDirPathArg){
|
this._sshKeyArray = sshKeyArray
|
||||||
this.path = sshDirPathArg;
|
this._sshConfig = sshConfig
|
||||||
|
if (sshDirPathArg) {
|
||||||
|
this._path = sshDirPathArg
|
||||||
} else {
|
} else {
|
||||||
this.path = plugins.path.join(plugins.smartpath.get.home(),".ssh/");
|
this._path = plugins.path.join(plugins.smartpath.get.home(),'.ssh/')
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
writeToDir(){ // syncs sshInstance to directory
|
writeToDir(dirPathArg?: string) { // syncs sshInstance to directory
|
||||||
this.sshKeyArray.forEach((sshKeyArg) => {
|
let path = this._path
|
||||||
sshKeyArg.store(this.path);
|
if (dirPathArg) path = dirPathArg
|
||||||
|
this._sshKeyArray.forEach((sshKeyArg) => {
|
||||||
});
|
sshKeyArg.store(path)
|
||||||
|
})
|
||||||
|
this._sshConfig.store(path)
|
||||||
};
|
};
|
||||||
readFromDir(){ // syncs sshInstance from directory
|
readFromDir(dirPathArg?: string) { // syncs sshInstance from directory
|
||||||
|
let path = this._path
|
||||||
|
if (dirPathArg) path = dirPathArg
|
||||||
}
|
}
|
||||||
getKeys(){
|
updateDirPath(dirPathArg: string) {
|
||||||
return helpers.sshKeyArrayFromDir(this.path);
|
this._path = dirPathArg
|
||||||
|
};
|
||||||
|
getKeys() {
|
||||||
|
return helpers.sshKeyArrayFromDir(this._path)
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,105 +1,103 @@
|
|||||||
import "typings-global"
|
import 'typings-global'
|
||||||
import * as plugins from "./smartssh.plugins";
|
import * as plugins from './smartssh.plugins'
|
||||||
import * as helpers from "./smartssh.classes.helpers";
|
import * as helpers from './smartssh.classes.helpers'
|
||||||
|
|
||||||
import {SshDir} from "./smartssh.classes.sshdir";
|
import {SshDir} from './smartssh.classes.sshdir'
|
||||||
import {SshConfig} from "./smartssh.classes.sshconfig";
|
import {SshConfig} from './smartssh.classes.sshconfig'
|
||||||
import {SshKey} from "./smartssh.classes.sshkey";
|
import {SshKey} from './smartssh.classes.sshkey'
|
||||||
|
|
||||||
export class SshInstance {
|
export class SshInstance {
|
||||||
private _sshKeyArray:SshKey[]; //holds all ssh keys
|
private _sshKeyArray: SshKey[] // holds all ssh keys
|
||||||
private _sshConfig:SshConfig; // sshConfig (e.g. represents ~/.ssh/config)
|
private _sshConfig: SshConfig // sshConfig (e.g. represents ~/.ssh/config)
|
||||||
private _sshDir:SshDir; // points to sshDir class instance.
|
private _sshDir: SshDir // points to sshDir class instance.
|
||||||
private _sshSync:boolean; // if set to true, the ssh dir will be kept in sync automatically
|
private _sshSync: boolean // if set to true, the ssh dir will be kept in sync automatically
|
||||||
constructor(optionsArg:{sshDirPath?:string,sshSync?:boolean}={}){
|
constructor(optionsArg: {sshDirPath?: string,sshSync?: boolean}= {}) {
|
||||||
optionsArg ? void(0) : optionsArg = {};
|
optionsArg ? void(0) : optionsArg = {}
|
||||||
this._sshKeyArray = [];
|
this._sshKeyArray = []
|
||||||
this._sshConfig = new SshConfig(this._sshKeyArray);
|
this._sshConfig = new SshConfig(this._sshKeyArray)
|
||||||
this._sshDir = new SshDir(this._sshKeyArray,optionsArg.sshDirPath);
|
this._sshDir = new SshDir(this._sshKeyArray,this._sshConfig,optionsArg.sshDirPath)
|
||||||
this._sshSync = optionsArg.sshSync;
|
this._sshSync = optionsArg.sshSync
|
||||||
};
|
};
|
||||||
|
|
||||||
//altering methods
|
// altering methods
|
||||||
addKey(sshKeyArg:SshKey){
|
addKey(sshKeyArg: SshKey) {
|
||||||
this._syncAuto("from");
|
this._syncAuto('from')
|
||||||
this._sshKeyArray.push(sshKeyArg);
|
this._sshKeyArray.push(sshKeyArg)
|
||||||
this._syncAuto("to");
|
this._syncAuto('to')
|
||||||
};
|
};
|
||||||
removeKey(sshKeyArg:SshKey){
|
removeKey(sshKeyArg: SshKey) {
|
||||||
this._syncAuto("from");
|
this._syncAuto('from')
|
||||||
let filteredArray = this._sshKeyArray.filter((sshKeyArg2:SshKey) => {
|
let filteredArray = this._sshKeyArray.filter((sshKeyArg2: SshKey) => {
|
||||||
return (sshKeyArg != sshKeyArg2);
|
return (sshKeyArg != sshKeyArg2)
|
||||||
});
|
})
|
||||||
this._sshKeyArray = filteredArray;
|
this._sshKeyArray = filteredArray
|
||||||
this._syncAuto("to");
|
this._syncAuto('to')
|
||||||
};
|
};
|
||||||
replaceKey(sshKeyOldArg:SshKey,sshKeyNewArg:SshKey){
|
replaceKey(sshKeyOldArg: SshKey,sshKeyNewArg: SshKey) {
|
||||||
this._syncAuto("from");
|
this._syncAuto('from')
|
||||||
this.removeKey(sshKeyOldArg);
|
this.removeKey(sshKeyOldArg)
|
||||||
this.addKey(sshKeyNewArg);
|
this.addKey(sshKeyNewArg)
|
||||||
this._syncAuto("to");
|
this._syncAuto('to')
|
||||||
};
|
};
|
||||||
|
|
||||||
//
|
//
|
||||||
getKey(hostArg:string):SshKey{
|
getKey(hostArg: string): SshKey {
|
||||||
this._syncAuto("from");
|
this._syncAuto('from')
|
||||||
let filteredArray = this._sshKeyArray.filter(function(keyArg){
|
let filteredArray = this._sshKeyArray.filter(function(keyArg){
|
||||||
return (keyArg.host == hostArg);
|
return (keyArg.host === hostArg)
|
||||||
});
|
})
|
||||||
if(filteredArray.length > 0){
|
if (filteredArray.length > 0) {
|
||||||
return filteredArray[0];
|
return filteredArray[0]
|
||||||
} else {
|
} else {
|
||||||
return undefined;
|
return undefined
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
get sshKeys():SshKey[] {
|
get sshKeys(): SshKey[] {
|
||||||
this._syncAuto("from");
|
this._syncAuto('from')
|
||||||
return this._sshKeyArray;
|
return this._sshKeyArray
|
||||||
};
|
};
|
||||||
|
|
||||||
//FS methods
|
// FS methods
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* write SshInstance to disk
|
* write SshInstance to disk
|
||||||
*/
|
*/
|
||||||
writeToDisk(){
|
writeToDisk(dirPathArg?: string) {
|
||||||
this._sync("to");
|
this._sync('to',dirPathArg)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* read ab SshInstance from disk
|
* read ab SshInstance from disk
|
||||||
*/
|
*/
|
||||||
readFromDisk(){
|
readFromDisk(dirPathArg?: string) {
|
||||||
this._sync("from");
|
this._sync('from',dirPathArg)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ===============================================================
|
/* ===============================================================
|
||||||
========================= Private Methods ========================
|
========================= Private Methods ========================
|
||||||
================================================================*/
|
================================================================*/
|
||||||
|
|
||||||
private _makeConfig (){
|
private _makeConfig () {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* method to invoke SshInstance _sync automatically when sshSync is true
|
* method to invoke SshInstance _sync automatically when sshSync is true
|
||||||
*/
|
*/
|
||||||
private _syncAuto(directionArg){
|
private _syncAuto(directionArg) {
|
||||||
if(this._sshSync) this._sync(directionArg);
|
if (this._sshSync) this._sync(directionArg)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* private method to sync SshInstance
|
* private method to sync SshInstance
|
||||||
*/
|
*/
|
||||||
private _sync(directionArg:string){
|
private _sync(directionArg: string,dirPathArg?: string) {
|
||||||
if(directionArg == "from"){
|
if (directionArg === 'from') {
|
||||||
this._sshDir.readFromDir(); // call sync method of sshDir class;
|
this._sshDir.readFromDir(dirPathArg) // call sync method of sshDir class;
|
||||||
} else if(directionArg == "to") {
|
} else if (directionArg === 'to') {
|
||||||
this._sshDir.writeToDir();
|
this._sshDir.writeToDir(dirPathArg)
|
||||||
} else {
|
} else {
|
||||||
throw new Error("directionArg not recognised. Must be 'to' or 'from'");
|
throw new Error("directionArg not recognised. Must be 'to' or 'from'")
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,89 +1,99 @@
|
|||||||
import "typings-global";
|
import 'typings-global'
|
||||||
import * as plugins from "./smartssh.plugins";
|
import * as plugins from './smartssh.plugins'
|
||||||
import * as helpers from "./smartssh.classes.helpers";
|
import * as helpers from './smartssh.classes.helpers'
|
||||||
|
|
||||||
export class SshKey {
|
export class SshKey {
|
||||||
private _privKey:string;
|
private _privKey: string
|
||||||
private _pubKey:string;
|
private _pubKey: string
|
||||||
private _hostVar:string;
|
private _hostVar: string
|
||||||
private _authorized:boolean;
|
private _authorized: boolean
|
||||||
constructor(optionsArg:{private?:string,public?:string,host?:string,authorized?:boolean}={}){
|
|
||||||
this._privKey = optionsArg.private;
|
/**
|
||||||
this._pubKey = optionsArg.public;
|
* the constructor for class SshKey
|
||||||
this._hostVar = optionsArg.host;
|
*/
|
||||||
this._authorized = optionsArg.authorized;
|
constructor(optionsArg: {private?: string,public?: string,host?: string,authorized?: boolean}= {}) {
|
||||||
|
this._privKey = optionsArg.private
|
||||||
|
this._pubKey = optionsArg.public
|
||||||
|
this._hostVar = optionsArg.host
|
||||||
|
this._authorized = optionsArg.authorized
|
||||||
};
|
};
|
||||||
|
|
||||||
// this.host
|
// this.host
|
||||||
get host(){
|
get host(){
|
||||||
return this._hostVar;
|
return this._hostVar
|
||||||
};
|
};
|
||||||
set host(hostArg:string){
|
set host(hostArg: string){
|
||||||
this._hostVar = hostArg;
|
this._hostVar = hostArg
|
||||||
};
|
};
|
||||||
|
|
||||||
// this.privKey
|
// this.privKey
|
||||||
get privKey(){
|
get privKey(){
|
||||||
return this._privKey;
|
return this._privKey
|
||||||
};
|
};
|
||||||
set privKey(privateKeyArg:string){
|
set privKey(privateKeyArg: string){
|
||||||
this._privKey = privateKeyArg;
|
this._privKey = privateKeyArg
|
||||||
};
|
};
|
||||||
|
|
||||||
// this.privKeyBase64
|
// this.privKeyBase64
|
||||||
get privKeyBase64(){
|
get privKeyBase64(){
|
||||||
return plugins.base64.encode(this._privKey);
|
return plugins.smartstring.base64.encode(this._privKey)
|
||||||
}
|
}
|
||||||
set privKeyBase64(privateKeyArg:string) {
|
set privKeyBase64(privateKeyArg: string) {
|
||||||
this._privKey = plugins.base64.decode(privateKeyArg);
|
this._privKey = plugins.smartstring.base64.decode(privateKeyArg)
|
||||||
}
|
}
|
||||||
|
|
||||||
// this.pubKey
|
// this.pubKey
|
||||||
get pubKey(){
|
get pubKey(){
|
||||||
return this._pubKey;
|
return this._pubKey
|
||||||
}
|
}
|
||||||
set pubKey(publicKeyArg:string){
|
set pubKey(publicKeyArg: string){
|
||||||
this._pubKey = publicKeyArg;
|
this._pubKey = publicKeyArg
|
||||||
};
|
};
|
||||||
|
|
||||||
// this.pubKeyBase64
|
// this.pubKeyBase64
|
||||||
get pubKeyBase64(){
|
get pubKeyBase64(){
|
||||||
return plugins.base64.encode(this._pubKey);
|
return plugins.smartstring.base64.encode(this._pubKey)
|
||||||
}
|
}
|
||||||
set pubKeyBase64(publicKeyArg:string) {
|
set pubKeyBase64(publicKeyArg: string) {
|
||||||
this._pubKey = plugins.base64.decode(publicKeyArg);
|
this._pubKey = plugins.smartstring.base64.decode(publicKeyArg)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get authorized(){
|
||||||
|
return this._authorized
|
||||||
|
}
|
||||||
|
set authorized(authorizedArg: boolean){
|
||||||
|
this._authorized = authorizedArg
|
||||||
|
}
|
||||||
get type(){
|
get type(){
|
||||||
if(this._privKey && this._pubKey){
|
if (this._privKey && this._pubKey) {
|
||||||
return "duplex";
|
return 'duplex'
|
||||||
} else if(this._privKey){
|
} else if (this._privKey) {
|
||||||
return "private";
|
return 'private'
|
||||||
} else if(this._pubKey){
|
} else if (this._pubKey) {
|
||||||
return "public";
|
return 'public'
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
set type(someVlueArg:any){
|
set type(someVlueArg: any){
|
||||||
console.log("the type of an SshKey connot be set. This value is autpcomputed.")
|
console.log('the type of an SshKey connot be set. This value is autpcomputed.')
|
||||||
}
|
}
|
||||||
|
|
||||||
// methods
|
// methods
|
||||||
read(filePathArg){
|
read(filePathArg) {
|
||||||
|
|
||||||
}
|
}
|
||||||
store(filePathArg?:string){
|
|
||||||
let filePathObj = plugins.path.parse(filePathArg);
|
store(dirPathArg: string) {
|
||||||
if(filePathObj.ext = ".priv"){
|
plugins.fs.ensureDirSync(dirPathArg)
|
||||||
plugins.smartfile.memory.toFsSync(this._privKey,filePathArg);
|
let fileNameBase = this.host
|
||||||
} else if (filePathObj.ext = ".pub"){
|
if (this._privKey) {
|
||||||
plugins.smartfile.memory.toFsSync(this._pubKey,filePathArg);
|
let filePath = plugins.path.join(dirPathArg,fileNameBase)
|
||||||
} else { //we assume we are given a directory as filePathArg, so we store the whole key
|
plugins.smartfile.memory.toFsSync(this._privKey,filePath)
|
||||||
plugins.fs.ensureDirSync(filePathObj.dir);
|
plugins.shelljs.chmod(600,filePath)
|
||||||
this.store(plugins.path.join(filePathObj.dir,"key.priv")); // call this function recursivly
|
};
|
||||||
this.store(plugins.path.join(filePathObj.dir,"key.pub")); // call this function recursivly
|
if (this._pubKey) {
|
||||||
|
let filePath = plugins.path.join(dirPathArg,fileNameBase + '.pub')
|
||||||
|
plugins.smartfile.memory.toFsSync(this._pubKey,filePath)
|
||||||
|
plugins.shelljs.chmod(600,filePath)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let testKey = new SshKey();
|
|
@ -1,8 +1,22 @@
|
|||||||
import "typings-global"
|
import 'typings-global'
|
||||||
export import beautylog = require("beautylog");
|
import * as beautylog from 'beautylog'
|
||||||
export let base64 = require("js-base64").Base64;
|
import * as fs from 'fs-extra'
|
||||||
export let fs = require("fs-extra");
|
import * as minimatch from 'minimatch'
|
||||||
export let minimatch = require("minimatch");
|
import * as path from 'path'
|
||||||
export import path = require("path");
|
import * as q from 'q'
|
||||||
export import smartfile = require("smartfile");
|
import * as shelljs from 'shelljs'
|
||||||
export import smartpath = require("smartpath");
|
import * as smartfile from 'smartfile'
|
||||||
|
import * as smartpath from 'smartpath'
|
||||||
|
import * as smartstring from 'smartstring'
|
||||||
|
|
||||||
|
export {
|
||||||
|
beautylog,
|
||||||
|
fs,
|
||||||
|
minimatch,
|
||||||
|
path,
|
||||||
|
q,
|
||||||
|
shelljs,
|
||||||
|
smartfile,
|
||||||
|
smartpath,
|
||||||
|
smartstring
|
||||||
|
}
|
||||||
|
@ -1,8 +0,0 @@
|
|||||||
{
|
|
||||||
"version": false,
|
|
||||||
"dependencies": {},
|
|
||||||
"ambientDependencies": {
|
|
||||||
"colors": "registry:dt/colors#0.6.0-1+20160317120654",
|
|
||||||
"node": "registry:dt/node#4.0.0+20160423143914"
|
|
||||||
}
|
|
||||||
}
|
|
3
tslint.json
Normal file
3
tslint.json
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"extends": "tslint-config-standard"
|
||||||
|
}
|
Reference in New Issue
Block a user