23 Commits

Author SHA1 Message Date
9bc3aea59c 1.1.1 2016-06-25 02:53:09 +02:00
f5ff302d4d updated structure of SshConfig 2016-06-25 02:53:05 +02:00
cac8203bf5 1.1.0 2016-06-25 02:29:51 +02:00
e4532271cc major structural update 2016-06-25 02:29:34 +02:00
faf6c91199 update 2016-06-25 02:10:53 +02:00
d0009e7a9c update stucture 2016-06-24 20:58:55 +02:00
da76df2c3e 1.0.7 2016-06-24 02:50:02 +02:00
a43976110a update structure 2016-06-24 02:49:55 +02:00
c3ee35a699 1.0.6 2016-06-14 00:34:07 +02:00
a0ce759552 update links in package.json to point to gitlab 2016-06-14 00:33:59 +02:00
201d5cc6d7 some restructuring 2016-06-14 00:27:55 +02:00
e5bdfff743 added ability to add keys as base 64 2016-06-14 00:11:20 +02:00
967c9fd9d1 now using legacy tag in gitlab-ci.yml 2016-06-13 23:31:41 +02:00
35da2f0b73 strip pages from gitlab-ci for now 2016-06-13 23:29:37 +02:00
5e991a4e4f update gitlab ci base image 2016-06-13 23:26:54 +02:00
0f75f5238c update dependencies 2016-06-13 23:26:36 +02:00
e8f3047ac0 1.0.5 2016-06-01 05:18:08 +02:00
812d28ee3d add typings to package.json 2016-06-01 05:17:49 +02:00
fa301eea71 improved tests and reached 80% coverage milestone. 2016-06-01 05:09:20 +02:00
48ccf317d6 update some cosmetics 2016-06-01 04:25:59 +02:00
9b3af8a50a 1.0.4 2016-06-01 04:18:40 +02:00
78aa36c2be added more tests 2016-06-01 04:18:31 +02:00
09d96fd94c update directory sync 2016-06-01 03:57:17 +02:00
24 changed files with 488 additions and 217 deletions

View File

@ -1,4 +1,4 @@
image: hosttoday/ht-docker-node:latest image: hosttoday/ht-docker-node:npmts
stages: stages:
- test - test
@ -11,6 +11,7 @@ testLTS:
- npmci test lts - npmci test lts
tags: tags:
- docker - docker
- lossless
testSTABLE: testSTABLE:
stage: test stage: test
@ -18,11 +19,12 @@ testSTABLE:
- npmci test stable - npmci test stable
tags: tags:
- docker - docker
- lossless
testLEGACY: testLEGACY:
stage: test stage: test
script: script:
- npmci test 0 - npmci test legacy
allow_failure: true allow_failure: true
release: release:
@ -33,14 +35,4 @@ release:
- tags - tags
tags: tags:
- docker - docker
- lossless
pages:
stage: page
script:
- mkdir public
- npmci npmpage
artifacts:
paths:
- public
only:
- tags

2
dist/index.js vendored
View File

@ -9,4 +9,4 @@ 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;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxRQUFPLGdCQUNQLENBQUMsQ0FEc0I7QUFHdkIsNkNBQTBCLGdDQUFnQyxDQUFDO0FBQW5ELGlFQUFtRDtBQUMzRCx3Q0FBcUIsMkJBQTJCLENBQUM7QUFBekMsa0RBQXlDO0FBQ2pELHdDQUFxQiwyQkFBMkIsQ0FBQztBQUF6QyxrREFBeUM7QUFDakQsMkNBQXdCLDhCQUE4QixDQUFDO0FBQS9DLDJEQUErQyIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBcInR5cGluZ3MtZ2xvYmFsXCJcclxuaW1wb3J0ICogYXMgcGx1Z2lucyBmcm9tIFwiLi9zbWFydHNzaC5wbHVnaW5zXCI7XHJcblxyXG5leHBvcnQge1NzaEluc3RhbmNlfSBmcm9tIFwiLi9zbWFydHNzaC5jbGFzc2VzLnNzaGluc3RhbmNlXCI7XHJcbmV4cG9ydCB7U3NoS2V5fSBmcm9tIFwiLi9zbWFydHNzaC5jbGFzc2VzLnNzaGtleVwiO1xyXG5leHBvcnQge1NzaERpcn0gZnJvbSBcIi4vc21hcnRzc2guY2xhc3Nlcy5zc2hkaXJcIjtcclxuZXhwb3J0IHtTc2hDb25maWd9IGZyb20gXCIuL3NtYXJ0c3NoLmNsYXNzZXMuc3NoY29uZmlnXCI7Il19 //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxRQUFPLGdCQUNQLENBQUMsQ0FEc0I7QUFHdkIsNkNBQTBCLGdDQUFnQyxDQUFDO0FBQW5ELGlFQUFtRDtBQUMzRCx3Q0FBcUIsMkJBQTJCLENBQUM7QUFBekMsa0RBQXlDO0FBQ2pELHdDQUFxQiwyQkFBMkIsQ0FBQztBQUF6QyxrREFBeUM7QUFDakQsMkNBQXdCLDhCQUE4QixDQUFDO0FBQS9DLDJEQUErQyIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBcInR5cGluZ3MtZ2xvYmFsXCJcbmltcG9ydCAqIGFzIHBsdWdpbnMgZnJvbSBcIi4vc21hcnRzc2gucGx1Z2luc1wiO1xuXG5leHBvcnQge1NzaEluc3RhbmNlfSBmcm9tIFwiLi9zbWFydHNzaC5jbGFzc2VzLnNzaGluc3RhbmNlXCI7XG5leHBvcnQge1NzaEtleX0gZnJvbSBcIi4vc21hcnRzc2guY2xhc3Nlcy5zc2hrZXlcIjtcbmV4cG9ydCB7U3NoRGlyfSBmcm9tIFwiLi9zbWFydHNzaC5jbGFzc2VzLnNzaGRpclwiO1xuZXhwb3J0IHtTc2hDb25maWd9IGZyb20gXCIuL3NtYXJ0c3NoLmNsYXNzZXMuc3NoY29uZmlnXCI7Il19

View File

@ -1,4 +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[];
export declare let getKeyIndex: (hostArg: string) => number;

View File

@ -4,8 +4,5 @@ exports.sshKeyArrayFromDir = function (dirArg) {
var sshKeyArray = []; //TODO var sshKeyArray = []; //TODO
return sshKeyArray; return sshKeyArray;
}; };
exports.getKeyIndex = function (hostArg) {
return 0; //TODO
};
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNtYXJ0c3NoLmNsYXNzZXMuaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsUUFBTyxnQkFDUCxDQUFDLENBRHNCO0FBSVosMEJBQWtCLEdBQUcsVUFBUyxNQUFhO0lBQ2xELElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU07SUFDNUIsTUFBTSxDQUFDLFdBQVcsQ0FBQztBQUN2QixDQUFDLENBQUE7QUFFVSxtQkFBVyxHQUFHLFVBQVMsT0FBYztJQUM1QyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTztBQUNyQixDQUFDLENBQUEiLCJmaWxlIjoic21hcnRzc2guY2xhc3Nlcy5oZWxwZXJzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFwidHlwaW5ncy1nbG9iYWxcIlxyXG5pbXBvcnQgKiBhcyBwbHVnaW5zIGZyb20gXCIuL3NtYXJ0c3NoLnBsdWdpbnNcIjtcclxuaW1wb3J0IHtTc2hLZXl9IGZyb20gXCIuL3NtYXJ0c3NoLmNsYXNzZXMuc3Noa2V5XCI7XHJcblxyXG5leHBvcnQgbGV0IHNzaEtleUFycmF5RnJvbURpciA9IGZ1bmN0aW9uKGRpckFyZzpzdHJpbmcpOlNzaEtleVtde1xyXG4gICAgbGV0IHNzaEtleUFycmF5ID0gW107IC8vVE9ET1xyXG4gICAgcmV0dXJuIHNzaEtleUFycmF5O1xyXG59XHJcblxyXG5leHBvcnQgbGV0IGdldEtleUluZGV4ID0gZnVuY3Rpb24oaG9zdEFyZzpzdHJpbmcpe1xyXG4gICAgcmV0dXJuIDA7IC8vVE9ETyBcclxufSJdfQ== //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNtYXJ0c3NoLmNsYXNzZXMuaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsUUFBTyxnQkFDUCxDQUFDLENBRHNCO0FBSVosMEJBQWtCLEdBQUcsVUFBUyxNQUFhO0lBQ2xELElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU07SUFDNUIsTUFBTSxDQUFDLFdBQVcsQ0FBQztBQUN2QixDQUFDLENBQUEiLCJmaWxlIjoic21hcnRzc2guY2xhc3Nlcy5oZWxwZXJzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFwidHlwaW5ncy1nbG9iYWxcIlxuaW1wb3J0ICogYXMgcGx1Z2lucyBmcm9tIFwiLi9zbWFydHNzaC5wbHVnaW5zXCI7XG5pbXBvcnQge1NzaEtleX0gZnJvbSBcIi4vc21hcnRzc2guY2xhc3Nlcy5zc2hrZXlcIjtcblxuZXhwb3J0IGxldCBzc2hLZXlBcnJheUZyb21EaXIgPSBmdW5jdGlvbihkaXJBcmc6c3RyaW5nKTpTc2hLZXlbXXtcbiAgICBsZXQgc3NoS2V5QXJyYXkgPSBbXTsgLy9UT0RPXG4gICAgcmV0dXJuIHNzaEtleUFycmF5O1xufSJdfQ==

View File

@ -1,4 +1,15 @@
import "typings-global"; import "typings-global";
import { SshKey } from "./smartssh.classes.sshkey";
export declare class SshConfig { export declare class SshConfig {
constructor(); sshKeyArray: SshKey[];
constructor(sshKeyArrayArg: SshKey[]);
/**
* stores a config file
*/
storeConfig(dirPathArg: string): any;
}
export interface configObject {
host: string;
authorized: boolean;
sshKey: SshKey;
} }

View File

@ -1,10 +1,24 @@
"use strict"; "use strict";
require("typings-global"); require("typings-global");
var plugins = require("./smartssh.plugins");
var SshConfig = (function () { var SshConfig = (function () {
function SshConfig() { function SshConfig(sshKeyArrayArg) {
this.sshKeyArray = sshKeyArrayArg;
} }
/**
* stores a config file
*/
SshConfig.prototype.storeConfig = function (dirPathArg) {
var done = plugins.q.defer();
var configArray;
return done.promise;
};
return SshConfig; return SshConfig;
}()); }());
exports.SshConfig = SshConfig; exports.SshConfig = SshConfig;
;
var createConfigPath = function () {
};
;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNtYXJ0c3NoLmNsYXNzZXMuc3NoY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxRQUFPLGdCQUFnQixDQUFDLENBQUE7QUFHeEI7SUFDSTtJQUVBLENBQUM7SUFDTCxnQkFBQztBQUFELENBSkEsQUFJQyxJQUFBO0FBSlksaUJBQVMsWUFJckIsQ0FBQSIsImZpbGUiOiJzbWFydHNzaC5jbGFzc2VzLnNzaGNvbmZpZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBcInR5cGluZ3MtZ2xvYmFsXCI7XHJcbmltcG9ydCAqIGFzIHBsdWdpbnMgZnJvbSBcIi4vc21hcnRzc2gucGx1Z2luc1wiO1xyXG5pbXBvcnQgKiBhcyBoZWxwZXJzIGZyb20gXCIuL3NtYXJ0c3NoLmNsYXNzZXMuaGVscGVyc1wiO1xyXG5leHBvcnQgY2xhc3MgU3NoQ29uZmlnIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcbn0iXX0= //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNtYXJ0c3NoLmNsYXNzZXMuc3NoY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxRQUFPLGdCQUFnQixDQUFDLENBQUE7QUFDeEIsSUFBWSxPQUFPLFdBQU0sb0JBQW9CLENBQUMsQ0FBQTtBQUk5QztJQUVJLG1CQUFZLGNBQXVCO1FBQy9CLElBQUksQ0FBQyxXQUFXLEdBQUcsY0FBYyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7T0FFRztJQUNILCtCQUFXLEdBQVgsVUFBWSxVQUFpQjtRQUN6QixJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzdCLElBQUksV0FBMEIsQ0FBQztRQUUvQixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN4QixDQUFDO0lBQ0wsZ0JBQUM7QUFBRCxDQWZBLEFBZUMsSUFBQTtBQWZZLGlCQUFTLFlBZXJCLENBQUE7QUFBQSxDQUFDO0FBRUYsSUFBSSxnQkFBZ0IsR0FBRztBQUV2QixDQUFDLENBQUE7QUFNQSxDQUFDIiwiZmlsZSI6InNtYXJ0c3NoLmNsYXNzZXMuc3NoY29uZmlnLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFwidHlwaW5ncy1nbG9iYWxcIjtcbmltcG9ydCAqIGFzIHBsdWdpbnMgZnJvbSBcIi4vc21hcnRzc2gucGx1Z2luc1wiO1xuaW1wb3J0ICogYXMgaGVscGVycyBmcm9tIFwiLi9zbWFydHNzaC5jbGFzc2VzLmhlbHBlcnNcIjtcbmltcG9ydCB7U3NoS2V5fSBmcm9tIFwiLi9zbWFydHNzaC5jbGFzc2VzLnNzaGtleVwiXG5cbmV4cG9ydCBjbGFzcyBTc2hDb25maWcge1xuICAgIHNzaEtleUFycmF5OlNzaEtleVtdO1xuICAgIGNvbnN0cnVjdG9yKHNzaEtleUFycmF5QXJnOlNzaEtleVtdKXtcbiAgICAgICAgdGhpcy5zc2hLZXlBcnJheSA9IHNzaEtleUFycmF5QXJnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHN0b3JlcyBhIGNvbmZpZyBmaWxlXG4gICAgICovXG4gICAgc3RvcmVDb25maWcoZGlyUGF0aEFyZzpzdHJpbmcpe1xuICAgICAgICBsZXQgZG9uZSA9IHBsdWdpbnMucS5kZWZlcigpO1xuICAgICAgICBsZXQgY29uZmlnQXJyYXk6Y29uZmlnT2JqZWN0W107XG5cbiAgICAgICAgcmV0dXJuIGRvbmUucHJvbWlzZTtcbiAgICB9XG59O1xuXG5sZXQgY3JlYXRlQ29uZmlnUGF0aCA9ICgpID0+IHtcbiAgICBcbn1cblxuZXhwb3J0IGludGVyZmFjZSBjb25maWdPYmplY3Qge1xuICAgIGhvc3Q6c3RyaW5nO1xuICAgIGF1dGhvcml6ZWQ6Ym9vbGVhbjtcbiAgICBzc2hLZXk6U3NoS2V5O1xufTtcblxuIl19

View File

@ -1,10 +1,10 @@
import "typings-global"; import "typings-global";
import { SshInstance } from "./smartssh.classes.sshinstance";
import { SshKey } from "./smartssh.classes.sshkey"; import { SshKey } from "./smartssh.classes.sshkey";
export declare class SshDir { export declare class SshDir {
path: string; path: string;
constructor(sshDirPathArg: string); private sshKeyArray;
syncToDir(sshInstanceArg: SshInstance): void; constructor(sshKeyArray: SshKey[], sshDirPathArg?: string);
syncFromDir(): void; writeToDir(): void;
readFromDir(): void;
getKeys(): SshKey[]; getKeys(): SshKey[];
} }

View File

@ -3,20 +3,24 @@ require("typings-global");
var plugins = require("./smartssh.plugins"); var plugins = require("./smartssh.plugins");
var helpers = require("./smartssh.classes.helpers"); var helpers = require("./smartssh.classes.helpers");
var SshDir = (function () { var SshDir = (function () {
function SshDir(sshDirPathArg) { function SshDir(sshKeyArray, sshDirPathArg) {
var sshDirPath; this.sshKeyArray = sshKeyArray;
if (sshDirPathArg) { if (sshDirPathArg) {
sshDirPath = sshDirPathArg; this.path = sshDirPathArg;
} }
else { else {
sshDirPath = plugins.smartpath.get.home(); this.path = plugins.path.join(plugins.smartpath.get.home(), ".ssh/");
} }
this.path = sshDirPath; ;
} }
SshDir.prototype.syncToDir = function (sshInstanceArg) { SshDir.prototype.writeToDir = function () {
var _this = this;
this.sshKeyArray.forEach(function (sshKeyArg) {
sshKeyArg.store(_this.path);
});
}; };
; ;
SshDir.prototype.syncFromDir = function () { SshDir.prototype.readFromDir = function () {
}; };
SshDir.prototype.getKeys = function () { SshDir.prototype.getKeys = function () {
return helpers.sshKeyArrayFromDir(this.path); return helpers.sshKeyArrayFromDir(this.path);
@ -25,4 +29,4 @@ var SshDir = (function () {
}()); }());
exports.SshDir = SshDir; exports.SshDir = SshDir;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNtYXJ0c3NoLmNsYXNzZXMuc3NoZGlyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxRQUFPLGdCQUFnQixDQUFDLENBQUE7QUFDeEIsSUFBWSxPQUFPLFdBQU0sb0JBQW9CLENBQUMsQ0FBQTtBQUM5QyxJQUFZLE9BQU8sV0FBTSw0QkFBNEIsQ0FBQyxDQUFBO0FBSXREO0lBRUksZ0JBQVksYUFBb0I7UUFDNUIsSUFBSSxVQUFpQixDQUFDO1FBQ3RCLEVBQUUsQ0FBQSxDQUFDLGFBQWEsQ0FBQyxDQUFBLENBQUM7WUFDZCxVQUFVLEdBQUcsYUFBYSxDQUFDO1FBQy9CLENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNKLFVBQVUsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM5QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUM7SUFDM0IsQ0FBQztJQUNELDBCQUFTLEdBQVQsVUFBVSxjQUEwQjtJQUVwQyxDQUFDOztJQUNELDRCQUFXLEdBQVg7SUFFQSxDQUFDO0lBQ0Qsd0JBQU8sR0FBUDtRQUNJLE1BQU0sQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFDTCxhQUFDO0FBQUQsQ0FwQkEsQUFvQkMsSUFBQTtBQXBCWSxjQUFNLFNBb0JsQixDQUFBIiwiZmlsZSI6InNtYXJ0c3NoLmNsYXNzZXMuc3NoZGlyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFwidHlwaW5ncy1nbG9iYWxcIjtcclxuaW1wb3J0ICogYXMgcGx1Z2lucyBmcm9tIFwiLi9zbWFydHNzaC5wbHVnaW5zXCI7XHJcbmltcG9ydCAqIGFzIGhlbHBlcnMgZnJvbSBcIi4vc21hcnRzc2guY2xhc3Nlcy5oZWxwZXJzXCI7XHJcbmltcG9ydCB7U3NoSW5zdGFuY2V9IGZyb20gXCIuL3NtYXJ0c3NoLmNsYXNzZXMuc3NoaW5zdGFuY2VcIjtcclxuaW1wb3J0IHtTc2hLZXl9IGZyb20gXCIuL3NtYXJ0c3NoLmNsYXNzZXMuc3Noa2V5XCI7XHJcbmltcG9ydCB7U3NoQ29uZmlnfSBmcm9tIFwiLi9zbWFydHNzaC5jbGFzc2VzLnNzaGNvbmZpZ1wiO1xyXG5leHBvcnQgY2xhc3MgU3NoRGlyIHsgLy8gc3NoRGlyIGNsYXNzIC0+IE5PVCBFWFBPUlRFRCwgT05MWSBGT1IgSU5URVJOQUwgVVNFXHJcbiAgICBwYXRoOnN0cmluZzsgLy8gdGhlIHBhdGggb2YgdGhlIHNzaCBkaXJlY3RvcnlcclxuICAgIGNvbnN0cnVjdG9yKHNzaERpclBhdGhBcmc6c3RyaW5nKXtcclxuICAgICAgICBsZXQgc3NoRGlyUGF0aDpzdHJpbmc7XHJcbiAgICAgICAgaWYoc3NoRGlyUGF0aEFyZyl7XHJcbiAgICAgICAgICAgIHNzaERpclBhdGggPSBzc2hEaXJQYXRoQXJnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHNzaERpclBhdGggPSBwbHVnaW5zLnNtYXJ0cGF0aC5nZXQuaG9tZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnBhdGggPSBzc2hEaXJQYXRoO1xyXG4gICAgfVxyXG4gICAgc3luY1RvRGlyKHNzaEluc3RhbmNlQXJnOlNzaEluc3RhbmNlKXsgLy9zeW5jcyBcclxuICAgICAgICBcclxuICAgIH07XHJcbiAgICBzeW5jRnJvbURpcigpe1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG4gICAgZ2V0S2V5cygpe1xyXG4gICAgICAgIHJldHVybiBoZWxwZXJzLnNzaEtleUFycmF5RnJvbURpcih0aGlzLnBhdGgpO1xyXG4gICAgfVxyXG59Il19 //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNtYXJ0c3NoLmNsYXNzZXMuc3NoZGlyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxRQUFPLGdCQUFnQixDQUFDLENBQUE7QUFDeEIsSUFBWSxPQUFPLFdBQU0sb0JBQW9CLENBQUMsQ0FBQTtBQUM5QyxJQUFZLE9BQU8sV0FBTSw0QkFBNEIsQ0FBQyxDQUFBO0FBSXREO0lBR0ksZ0JBQVksV0FBb0IsRUFBQyxhQUFxQjtRQUNsRCxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUMvQixFQUFFLENBQUEsQ0FBQyxhQUFhLENBQUMsQ0FBQSxDQUFDO1lBQ2QsSUFBSSxDQUFDLElBQUksR0FBRyxhQUFhLENBQUM7UUFDOUIsQ0FBQztRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ0osSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBQyxPQUFPLENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBQUEsQ0FBQztJQUNOLENBQUM7SUFDRCwyQkFBVSxHQUFWO1FBQUEsaUJBS0M7UUFKRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxVQUFDLFNBQVM7WUFDL0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFL0IsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOztJQUNELDRCQUFXLEdBQVg7SUFFQSxDQUFDO0lBQ0Qsd0JBQU8sR0FBUDtRQUNJLE1BQU0sQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFDTCxhQUFDO0FBQUQsQ0F2QkEsQUF1QkMsSUFBQTtBQXZCWSxjQUFNLFNBdUJsQixDQUFBIiwiZmlsZSI6InNtYXJ0c3NoLmNsYXNzZXMuc3NoZGlyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFwidHlwaW5ncy1nbG9iYWxcIjtcbmltcG9ydCAqIGFzIHBsdWdpbnMgZnJvbSBcIi4vc21hcnRzc2gucGx1Z2luc1wiO1xuaW1wb3J0ICogYXMgaGVscGVycyBmcm9tIFwiLi9zbWFydHNzaC5jbGFzc2VzLmhlbHBlcnNcIjtcbmltcG9ydCB7U3NoSW5zdGFuY2V9IGZyb20gXCIuL3NtYXJ0c3NoLmNsYXNzZXMuc3NoaW5zdGFuY2VcIjtcbmltcG9ydCB7U3NoS2V5fSBmcm9tIFwiLi9zbWFydHNzaC5jbGFzc2VzLnNzaGtleVwiO1xuaW1wb3J0IHtTc2hDb25maWd9IGZyb20gXCIuL3NtYXJ0c3NoLmNsYXNzZXMuc3NoY29uZmlnXCI7XG5leHBvcnQgY2xhc3MgU3NoRGlyIHsgLy8gc3NoRGlyIGNsYXNzIC0+IE5PVCBFWFBPUlRFRCwgT05MWSBGT1IgSU5URVJOQUwgVVNFXG4gICAgcGF0aDpzdHJpbmc7IC8vIHRoZSBwYXRoIG9mIHRoZSBzc2ggZGlyZWN0b3J5XG4gICAgcHJpdmF0ZSBzc2hLZXlBcnJheTpTc2hLZXlbXTtcbiAgICBjb25zdHJ1Y3Rvcihzc2hLZXlBcnJheTpTc2hLZXlbXSxzc2hEaXJQYXRoQXJnPzpzdHJpbmcpe1xuICAgICAgICB0aGlzLnNzaEtleUFycmF5ID0gc3NoS2V5QXJyYXk7XG4gICAgICAgIGlmKHNzaERpclBhdGhBcmcpe1xuICAgICAgICAgICAgdGhpcy5wYXRoID0gc3NoRGlyUGF0aEFyZztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucGF0aCA9IHBsdWdpbnMucGF0aC5qb2luKHBsdWdpbnMuc21hcnRwYXRoLmdldC5ob21lKCksXCIuc3NoL1wiKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgd3JpdGVUb0RpcigpeyAvLyBzeW5jcyBzc2hJbnN0YW5jZSB0byBkaXJlY3RvcnlcbiAgICAgICAgdGhpcy5zc2hLZXlBcnJheS5mb3JFYWNoKChzc2hLZXlBcmcpID0+IHtcbiAgICAgICAgICAgIHNzaEtleUFyZy5zdG9yZSh0aGlzLnBhdGgpO1xuICAgICAgICAgICAgXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgcmVhZEZyb21EaXIoKXsgLy8gc3luY3Mgc3NoSW5zdGFuY2UgZnJvbSBkaXJlY3RvcnlcbiAgICAgICAgXG4gICAgfVxuICAgIGdldEtleXMoKXtcbiAgICAgICAgcmV0dXJuIGhlbHBlcnMuc3NoS2V5QXJyYXlGcm9tRGlyKHRoaXMucGF0aCk7XG4gICAgfVxufSJdfQ==

View File

@ -1,18 +1,34 @@
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 sshConfig; private _sshKeyArray;
private sshDir; private _sshConfig;
private sshKeys; private _sshDir;
private sshSync; private _sshSync;
constructor(optionsArg?: { constructor(optionsArg?: {
sshDir?: string; sshDirPath?: string;
sshSync?: boolean; sshSync?: boolean;
}); });
addKey(sshKeyArg: SshKey): void; addKey(sshKeyArg: SshKey): void;
getKey(hostArg: string): SshKey;
getKeys(): SshKey[];
removeKey(sshKeyArg: SshKey): void; removeKey(sshKeyArg: SshKey): void;
replaceKey(sshKeyOldArg: SshKey, sshKeyNewArg: SshKey): void; replaceKey(sshKeyOldArg: SshKey, sshKeyNewArg: SshKey): void;
sync(): void; getKey(hostArg: string): SshKey;
sshKeys: SshKey[];
/**
* write SshInstance to disk
*/
writeToDisk(): void;
/**
* read ab SshInstance from disk
*/
readFromDisk(): void;
private _makeConfig();
/**
* method to invoke SshInstance _sync automatically when sshSync is true
*/
private _syncAuto(directionArg);
/**
* private method to sync SshInstance
*/
private _sync(directionArg);
} }

File diff suppressed because one or more lines are too long

View File

@ -1,18 +1,21 @@
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;
constructor(optionsArg?: { constructor(optionsArg?: {
private?: string; private?: string;
public?: string; public?: string;
host?: string; host?: string;
authorized?: boolean;
}); });
host: string; host: string;
privateKey: string; privKey: string;
privateKeyBase64: any; privKeyBase64: string;
publicKey: string; pubKey: string;
publicKeyBase64: any; pubKeyBase64: string;
type: string; type: any;
read(filePathArg: any): void;
store(filePathArg?: string): void; store(filePathArg?: string): void;
} }

File diff suppressed because one or more lines are too long

View File

@ -1,7 +1,9 @@
import "typings-global"; import "typings-global";
export declare let beautylog: any; export import beautylog = require("beautylog");
export declare let base64: any; export declare let base64: any;
export declare let fs: any; export declare let fs: any;
export declare let path: any; export declare let minimatch: any;
export declare let smartfile: any; export import path = require("path");
export declare let q: any;
export import smartfile = require("smartfile");
export import smartpath = require("smartpath"); export import smartpath = require("smartpath");

View File

@ -3,8 +3,10 @@ require("typings-global");
exports.beautylog = require("beautylog"); exports.beautylog = require("beautylog");
exports.base64 = require("js-base64").Base64; exports.base64 = require("js-base64").Base64;
exports.fs = require("fs-extra"); exports.fs = require("fs-extra");
exports.minimatch = require("minimatch");
exports.path = require("path"); exports.path = require("path");
exports.q = require("q");
exports.smartfile = require("smartfile"); exports.smartfile = require("smartfile");
exports.smartpath = require("smartpath"); exports.smartpath = require("smartpath");
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNtYXJ0c3NoLnBsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sZ0JBQ1AsQ0FBQyxDQURzQjtBQUNaLGlCQUFTLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ2pDLGNBQU0sR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ3JDLFVBQUUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDekIsWUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN2QixpQkFBUyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUM5QixpQkFBUyxXQUFXLFdBQVcsQ0FBQyxDQUFDIiwiZmlsZSI6InNtYXJ0c3NoLnBsdWdpbnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXCJ0eXBpbmdzLWdsb2JhbFwiXHJcbmV4cG9ydCBsZXQgYmVhdXR5bG9nID0gcmVxdWlyZShcImJlYXV0eWxvZ1wiKTtcclxuZXhwb3J0IGxldCBiYXNlNjQgPSByZXF1aXJlKFwianMtYmFzZTY0XCIpLkJhc2U2NDtcclxuZXhwb3J0IGxldCBmcyA9IHJlcXVpcmUoXCJmcy1leHRyYVwiKTtcclxuZXhwb3J0IGxldCBwYXRoID0gcmVxdWlyZShcInBhdGhcIik7XHJcbmV4cG9ydCBsZXQgc21hcnRmaWxlID0gcmVxdWlyZShcInNtYXJ0ZmlsZVwiKTtcclxuZXhwb3J0IGltcG9ydCBzbWFydHBhdGggPSByZXF1aXJlKFwic21hcnRwYXRoXCIpOyJdfQ== //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNtYXJ0c3NoLnBsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sZ0JBQ1AsQ0FBQyxDQURzQjtBQUNULGlCQUFTLFdBQVcsV0FBVyxDQUFDLENBQUM7QUFDcEMsY0FBTSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDckMsVUFBRSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN6QixpQkFBUyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUM5QixZQUFJLFdBQVcsTUFBTSxDQUFDLENBQUM7QUFDMUIsU0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLGlCQUFTLFdBQVcsV0FBVyxDQUFDLENBQUM7QUFDakMsaUJBQVMsV0FBVyxXQUFXLENBQUMsQ0FBQyIsImZpbGUiOiJzbWFydHNzaC5wbHVnaW5zLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFwidHlwaW5ncy1nbG9iYWxcIlxuZXhwb3J0IGltcG9ydCBiZWF1dHlsb2cgPSByZXF1aXJlKFwiYmVhdXR5bG9nXCIpO1xuZXhwb3J0IGxldCBiYXNlNjQgPSByZXF1aXJlKFwianMtYmFzZTY0XCIpLkJhc2U2NDtcbmV4cG9ydCBsZXQgZnMgPSByZXF1aXJlKFwiZnMtZXh0cmFcIik7XG5leHBvcnQgbGV0IG1pbmltYXRjaCA9IHJlcXVpcmUoXCJtaW5pbWF0Y2hcIik7XG5leHBvcnQgaW1wb3J0IHBhdGggPSByZXF1aXJlKFwicGF0aFwiKTtcbmV4cG9ydCBsZXQgcSA9IHJlcXVpcmUoXCJxXCIpO1xuZXhwb3J0IGltcG9ydCBzbWFydGZpbGUgPSByZXF1aXJlKFwic21hcnRmaWxlXCIpO1xuZXhwb3J0IGltcG9ydCBzbWFydHBhdGggPSByZXF1aXJlKFwic21hcnRwYXRoXCIpOyJdfQ==

View File

@ -1,4 +1,3 @@
{ {
"mode":"default", "mode":"default"
"coverageTreshold":50
} }

View File

@ -1,14 +1,15 @@
{ {
"name": "smartssh", "name": "smartssh",
"version": "1.0.3", "version": "1.1.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",
"scripts": { "scripts": {
"test": "(npmts)" "test": "(npmts)"
}, },
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+https://github.com/pushrocks/smartssh.git" "url": "git+https://gitlab.com/pushrocks/smartssh.git"
}, },
"keywords": [ "keywords": [
"SSH", "SSH",
@ -18,20 +19,22 @@
"author": "Lossless GmbH", "author": "Lossless GmbH",
"license": "MIT", "license": "MIT",
"bugs": { "bugs": {
"url": "https://github.com/pushrocks/smartssh/issues" "url": "https://gitlab.com/pushrocks/smartssh/issues"
}, },
"homepage": "https://github.com/pushrocks/smartssh#readme", "homepage": "https://gitlab.com/pushrocks/smartssh#readme",
"dependencies": { "dependencies": {
"beautylog": "^5.0.8", "beautylog": "^5.0.12",
"fs-extra": "^0.30.0", "fs-extra": "^0.30.0",
"js-base64": "^2.1.9", "js-base64": "^2.1.9",
"smartfile": "^3.0.10", "minimatch": "^3.0.2",
"q": "^1.4.1",
"smartfile": "^4.0.5",
"smartpath": "^3.2.2", "smartpath": "^3.2.2",
"typings-global": "^1.0.3", "typings-global": "^1.0.3",
"typings-test": "^1.0.1" "typings-test": "^1.0.1"
}, },
"devDependencies": { "devDependencies": {
"npmts": "^5.1.19", "npmts-g": "^5.2.6",
"should": "^9.0.0" "should": "^9.0.2"
} }
} }

File diff suppressed because one or more lines are too long

View File

@ -4,12 +4,34 @@ import smartssh = require("../dist/index");
describe("smartssh",function(){ describe("smartssh",function(){
let testSshInstance:smartssh.SshInstance; let testSshInstance:smartssh.SshInstance;
let testSshKey:smartssh.SshKey; let testSshKey:smartssh.SshKey;
describe("SshInstance",function(){ describe(".SshKey",function(){
it("should create a new SshInstance object from class",function(){ it("'new' keyword should create a valid SshKey object",function(){
testSshKey = new smartssh.SshKey({
host:"example.com",
private:"someExamplePrivateKey",
public:"someExamplePublicKey"
});
testSshKey.should.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;
})
});
describe(".SshInstance",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); testSshInstance.should.be.instanceof(smartssh.SshInstance);
}); });
it("should accept a new SshKey object",function(){ it(".addKey() should accept a new SshKey object",function(){
testSshInstance.addKey(new smartssh.SshKey({ testSshInstance.addKey(new smartssh.SshKey({
public:"somePublicKey", public:"somePublicKey",
private:"somePrivateKey", private:"somePrivateKey",
@ -21,13 +43,24 @@ describe("smartssh",function(){
host:"bitbucket.org" host:"bitbucket.org"
})); }));
testSshInstance.addKey(new smartssh.SshKey({ testSshInstance.addKey(new smartssh.SshKey({
public:"somePublicKey", public:"someGitHubPublicKey",
private:"somePrivateKey", private:"someGitHubPrivateKey",
host:"github.com" host:"github.com"
})); }));
}); });
it("should return an array of sshKeys",function(){ it(".sshKeys should point to an array of sshKeys",function(){
testSshInstance.getKeys(); 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(){
testSshInstance.removeKey(testSshInstance.getKey("bitbucket.org"));
testSshInstance.sshKeys[1].host.should.equal("github.com");
})
});
}) })

View File

@ -6,7 +6,3 @@ export let sshKeyArrayFromDir = function(dirArg:string):SshKey[]{
let sshKeyArray = []; //TODO let sshKeyArray = []; //TODO
return sshKeyArray; return sshKeyArray;
} }
export let getKeyIndex = function(hostArg:string){
return 0; //TODO
}

View File

@ -1,8 +1,32 @@
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 SshConfig { import {SshKey} from "./smartssh.classes.sshkey"
constructor(){
export class SshConfig {
sshKeyArray:SshKey[];
constructor(sshKeyArrayArg:SshKey[]){
this.sshKeyArray = sshKeyArrayArg;
} }
/**
* stores a config file
*/
storeConfig(dirPathArg:string){
let done = plugins.q.defer();
let configArray:configObject[];
return done.promise;
}
};
let createConfigPath = () => {
} }
export interface configObject {
host:string;
authorized:boolean;
sshKey:SshKey;
};

View File

@ -6,19 +6,22 @@ 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 path:string; // the path of the ssh directory
constructor(sshDirPathArg:string){ private sshKeyArray:SshKey[];
let sshDirPath:string; constructor(sshKeyArray:SshKey[],sshDirPathArg?:string){
this.sshKeyArray = sshKeyArray;
if(sshDirPathArg){ if(sshDirPathArg){
sshDirPath = sshDirPathArg; this.path = sshDirPathArg;
} else { } else {
sshDirPath = plugins.smartpath.get.home(); this.path = plugins.path.join(plugins.smartpath.get.home(),".ssh/");
} };
this.path = sshDirPath;
} }
syncToDir(sshInstanceArg:SshInstance){ //syncs writeToDir(){ // syncs sshInstance to directory
this.sshKeyArray.forEach((sshKeyArg) => {
sshKeyArg.store(this.path);
});
}; };
syncFromDir(){ readFromDir(){ // syncs sshInstance from directory
} }
getKeys(){ getKeys(){

View File

@ -7,22 +7,43 @@ 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 sshConfig:SshConfig; // sshConfig (e.g. represents ~/.ssh/config) private _sshKeyArray:SshKey[]; //holds all ssh keys
private sshDir:SshDir; // points to sshDir class instance. private _sshConfig:SshConfig; // sshConfig (e.g. represents ~/.ssh/config)
private sshKeys:SshKey[]; //holds all ssh keys 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:{sshDir?:string,sshSync?:boolean}={}){ constructor(optionsArg:{sshDirPath?:string,sshSync?:boolean}={}){
optionsArg ? void(0) : optionsArg = {}; optionsArg ? void(0) : optionsArg = {};
this.sshDir = new SshDir(optionsArg.sshDir); this._sshKeyArray = [];
this.sshKeys = this.sshDir.getKeys(); this._sshConfig = new SshConfig(this._sshKeyArray);
this.sshSync = optionsArg.sshSync; this._sshDir = new SshDir(this._sshKeyArray,optionsArg.sshDirPath);
this._sshSync = optionsArg.sshSync;
}; };
//altering methods
addKey(sshKeyArg:SshKey){ addKey(sshKeyArg:SshKey){
this.sshKeys.push(sshKeyArg); this._syncAuto("from");
this.sync(); this._sshKeyArray.push(sshKeyArg);
this._syncAuto("to");
}; };
getKey(hostArg:string){ removeKey(sshKeyArg:SshKey){
let filteredArray = this.sshKeys.filter(function(keyArg){ this._syncAuto("from");
let filteredArray = this._sshKeyArray.filter((sshKeyArg2:SshKey) => {
return (sshKeyArg != sshKeyArg2);
});
this._sshKeyArray = filteredArray;
this._syncAuto("to");
};
replaceKey(sshKeyOldArg:SshKey,sshKeyNewArg:SshKey){
this._syncAuto("from");
this.removeKey(sshKeyOldArg);
this.addKey(sshKeyNewArg);
this._syncAuto("to");
};
//
getKey(hostArg:string):SshKey{
this._syncAuto("from");
let filteredArray = this._sshKeyArray.filter(function(keyArg){
return (keyArg.host == hostArg); return (keyArg.host == hostArg);
}); });
if(filteredArray.length > 0){ if(filteredArray.length > 0){
@ -31,24 +52,52 @@ export class SshInstance {
return undefined; return undefined;
} }
}; };
get sshKeys():SshKey[] {
this._syncAuto("from");
return this._sshKeyArray;
};
getKeys(){ //FS methods
return this.sshKeys;
/**
* write SshInstance to disk
*/
writeToDisk(){
this._sync("to");
} }
removeKey(sshKeyArg:SshKey){ /**
let keyIndex = helpers.getKeyIndex(sshKeyArg.host); * read ab SshInstance from disk
this.sshKeys.splice(keyIndex,1); */
this.sync(); readFromDisk(){
}; this._sync("from");
replaceKey(sshKeyOldArg:SshKey,sshKeyNewArg:SshKey){ }
let keyIndex = helpers.getKeyIndex(sshKeyOldArg.host);
this.sshKeys.splice(keyIndex,1,sshKeyNewArg); /* ===============================================================
this.sync(); ========================= Private Methods ========================
}; ================================================================*/
sync(){
if(this.sshSync){ private _makeConfig (){
this.sshDir.sync(this.sshConfig,this.sshKeys); // call sync method of sshDir class;
}
/**
* method to invoke SshInstance _sync automatically when sshSync is true
*/
private _syncAuto(directionArg){
if(this._sshSync) this._sync(directionArg);
}
/**
* private method to sync SshInstance
*/
private _sync(directionArg:string){
if(directionArg == "from"){
this._sshDir.readFromDir(); // call sync method of sshDir class;
} else if(directionArg == "to") {
this._sshDir.writeToDir();
} else {
throw new Error("directionArg not recognised. Must be 'to' or 'from'");
} }
}; };
} }

View File

@ -3,63 +3,87 @@ 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;
constructor(optionsArg:{private?:string,public?:string,host?:string}={}){ private _authorized:boolean;
this.privKey = optionsArg.private; constructor(optionsArg:{private?:string,public?:string,host?:string,authorized?:boolean}={}){
this.pubKey = optionsArg.public; this._privKey = optionsArg.private;
this.hostVar = optionsArg.host; this._pubKey = optionsArg.public;
this._hostVar = optionsArg.host;
this._authorized = optionsArg.authorized;
}; };
// getters // this.host
get host(){ get host(){
return this.hostVar; return this._hostVar;
}; };
get privateKey(){ set host(hostArg:string){
return this.privKey; this._hostVar = hostArg;
}; };
get privateKeyBase64(){
return plugins.base64.encode(this.privKey); // this.privKey
get privKey(){
return this._privKey;
};
set privKey(privateKeyArg:string){
this._privKey = privateKeyArg;
};
// this.privKeyBase64
get privKeyBase64(){
return plugins.base64.encode(this._privKey);
} }
get publicKey(){ set privKeyBase64(privateKeyArg:string) {
return this.publicKey; this._privKey = plugins.base64.decode(privateKeyArg);
} }
get publicKeyBase64(){
return plugins.base64.encode(this.pubKey); // this.pubKey
get pubKey(){
return this._pubKey;
} }
set pubKey(publicKeyArg:string){
this._pubKey = publicKeyArg;
};
// this.pubKeyBase64
get pubKeyBase64(){
return plugins.base64.encode(this._pubKey);
}
set pubKeyBase64(publicKeyArg:string) {
this._pubKey = plugins.base64.decode(publicKeyArg);
}
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){
console.log("the type of an SshKey connot be set. This value is autpcomputed.")
}
// setters // methods
set host(hostArg:string){ read(filePathArg){
this.hostVar = hostArg;
};
set privateKey(privateKeyArg:string){
this.privKey = privateKeyArg;
};
// setters
set publicKey(publicKeyArg:string){
this.pubKey = publicKeyArg;
};
}
store(filePathArg?:string){ store(filePathArg?:string){
let filePathObj = plugins.path.parse(filePathArg); let filePathObj = plugins.path.parse(filePathArg);
if(filePathObj.ext = ".priv"){ if(filePathObj.ext = ".priv"){
plugins.smartfile.memory.toFsSync(this.privKey,{fileName:filePathObj.name + filePathObj.ext,filePath:filePathObj.dir}); plugins.smartfile.memory.toFsSync(this._privKey,filePathArg);
} else if (filePathObj.ext = ".pub"){ } else if (filePathObj.ext = ".pub"){
plugins.smartfile.memory.toFsSync(this.pubKey,{fileName:filePathObj.name + filePathObj.ext,filePath:filePathObj.dir}); plugins.smartfile.memory.toFsSync(this._pubKey,filePathArg);
} else { //we assume we are given a directory as filePathArg, so we store the whole key } else { //we assume we are given a directory as filePathArg, so we store the whole key
plugins.fs.ensureDirSync(filePathObj.dir); plugins.fs.ensureDirSync(filePathObj.dir);
this.store(plugins.path.join(filePathObj.dir,"key.priv")); // call this function recursivly this.store(plugins.path.join(filePathObj.dir,"key.priv")); // call this function recursivly
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
} }
} }
} }
let testKey = new SshKey();

View File

@ -1,7 +1,9 @@
import "typings-global" import "typings-global"
export let beautylog = require("beautylog"); export import beautylog = require("beautylog");
export let base64 = require("js-base64").Base64; export let base64 = require("js-base64").Base64;
export let fs = require("fs-extra"); export let fs = require("fs-extra");
export let path = require("path"); export let minimatch = require("minimatch");
export let smartfile = require("smartfile"); export import path = require("path");
export let q = require("q");
export import smartfile = require("smartfile");
export import smartpath = require("smartpath"); export import smartpath = require("smartpath");