mirror of
https://github.com/node-red/node-red.git
synced 2023-10-10 13:36:53 +02:00
Rearrange ssh logic to bring it together
This commit is contained in:
parent
f7f795f58a
commit
d93a92c1c8
@ -41,7 +41,7 @@ module.exports = {
|
|||||||
// List all SSH keys
|
// List all SSH keys
|
||||||
app.get("/", needsPermission("settings.read"), function(req,res) {
|
app.get("/", needsPermission("settings.read"), function(req,res) {
|
||||||
var username = getUsername(req.user);
|
var username = getUsername(req.user);
|
||||||
runtime.storage.sshkeys.listSSHKeys(username)
|
runtime.storage.projects.ssh.listSSHKeys(username)
|
||||||
.then(function(list) {
|
.then(function(list) {
|
||||||
res.json({
|
res.json({
|
||||||
keys: list
|
keys: list
|
||||||
@ -61,7 +61,7 @@ module.exports = {
|
|||||||
app.get("/:id", needsPermission("settings.read"), function(req,res) {
|
app.get("/:id", needsPermission("settings.read"), function(req,res) {
|
||||||
var username = getUsername(req.user);
|
var username = getUsername(req.user);
|
||||||
// console.log('username:', username);
|
// console.log('username:', username);
|
||||||
runtime.storage.sshkeys.getSSHKey(username, req.params.id)
|
runtime.storage.projects.ssh.getSSHKey(username, req.params.id)
|
||||||
.then(function(data) {
|
.then(function(data) {
|
||||||
if (data) {
|
if (data) {
|
||||||
res.json({
|
res.json({
|
||||||
@ -85,7 +85,7 @@ module.exports = {
|
|||||||
var username = getUsername(req.user);
|
var username = getUsername(req.user);
|
||||||
// console.log('req.body:', req.body);
|
// console.log('req.body:', req.body);
|
||||||
if ( req.body && req.body.name && /^[a-zA-Z0-9\-_]+$/.test(req.body.name)) {
|
if ( req.body && req.body.name && /^[a-zA-Z0-9\-_]+$/.test(req.body.name)) {
|
||||||
runtime.storage.sshkeys.generateSSHKey(username, req.body)
|
runtime.storage.projects.ssh.generateSSHKey(username, req.body)
|
||||||
.then(function(name) {
|
.then(function(name) {
|
||||||
// console.log('generate key --- success name:', name);
|
// console.log('generate key --- success name:', name);
|
||||||
res.json({
|
res.json({
|
||||||
@ -108,7 +108,7 @@ module.exports = {
|
|||||||
// Delete a SSH key
|
// Delete a SSH key
|
||||||
app.delete("/:id", needsPermission("settings.write"), function(req,res) {
|
app.delete("/:id", needsPermission("settings.write"), function(req,res) {
|
||||||
var username = getUsername(req.user);
|
var username = getUsername(req.user);
|
||||||
runtime.storage.sshkeys.deleteSSHKey(username, req.params.id)
|
runtime.storage.projects.ssh.deleteSSHKey(username, req.params.id)
|
||||||
.then(function() {
|
.then(function() {
|
||||||
res.status(204).end();
|
res.status(204).end();
|
||||||
})
|
})
|
||||||
|
@ -24,7 +24,6 @@ var library = require("./library");
|
|||||||
var sessions = require("./sessions");
|
var sessions = require("./sessions");
|
||||||
var runtimeSettings = require("./settings");
|
var runtimeSettings = require("./settings");
|
||||||
var projects = require("./projects");
|
var projects = require("./projects");
|
||||||
var sshkeys = require("./sshkeys");
|
|
||||||
|
|
||||||
var initialFlowLoadComplete = false;
|
var initialFlowLoadComplete = false;
|
||||||
var settings;
|
var settings;
|
||||||
@ -61,7 +60,6 @@ var localfilesystem = {
|
|||||||
runtimeSettings.init(settings);
|
runtimeSettings.init(settings);
|
||||||
promises.push(library.init(settings));
|
promises.push(library.init(settings));
|
||||||
promises.push(projects.init(settings, runtime));
|
promises.push(projects.init(settings, runtime));
|
||||||
promises.push(sshkeys.init(settings, runtime));
|
|
||||||
|
|
||||||
var packageFile = fspath.join(settings.userDir,"package.json");
|
var packageFile = fspath.join(settings.userDir,"package.json");
|
||||||
var packagePromise = when.resolve();
|
var packagePromise = when.resolve();
|
||||||
@ -96,8 +94,7 @@ var localfilesystem = {
|
|||||||
saveSessions: sessions.saveSessions,
|
saveSessions: sessions.saveSessions,
|
||||||
getLibraryEntry: library.getLibraryEntry,
|
getLibraryEntry: library.getLibraryEntry,
|
||||||
saveLibraryEntry: library.saveLibraryEntry,
|
saveLibraryEntry: library.saveLibraryEntry,
|
||||||
projects: projects,
|
projects: projects
|
||||||
sshkeys: sshkeys
|
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = localfilesystem;
|
module.exports = localfilesystem;
|
||||||
|
@ -23,7 +23,7 @@ var os = require('os');
|
|||||||
var gitTools = require("./git");
|
var gitTools = require("./git");
|
||||||
var util = require("../util");
|
var util = require("../util");
|
||||||
var defaultFileSet = require("./defaultFileSet");
|
var defaultFileSet = require("./defaultFileSet");
|
||||||
var sshKeys = require("../sshkeys");
|
var sshKeys = require("./ssh");
|
||||||
var settings;
|
var settings;
|
||||||
var runtime;
|
var runtime;
|
||||||
var log;
|
var log;
|
||||||
|
@ -23,7 +23,7 @@ var crypto = require('crypto');
|
|||||||
var storageSettings = require("../settings");
|
var storageSettings = require("../settings");
|
||||||
var util = require("../util");
|
var util = require("../util");
|
||||||
var gitTools = require("./git");
|
var gitTools = require("./git");
|
||||||
var sshTools = require("./sshKeygen");
|
var sshTools = require("./ssh");
|
||||||
|
|
||||||
var Projects = require("./Project");
|
var Projects = require("./Project");
|
||||||
|
|
||||||
@ -85,45 +85,47 @@ function init(_settings, _runtime) {
|
|||||||
var setupProjectsPromise;
|
var setupProjectsPromise;
|
||||||
|
|
||||||
if (projectsEnabled) {
|
if (projectsEnabled) {
|
||||||
return gitTools.init(_settings, _runtime).then(function(gitVersion) {
|
return sshTools.init(settings,runtime).then(function() {
|
||||||
if (!gitVersion) {
|
gitTools.init(_settings, _runtime).then(function(gitVersion) {
|
||||||
projectLogMessages.push(log._("storage.localfilesystem.projects.git-not-found"))
|
if (!gitVersion) {
|
||||||
projectsEnabled = false;
|
projectLogMessages.push(log._("storage.localfilesystem.projects.git-not-found"))
|
||||||
} else {
|
projectsEnabled = false;
|
||||||
Projects.init(settings,runtime);
|
} else {
|
||||||
sshTools.init(settings,runtime);
|
Projects.init(settings,runtime);
|
||||||
projectsDir = fspath.join(settings.userDir,"projects");
|
sshTools.init(settings,runtime);
|
||||||
if (!settings.readOnly) {
|
projectsDir = fspath.join(settings.userDir,"projects");
|
||||||
return fs.ensureDir(projectsDir)
|
if (!settings.readOnly) {
|
||||||
//TODO: this is accessing settings from storage directly as settings
|
return fs.ensureDir(projectsDir)
|
||||||
// has not yet been initialised. That isn't ideal - can this be deferred?
|
//TODO: this is accessing settings from storage directly as settings
|
||||||
.then(storageSettings.getSettings)
|
// has not yet been initialised. That isn't ideal - can this be deferred?
|
||||||
.then(function(globalSettings) {
|
.then(storageSettings.getSettings)
|
||||||
var saveSettings = false;
|
.then(function(globalSettings) {
|
||||||
if (!globalSettings.projects) {
|
var saveSettings = false;
|
||||||
globalSettings.projects = {
|
if (!globalSettings.projects) {
|
||||||
projects: {}
|
globalSettings.projects = {
|
||||||
}
|
projects: {}
|
||||||
saveSettings = true;
|
}
|
||||||
} else {
|
|
||||||
activeProject = globalSettings.projects.activeProject;
|
|
||||||
}
|
|
||||||
if (settings.flowFile) {
|
|
||||||
if (globalSettings.projects.projects.hasOwnProperty(settings.flowFile)) {
|
|
||||||
activeProject = settings.flowFile;
|
|
||||||
globalSettings.projects.activeProject = settings.flowFile;
|
|
||||||
saveSettings = true;
|
saveSettings = true;
|
||||||
|
} else {
|
||||||
|
activeProject = globalSettings.projects.activeProject;
|
||||||
}
|
}
|
||||||
}
|
if (settings.flowFile) {
|
||||||
if (!activeProject) {
|
if (globalSettings.projects.projects.hasOwnProperty(settings.flowFile)) {
|
||||||
projectLogMessages.push(log._("storage.localfilesystem.no-active-project"))
|
activeProject = settings.flowFile;
|
||||||
}
|
globalSettings.projects.activeProject = settings.flowFile;
|
||||||
if (saveSettings) {
|
saveSettings = true;
|
||||||
return storageSettings.saveSettings(globalSettings);
|
}
|
||||||
}
|
}
|
||||||
});
|
if (!activeProject) {
|
||||||
|
projectLogMessages.push(log._("storage.localfilesystem.no-active-project"))
|
||||||
|
}
|
||||||
|
if (saveSettings) {
|
||||||
|
return storageSettings.saveSettings(globalSettings);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return Promise.resolve();
|
return Promise.resolve();
|
||||||
@ -552,6 +554,8 @@ module.exports = {
|
|||||||
getFlows: getFlows,
|
getFlows: getFlows,
|
||||||
saveFlows: saveFlows,
|
saveFlows: saveFlows,
|
||||||
getCredentials: getCredentials,
|
getCredentials: getCredentials,
|
||||||
saveCredentials: saveCredentials
|
saveCredentials: saveCredentials,
|
||||||
|
|
||||||
|
ssh: sshTools
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
var fs = require('fs-extra');
|
var fs = require('fs-extra');
|
||||||
var when = require('when');
|
var when = require('when');
|
||||||
var fspath = require("path");
|
var fspath = require("path");
|
||||||
var sshTools = require("./projects/ssh");
|
var keygen = require("./keygen");
|
||||||
|
|
||||||
var settings;
|
var settings;
|
||||||
var runtime;
|
var runtime;
|
||||||
@ -32,10 +32,6 @@ function init(_settings, _runtime) {
|
|||||||
sshkeyDir = fspath.join(settings.userDir, "projects", ".sshkeys");
|
sshkeyDir = fspath.join(settings.userDir, "projects", ".sshkeys");
|
||||||
userSSHKeyDir = fspath.join(process.env.HOME || process.env.USERPROFILE || process.env.HOMEPATH, ".ssh");
|
userSSHKeyDir = fspath.join(process.env.HOME || process.env.USERPROFILE || process.env.HOMEPATH, ".ssh");
|
||||||
// console.log('sshkeys.init()');
|
// console.log('sshkeys.init()');
|
||||||
return createSSHKeyDirectory();
|
|
||||||
}
|
|
||||||
|
|
||||||
function createSSHKeyDirectory() {
|
|
||||||
return fs.ensureDir(sshkeyDir);
|
return fs.ensureDir(sshkeyDir);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -176,7 +172,7 @@ function deleteSSHKeyFiles(username, name) {
|
|||||||
|
|
||||||
function generateSSHKeyPair(name, privateKeyPath, comment, password, size) {
|
function generateSSHKeyPair(name, privateKeyPath, comment, password, size) {
|
||||||
log.trace("ssh-keygen["+[name,privateKeyPath,comment,size,"hasPassword?"+!!password].join(",")+"]");
|
log.trace("ssh-keygen["+[name,privateKeyPath,comment,size,"hasPassword?"+!!password].join(",")+"]");
|
||||||
return sshTools.generateKey({location: privateKeyPath, comment: comment, password: password, size: size})
|
return keygen.generateKey({location: privateKeyPath, comment: comment, password: password, size: size})
|
||||||
.then(function(stdout) {
|
.then(function(stdout) {
|
||||||
return name;
|
return name;
|
||||||
})
|
})
|
@ -56,12 +56,14 @@ describe("api/editor/sshkeys", function() {
|
|||||||
log:{audit:function(){},error:function(msg){errors.push(msg)}}
|
log:{audit:function(){},error:function(msg){errors.push(msg)}}
|
||||||
},
|
},
|
||||||
storage: {
|
storage: {
|
||||||
sshkeys: {
|
projects: {
|
||||||
init: function(){},
|
ssh: {
|
||||||
listSSHKeys: function(){},
|
init: function(){},
|
||||||
getSSHKey: function(){},
|
listSSHKeys: function(){},
|
||||||
generateSSHKey: function(){},
|
getSSHKey: function(){},
|
||||||
deleteSSHKey: function(){},
|
generateSSHKey: function(){},
|
||||||
|
deleteSSHKey: function(){}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
events:{on:function(){},removeListener:function(){}},
|
events:{on:function(){},removeListener:function(){}},
|
||||||
@ -79,20 +81,20 @@ describe("api/editor/sshkeys", function() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
beforeEach(function() {
|
beforeEach(function() {
|
||||||
sinon.stub(mockRuntime.storage.sshkeys, "listSSHKeys");
|
sinon.stub(mockRuntime.storage.projects.ssh, "listSSHKeys");
|
||||||
sinon.stub(mockRuntime.storage.sshkeys, "getSSHKey");
|
sinon.stub(mockRuntime.storage.projects.ssh, "getSSHKey");
|
||||||
sinon.stub(mockRuntime.storage.sshkeys, "generateSSHKey");
|
sinon.stub(mockRuntime.storage.projects.ssh, "generateSSHKey");
|
||||||
sinon.stub(mockRuntime.storage.sshkeys, "deleteSSHKey");
|
sinon.stub(mockRuntime.storage.projects.ssh, "deleteSSHKey");
|
||||||
})
|
})
|
||||||
afterEach(function() {
|
afterEach(function() {
|
||||||
mockRuntime.storage.sshkeys.listSSHKeys.restore();
|
mockRuntime.storage.projects.ssh.listSSHKeys.restore();
|
||||||
mockRuntime.storage.sshkeys.getSSHKey.restore();
|
mockRuntime.storage.projects.ssh.getSSHKey.restore();
|
||||||
mockRuntime.storage.sshkeys.generateSSHKey.restore();
|
mockRuntime.storage.projects.ssh.generateSSHKey.restore();
|
||||||
mockRuntime.storage.sshkeys.deleteSSHKey.restore();
|
mockRuntime.storage.projects.ssh.deleteSSHKey.restore();
|
||||||
})
|
})
|
||||||
|
|
||||||
it('GET /settings/user/keys --- return empty list', function(done) {
|
it('GET /settings/user/keys --- return empty list', function(done) {
|
||||||
mockRuntime.storage.sshkeys.listSSHKeys.returns(Promise.resolve([]));
|
mockRuntime.storage.projects.ssh.listSSHKeys.returns(Promise.resolve([]));
|
||||||
request(app)
|
request(app)
|
||||||
.get("/settings/user/keys")
|
.get("/settings/user/keys")
|
||||||
.expect(200)
|
.expect(200)
|
||||||
@ -116,7 +118,7 @@ describe("api/editor/sshkeys", function() {
|
|||||||
name: elem
|
name: elem
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
mockRuntime.storage.sshkeys.listSSHKeys.returns(Promise.resolve(retList));
|
mockRuntime.storage.projects.ssh.listSSHKeys.returns(Promise.resolve(retList));
|
||||||
request(app)
|
request(app)
|
||||||
.get("/settings/user/keys")
|
.get("/settings/user/keys")
|
||||||
.expect(200)
|
.expect(200)
|
||||||
@ -135,7 +137,7 @@ describe("api/editor/sshkeys", function() {
|
|||||||
it('GET /settings/user/keys --- return Error', function(done) {
|
it('GET /settings/user/keys --- return Error', function(done) {
|
||||||
var errInstance = new Error("Messages.....");
|
var errInstance = new Error("Messages.....");
|
||||||
errInstance.code = "test_code";
|
errInstance.code = "test_code";
|
||||||
mockRuntime.storage.sshkeys.listSSHKeys.returns(Promise.reject(errInstance));
|
mockRuntime.storage.projects.ssh.listSSHKeys.returns(Promise.reject(errInstance));
|
||||||
request(app)
|
request(app)
|
||||||
.get("/settings/user/keys")
|
.get("/settings/user/keys")
|
||||||
.expect(400)
|
.expect(400)
|
||||||
@ -152,7 +154,7 @@ describe("api/editor/sshkeys", function() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('GET /settings/user/keys/<key_file_name> --- return 404', function(done) {
|
it('GET /settings/user/keys/<key_file_name> --- return 404', function(done) {
|
||||||
mockRuntime.storage.sshkeys.getSSHKey.returns(Promise.resolve(null));
|
mockRuntime.storage.projects.ssh.getSSHKey.returns(Promise.resolve(null));
|
||||||
request(app)
|
request(app)
|
||||||
.get("/settings/user/keys/NOT_REAL")
|
.get("/settings/user/keys/NOT_REAL")
|
||||||
.expect(404)
|
.expect(404)
|
||||||
@ -165,7 +167,7 @@ describe("api/editor/sshkeys", function() {
|
|||||||
});
|
});
|
||||||
it('GET /settings/user/keys --- return Unexpected Error', function(done) {
|
it('GET /settings/user/keys --- return Unexpected Error', function(done) {
|
||||||
var errInstance = new Error("Messages.....");
|
var errInstance = new Error("Messages.....");
|
||||||
mockRuntime.storage.sshkeys.listSSHKeys.returns(Promise.reject(errInstance));
|
mockRuntime.storage.projects.ssh.listSSHKeys.returns(Promise.reject(errInstance));
|
||||||
request(app)
|
request(app)
|
||||||
.get("/settings/user/keys")
|
.get("/settings/user/keys")
|
||||||
.expect(400)
|
.expect(400)
|
||||||
@ -184,7 +186,7 @@ describe("api/editor/sshkeys", function() {
|
|||||||
it('GET /settings/user/keys/<key_file_name> --- return content', function(done) {
|
it('GET /settings/user/keys/<key_file_name> --- return content', function(done) {
|
||||||
var key_file_name = "test_key";
|
var key_file_name = "test_key";
|
||||||
var fileContent = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQD3a+sgtgzSbbliWxmOq5p6+H/mE+0gjWfLWrkIVmHENd1mifV4uCmIHAR2NfuadUYMQ3+bQ90kpmmEKTMYPsyentsKpHQZxTzG7wOCAIpJnbPTHDMxEJhVTaAwEjbVyMSIzTTPfnhoavWIBu0+uMgKDDlBm+RjlgkFlyhXyCN6UwFrIUUMH6Gw+eQHLiooKIl8ce7uDxIlt+9b7hFCU+sQ3kvuse239DZluu6+8buMWqJvrEHgzS9adRFKku8nSPAEPYn85vDi7OgVAcLQufknNgs47KHBAx9h04LeSrFJ/P5J1b//ItRpMOIme+O9d1BR46puzhvUaCHLdvO9czj+OmW+dIm+QIk6lZIOOMnppG72kZxtLfeKT16ur+2FbwAdL9ItBp4BI/YTlBPoa5mLMxpuWfmX1qHntvtGc9wEwS1P7YFfmF3XiK5apxalzrn0Qlr5UmDNbVIqJb1OlbC0w03Z0oktti1xT+R2DGOLWM4lBbpXDHV1BhQ7oYOvbUD8Cnof55lTP0WHHsOHlQc/BGDti1XA9aBX/OzVyzBUYEf0pkimsD0RYo6aqt7QwehJYdlz9x1NBguBffT0s4NhNb9IWr+ASnFPvNl2sw4XH/8U0J0q8ZkMpKkbLM1Zdp1Fv00GF0f5UNRokai6uM3w/ccantJ3WvZ6GtctqytWrw== \n";
|
var fileContent = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQD3a+sgtgzSbbliWxmOq5p6+H/mE+0gjWfLWrkIVmHENd1mifV4uCmIHAR2NfuadUYMQ3+bQ90kpmmEKTMYPsyentsKpHQZxTzG7wOCAIpJnbPTHDMxEJhVTaAwEjbVyMSIzTTPfnhoavWIBu0+uMgKDDlBm+RjlgkFlyhXyCN6UwFrIUUMH6Gw+eQHLiooKIl8ce7uDxIlt+9b7hFCU+sQ3kvuse239DZluu6+8buMWqJvrEHgzS9adRFKku8nSPAEPYn85vDi7OgVAcLQufknNgs47KHBAx9h04LeSrFJ/P5J1b//ItRpMOIme+O9d1BR46puzhvUaCHLdvO9czj+OmW+dIm+QIk6lZIOOMnppG72kZxtLfeKT16ur+2FbwAdL9ItBp4BI/YTlBPoa5mLMxpuWfmX1qHntvtGc9wEwS1P7YFfmF3XiK5apxalzrn0Qlr5UmDNbVIqJb1OlbC0w03Z0oktti1xT+R2DGOLWM4lBbpXDHV1BhQ7oYOvbUD8Cnof55lTP0WHHsOHlQc/BGDti1XA9aBX/OzVyzBUYEf0pkimsD0RYo6aqt7QwehJYdlz9x1NBguBffT0s4NhNb9IWr+ASnFPvNl2sw4XH/8U0J0q8ZkMpKkbLM1Zdp1Fv00GF0f5UNRokai6uM3w/ccantJ3WvZ6GtctqytWrw== \n";
|
||||||
mockRuntime.storage.sshkeys.getSSHKey.returns(Promise.resolve(fileContent));
|
mockRuntime.storage.projects.ssh.getSSHKey.returns(Promise.resolve(fileContent));
|
||||||
request(app)
|
request(app)
|
||||||
.get("/settings/user/keys/" + key_file_name)
|
.get("/settings/user/keys/" + key_file_name)
|
||||||
.expect(200)
|
.expect(200)
|
||||||
@ -192,7 +194,7 @@ describe("api/editor/sshkeys", function() {
|
|||||||
if (err) {
|
if (err) {
|
||||||
return done(err);
|
return done(err);
|
||||||
}
|
}
|
||||||
mockRuntime.storage.sshkeys.getSSHKey.called.should.be.true();
|
mockRuntime.storage.projects.ssh.getSSHKey.called.should.be.true();
|
||||||
res.body.should.be.deepEqual({ publickey: fileContent });
|
res.body.should.be.deepEqual({ publickey: fileContent });
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
@ -202,7 +204,7 @@ describe("api/editor/sshkeys", function() {
|
|||||||
var key_file_name = "test_key";
|
var key_file_name = "test_key";
|
||||||
var errInstance = new Error("Messages.....");
|
var errInstance = new Error("Messages.....");
|
||||||
errInstance.code = "test_code";
|
errInstance.code = "test_code";
|
||||||
mockRuntime.storage.sshkeys.getSSHKey.returns(Promise.reject(errInstance));
|
mockRuntime.storage.projects.ssh.getSSHKey.returns(Promise.reject(errInstance));
|
||||||
request(app)
|
request(app)
|
||||||
.get("/settings/user/keys/" + key_file_name)
|
.get("/settings/user/keys/" + key_file_name)
|
||||||
.expect(400)
|
.expect(400)
|
||||||
@ -221,7 +223,7 @@ describe("api/editor/sshkeys", function() {
|
|||||||
it('GET /settings/user/keys/<key_file_name> --- return Unexpected Error', function(done) {
|
it('GET /settings/user/keys/<key_file_name> --- return Unexpected Error', function(done) {
|
||||||
var key_file_name = "test_key";
|
var key_file_name = "test_key";
|
||||||
var errInstance = new Error("Messages.....");
|
var errInstance = new Error("Messages.....");
|
||||||
mockRuntime.storage.sshkeys.getSSHKey.returns(Promise.reject(errInstance));
|
mockRuntime.storage.projects.ssh.getSSHKey.returns(Promise.reject(errInstance));
|
||||||
request(app)
|
request(app)
|
||||||
.get("/settings/user/keys/" + key_file_name)
|
.get("/settings/user/keys/" + key_file_name)
|
||||||
.expect(400)
|
.expect(400)
|
||||||
@ -239,7 +241,7 @@ describe("api/editor/sshkeys", function() {
|
|||||||
|
|
||||||
it('POST /settings/user/keys --- success', function(done) {
|
it('POST /settings/user/keys --- success', function(done) {
|
||||||
var key_file_name = "test_key";
|
var key_file_name = "test_key";
|
||||||
mockRuntime.storage.sshkeys.generateSSHKey.returns(Promise.resolve(key_file_name));
|
mockRuntime.storage.projects.ssh.generateSSHKey.returns(Promise.resolve(key_file_name));
|
||||||
request(app)
|
request(app)
|
||||||
.post("/settings/user/keys")
|
.post("/settings/user/keys")
|
||||||
.send({ name: key_file_name })
|
.send({ name: key_file_name })
|
||||||
@ -254,7 +256,7 @@ describe("api/editor/sshkeys", function() {
|
|||||||
|
|
||||||
it('POST /settings/user/keys --- return parameter error', function(done) {
|
it('POST /settings/user/keys --- return parameter error', function(done) {
|
||||||
var key_file_name = "test_key";
|
var key_file_name = "test_key";
|
||||||
mockRuntime.storage.sshkeys.generateSSHKey.returns(Promise.resolve(key_file_name));
|
mockRuntime.storage.projects.ssh.generateSSHKey.returns(Promise.resolve(key_file_name));
|
||||||
request(app)
|
request(app)
|
||||||
.post("/settings/user/keys")
|
.post("/settings/user/keys")
|
||||||
.expect(400)
|
.expect(400)
|
||||||
@ -274,7 +276,7 @@ describe("api/editor/sshkeys", function() {
|
|||||||
var key_file_name = "test_key";
|
var key_file_name = "test_key";
|
||||||
var errInstance = new Error("Messages.....");
|
var errInstance = new Error("Messages.....");
|
||||||
errInstance.code = "test_code";
|
errInstance.code = "test_code";
|
||||||
mockRuntime.storage.sshkeys.generateSSHKey.returns(Promise.reject(errInstance));
|
mockRuntime.storage.projects.ssh.generateSSHKey.returns(Promise.reject(errInstance));
|
||||||
request(app)
|
request(app)
|
||||||
.post("/settings/user/keys")
|
.post("/settings/user/keys")
|
||||||
.send({ name: key_file_name })
|
.send({ name: key_file_name })
|
||||||
@ -294,7 +296,7 @@ describe("api/editor/sshkeys", function() {
|
|||||||
it('POST /settings/user/keys --- return Unexpected error', function(done) {
|
it('POST /settings/user/keys --- return Unexpected error', function(done) {
|
||||||
var key_file_name = "test_key";
|
var key_file_name = "test_key";
|
||||||
var errInstance = new Error("Messages.....");
|
var errInstance = new Error("Messages.....");
|
||||||
mockRuntime.storage.sshkeys.generateSSHKey.returns(Promise.reject(errInstance));
|
mockRuntime.storage.projects.ssh.generateSSHKey.returns(Promise.reject(errInstance));
|
||||||
request(app)
|
request(app)
|
||||||
.post("/settings/user/keys")
|
.post("/settings/user/keys")
|
||||||
.send({ name: key_file_name })
|
.send({ name: key_file_name })
|
||||||
@ -313,7 +315,7 @@ describe("api/editor/sshkeys", function() {
|
|||||||
|
|
||||||
it('DELETE /settings/user/keys/<key_file_name> --- success', function(done) {
|
it('DELETE /settings/user/keys/<key_file_name> --- success', function(done) {
|
||||||
var key_file_name = "test_key";
|
var key_file_name = "test_key";
|
||||||
mockRuntime.storage.sshkeys.deleteSSHKey.returns(Promise.resolve(true));
|
mockRuntime.storage.projects.ssh.deleteSSHKey.returns(Promise.resolve(true));
|
||||||
request(app)
|
request(app)
|
||||||
.delete("/settings/user/keys/" + key_file_name)
|
.delete("/settings/user/keys/" + key_file_name)
|
||||||
.expect(204)
|
.expect(204)
|
||||||
@ -330,7 +332,7 @@ describe("api/editor/sshkeys", function() {
|
|||||||
var key_file_name = "test_key";
|
var key_file_name = "test_key";
|
||||||
var errInstance = new Error("Messages.....");
|
var errInstance = new Error("Messages.....");
|
||||||
errInstance.code = "test_code";
|
errInstance.code = "test_code";
|
||||||
mockRuntime.storage.sshkeys.deleteSSHKey.returns(Promise.reject(errInstance));
|
mockRuntime.storage.projects.ssh.deleteSSHKey.returns(Promise.reject(errInstance));
|
||||||
request(app)
|
request(app)
|
||||||
.delete("/settings/user/keys/" + key_file_name)
|
.delete("/settings/user/keys/" + key_file_name)
|
||||||
.expect(400)
|
.expect(400)
|
||||||
@ -349,7 +351,7 @@ describe("api/editor/sshkeys", function() {
|
|||||||
it('DELETE /settings/user/keys/<key_file_name> --- return Unexpected Error', function(done) {
|
it('DELETE /settings/user/keys/<key_file_name> --- return Unexpected Error', function(done) {
|
||||||
var key_file_name = "test_key";
|
var key_file_name = "test_key";
|
||||||
var errInstance = new Error("Messages.....");
|
var errInstance = new Error("Messages.....");
|
||||||
mockRuntime.storage.sshkeys.deleteSSHKey.returns(Promise.reject(errInstance));
|
mockRuntime.storage.projects.ssh.deleteSSHKey.returns(Promise.reject(errInstance));
|
||||||
request(app)
|
request(app)
|
||||||
.delete("/settings/user/keys/" + key_file_name)
|
.delete("/settings/user/keys/" + key_file_name)
|
||||||
.expect(400)
|
.expect(400)
|
||||||
|
@ -292,13 +292,14 @@ describe('storage/localfilesystem', function() {
|
|||||||
it('should fsync the flows file',function(done) {
|
it('should fsync the flows file',function(done) {
|
||||||
var flowFile = 'test.json';
|
var flowFile = 'test.json';
|
||||||
var flowFilePath = path.join(userDir,flowFile);
|
var flowFilePath = path.join(userDir,flowFile);
|
||||||
localfilesystem.init({userDir:userDir, flowFile:flowFilePath}, mockRuntime).then(function() {
|
localfilesystem.init({editorTheme:{projects:{enabled:false}},userDir:userDir, flowFile:flowFilePath}, mockRuntime).then(function() {
|
||||||
sinon.spy(fs,"fsync");
|
sinon.spy(fs,"fsync");
|
||||||
localfilesystem.saveFlows(testFlow).then(function() {
|
localfilesystem.saveFlows(testFlow).then(function() {
|
||||||
fs.fsync.callCount.should.eql(1);
|
fs.fsync.callCount.should.eql(1);
|
||||||
fs.fsync.restore();
|
fs.fsync.restore();
|
||||||
done();
|
done();
|
||||||
}).otherwise(function(err) {
|
}).otherwise(function(err) {
|
||||||
|
fs.fsync.restore();
|
||||||
done(err);
|
done(err);
|
||||||
});
|
});
|
||||||
}).otherwise(function(err) {
|
}).otherwise(function(err) {
|
||||||
|
@ -0,0 +1,428 @@
|
|||||||
|
/**
|
||||||
|
* Copyright JS Foundation and other contributors, http://js.foundation
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
**/
|
||||||
|
var should = require("should");
|
||||||
|
var fs = require('fs-extra');
|
||||||
|
var path = require('path');
|
||||||
|
|
||||||
|
var sshkeys = require("../../../../../../../red/runtime/storage/localfilesystem/projects/ssh");
|
||||||
|
|
||||||
|
describe("storage/localfilesystem/sshkeys", function() {
|
||||||
|
var userDir = path.join(__dirname,".testSSHKeyUserHome");
|
||||||
|
var mockSettings = {
|
||||||
|
userDir: userDir
|
||||||
|
};
|
||||||
|
var mockRuntime = {
|
||||||
|
log:{
|
||||||
|
_:function() { return "placeholder message"},
|
||||||
|
info: function() { },
|
||||||
|
log: function() { },
|
||||||
|
trace: function() { }
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var oldHOME;
|
||||||
|
|
||||||
|
beforeEach(function(done) {
|
||||||
|
oldHOME = process.env.HOME;
|
||||||
|
process.env.HOME = "/tmp/doesnt/exist";
|
||||||
|
fs.remove(userDir,function(err) {
|
||||||
|
fs.mkdir(userDir,done);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
afterEach(function(done) {
|
||||||
|
process.env.HOME = oldHOME;
|
||||||
|
fs.remove(userDir,done);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create sshkey directory when sshkey initializes', function(done) {
|
||||||
|
var sshkeyDirPath = path.join(userDir, 'projects', '.sshkeys');
|
||||||
|
sshkeys.init(mockSettings, mockRuntime).then(function() {
|
||||||
|
var ret = fs.existsSync(sshkeyDirPath);
|
||||||
|
fs.existsSync(sshkeyDirPath).should.be.true();
|
||||||
|
done();
|
||||||
|
}).catch(function(err) {
|
||||||
|
done(err);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should get sshkey empty list if there is no sshkey file', function(done) {
|
||||||
|
var username = 'test';
|
||||||
|
sshkeys.init(mockSettings, mockRuntime).then(function() {
|
||||||
|
sshkeys.listSSHKeys(username).then(function(retObj) {
|
||||||
|
retObj.should.be.instanceOf(Array).and.have.lengthOf(0);
|
||||||
|
done();
|
||||||
|
}).catch(function(err) {
|
||||||
|
done(err);
|
||||||
|
});
|
||||||
|
}).catch(function(err) {
|
||||||
|
done(err);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should get sshkey list', function(done) {
|
||||||
|
var sshkeyDirPath = path.join(userDir, 'projects', '.sshkeys');
|
||||||
|
var username = 'test';
|
||||||
|
var filenameList = ['test-key01', 'test-key02'];
|
||||||
|
sshkeys.init(mockSettings, mockRuntime).then(function() {
|
||||||
|
for(var filename of filenameList) {
|
||||||
|
fs.writeFileSync(path.join(sshkeyDirPath,username+"_"+filename),"","utf8");
|
||||||
|
fs.writeFileSync(path.join(sshkeyDirPath,username+"_"+filename+".pub"),"","utf8");
|
||||||
|
}
|
||||||
|
sshkeys.listSSHKeys(username).then(function(retObj) {
|
||||||
|
retObj.should.be.instanceOf(Array).and.have.lengthOf(filenameList.length);
|
||||||
|
for(var filename of filenameList) {
|
||||||
|
retObj.should.containEql({ name: filename });
|
||||||
|
}
|
||||||
|
done();
|
||||||
|
}).catch(function(err) {
|
||||||
|
done(err);
|
||||||
|
});
|
||||||
|
}).catch(function(err) {
|
||||||
|
done(err);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should not get sshkey file if there is only private key', function(done) {
|
||||||
|
var sshkeyDirPath = path.join(userDir, 'projects', '.sshkeys');
|
||||||
|
var username = 'test';
|
||||||
|
var filenameList = ['test-key01', 'test-key02'];
|
||||||
|
var onlyPrivateKeyFilenameList = ['test-key03', 'test-key04'];
|
||||||
|
sshkeys.init(mockSettings, mockRuntime).then(function() {
|
||||||
|
for(var filename of filenameList) {
|
||||||
|
fs.writeFileSync(path.join(sshkeyDirPath,username+"_"+filename),"","utf8");
|
||||||
|
fs.writeFileSync(path.join(sshkeyDirPath,username+"_"+filename+".pub"),"","utf8");
|
||||||
|
}
|
||||||
|
for(var filename of onlyPrivateKeyFilenameList) {
|
||||||
|
fs.writeFileSync(path.join(sshkeyDirPath,username+"_"+filename),"","utf8");
|
||||||
|
}
|
||||||
|
sshkeys.listSSHKeys(username).then(function(retObj) {
|
||||||
|
retObj.should.be.instanceOf(Array).and.have.lengthOf(filenameList.length);
|
||||||
|
for(var filename of filenameList) {
|
||||||
|
retObj.should.containEql({ name: filename });
|
||||||
|
}
|
||||||
|
for(var filename of onlyPrivateKeyFilenameList) {
|
||||||
|
retObj.should.not.containEql({ name: filename });
|
||||||
|
}
|
||||||
|
done();
|
||||||
|
}).catch(function(err) {
|
||||||
|
done(err);
|
||||||
|
});
|
||||||
|
}).catch(function(err) {
|
||||||
|
done(err);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should not get sshkey file if there is only public key', function(done) {
|
||||||
|
var sshkeyDirPath = path.join(userDir, 'projects', '.sshkeys');
|
||||||
|
var username = 'test';
|
||||||
|
var filenameList = ['test-key01', 'test-key02'];
|
||||||
|
var directoryList = ['test-key03', '.test-key04'];
|
||||||
|
sshkeys.init(mockSettings, mockRuntime).then(function() {
|
||||||
|
for(var filename of filenameList) {
|
||||||
|
fs.writeFileSync(path.join(sshkeyDirPath,username+"_"+filename),"","utf8");
|
||||||
|
fs.writeFileSync(path.join(sshkeyDirPath,username+"_"+filename+".pub"),"","utf8");
|
||||||
|
}
|
||||||
|
for(var filename of directoryList) {
|
||||||
|
fs.ensureDirSync(path.join(sshkeyDirPath,filename));
|
||||||
|
}
|
||||||
|
sshkeys.listSSHKeys(username).then(function(retObj) {
|
||||||
|
retObj.should.be.instanceOf(Array).and.have.lengthOf(filenameList.length);
|
||||||
|
for(var filename of filenameList) {
|
||||||
|
retObj.should.containEql({ name: filename });
|
||||||
|
}
|
||||||
|
for(var directoryname of directoryList) {
|
||||||
|
retObj.should.not.containEql({ name: directoryname });
|
||||||
|
}
|
||||||
|
done();
|
||||||
|
}).catch(function(err) {
|
||||||
|
done(err);
|
||||||
|
});
|
||||||
|
}).catch(function(err) {
|
||||||
|
done(err);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should get sshkey list that does not have directory', function(done) {
|
||||||
|
var sshkeyDirPath = path.join(userDir, 'projects', '.sshkeys');
|
||||||
|
var username = 'test';
|
||||||
|
var otherUsername = 'other';
|
||||||
|
var filenameList = ['test-key01', 'test-key02'];
|
||||||
|
var otherUserFilenameList = ['test-key03', 'test-key04'];
|
||||||
|
sshkeys.init(mockSettings, mockRuntime).then(function() {
|
||||||
|
for(var filename of filenameList) {
|
||||||
|
fs.writeFileSync(path.join(sshkeyDirPath,username+"_"+filename),"","utf8");
|
||||||
|
fs.writeFileSync(path.join(sshkeyDirPath,username+"_"+filename+".pub"),"","utf8");
|
||||||
|
}
|
||||||
|
for(var filename of otherUserFilenameList) {
|
||||||
|
fs.writeFileSync(path.join(sshkeyDirPath,otherUsername+"_"+filename),"","utf8");
|
||||||
|
fs.writeFileSync(path.join(sshkeyDirPath,otherUsername+"_"+filename+".pub"),"","utf8");
|
||||||
|
}
|
||||||
|
sshkeys.listSSHKeys(username).then(function(retObj) {
|
||||||
|
retObj.should.be.instanceOf(Array).and.have.lengthOf(filenameList.length);
|
||||||
|
for(var filename of filenameList) {
|
||||||
|
retObj.should.containEql({ name: filename });
|
||||||
|
}
|
||||||
|
for(var filename of otherUserFilenameList) {
|
||||||
|
retObj.should.not.containEql({ name: filename });
|
||||||
|
}
|
||||||
|
done();
|
||||||
|
}).catch(function(err) {
|
||||||
|
done(err);
|
||||||
|
});
|
||||||
|
}).catch(function(err) {
|
||||||
|
done(err);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should get sshkey list that have keys of specified user', function(done) {
|
||||||
|
var sshkeyDirPath = path.join(userDir, 'projects', '.sshkeys');
|
||||||
|
var username = 'test';
|
||||||
|
var otherUsername = 'other';
|
||||||
|
var filenameList = ['test-key01', 'test-key02'];
|
||||||
|
var otherUserFilenameList = ['test-key03', 'test-key04'];
|
||||||
|
sshkeys.init(mockSettings, mockRuntime).then(function() {
|
||||||
|
for(var filename of filenameList) {
|
||||||
|
fs.writeFileSync(path.join(sshkeyDirPath,username+"_"+filename),"","utf8");
|
||||||
|
fs.writeFileSync(path.join(sshkeyDirPath,username+"_"+filename+".pub"),"","utf8");
|
||||||
|
}
|
||||||
|
for(var filename of otherUserFilenameList) {
|
||||||
|
fs.writeFileSync(path.join(sshkeyDirPath,otherUsername+"_"+filename),"","utf8");
|
||||||
|
fs.writeFileSync(path.join(sshkeyDirPath,otherUsername+"_"+filename+".pub"),"","utf8");
|
||||||
|
}
|
||||||
|
sshkeys.listSSHKeys(username).then(function(retObj) {
|
||||||
|
retObj.should.be.instanceOf(Array).and.have.lengthOf(filenameList.length);
|
||||||
|
for(var filename of filenameList) {
|
||||||
|
retObj.should.containEql({ name: filename });
|
||||||
|
}
|
||||||
|
for(var filename of otherUserFilenameList) {
|
||||||
|
retObj.should.not.containEql({ name: filename });
|
||||||
|
}
|
||||||
|
done();
|
||||||
|
}).catch(function(err) {
|
||||||
|
done(err);
|
||||||
|
});
|
||||||
|
}).catch(function(err) {
|
||||||
|
done(err);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should generate sshkey file with empty data', function(done) {
|
||||||
|
var sshkeyDirPath = path.join(userDir, 'projects', '.sshkeys');
|
||||||
|
var username = 'test';
|
||||||
|
var options = {
|
||||||
|
name: 'test-key01'
|
||||||
|
};
|
||||||
|
sshkeys.init(mockSettings, mockRuntime).then(function() {
|
||||||
|
sshkeys.generateSSHKey(username, options).then(function(retObj) {
|
||||||
|
retObj.should.be.equal(options.name);
|
||||||
|
fs.existsSync(path.join(sshkeyDirPath,username+'_'+options.name)).should.be.true();
|
||||||
|
fs.existsSync(path.join(sshkeyDirPath,username+'_'+options.name+'.pub')).should.be.true();
|
||||||
|
done();
|
||||||
|
}).catch(function(err) {
|
||||||
|
done(err);
|
||||||
|
});
|
||||||
|
}).catch(function(err) {
|
||||||
|
done(err);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should generate sshkey file with only comment data', function(done) {
|
||||||
|
var sshkeyDirPath = path.join(userDir, 'projects', '.sshkeys');
|
||||||
|
var username = 'test';
|
||||||
|
var options = {
|
||||||
|
comment: 'test@test.com',
|
||||||
|
name: 'test-key01'
|
||||||
|
};
|
||||||
|
|
||||||
|
sshkeys.init(mockSettings, mockRuntime).then(function() {
|
||||||
|
sshkeys.generateSSHKey(username, options).then(function(retObj) {
|
||||||
|
retObj.should.be.equal(options.name);
|
||||||
|
fs.existsSync(path.join(sshkeyDirPath,username+'_'+options.name)).should.be.true();
|
||||||
|
fs.existsSync(path.join(sshkeyDirPath,username+'_'+options.name+'.pub')).should.be.true();
|
||||||
|
done();
|
||||||
|
}).catch(function(err) {
|
||||||
|
done(err);
|
||||||
|
});
|
||||||
|
}).catch(function(err) {
|
||||||
|
done(err);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should generate sshkey file with password data', function(done) {
|
||||||
|
var sshkeyDirPath = path.join(userDir, 'projects', '.sshkeys');
|
||||||
|
var username = 'test';
|
||||||
|
var options = {
|
||||||
|
comment: 'test@test.com',
|
||||||
|
name: 'test-key01',
|
||||||
|
password: 'testtest'
|
||||||
|
};
|
||||||
|
|
||||||
|
sshkeys.init(mockSettings, mockRuntime).then(function() {
|
||||||
|
sshkeys.generateSSHKey(username, options).then(function(retObj) {
|
||||||
|
retObj.should.be.equal(options.name);
|
||||||
|
fs.existsSync(path.join(sshkeyDirPath,username+'_'+options.name)).should.be.true();
|
||||||
|
fs.existsSync(path.join(sshkeyDirPath,username+'_'+options.name+'.pub')).should.be.true();
|
||||||
|
done();
|
||||||
|
}).catch(function(err) {
|
||||||
|
done(err);
|
||||||
|
});
|
||||||
|
}).catch(function(err) {
|
||||||
|
done(err);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should generate sshkey file with size data', function(done) {
|
||||||
|
var sshkeyDirPath = path.join(userDir, 'projects', '.sshkeys');
|
||||||
|
var username = 'test';
|
||||||
|
var options = {
|
||||||
|
comment: 'test@test.com',
|
||||||
|
name: 'test-key01',
|
||||||
|
size: 4096
|
||||||
|
};
|
||||||
|
|
||||||
|
sshkeys.init(mockSettings, mockRuntime).then(function() {
|
||||||
|
sshkeys.generateSSHKey(username, options).then(function(retObj) {
|
||||||
|
retObj.should.be.equal(options.name);
|
||||||
|
fs.existsSync(path.join(sshkeyDirPath,username+'_'+options.name)).should.be.true();
|
||||||
|
fs.existsSync(path.join(sshkeyDirPath,username+'_'+options.name+'.pub')).should.be.true();
|
||||||
|
done();
|
||||||
|
}).catch(function(err) {
|
||||||
|
done(err);
|
||||||
|
});
|
||||||
|
}).catch(function(err) {
|
||||||
|
done(err);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should generate sshkey file with password & size data', function(done) {
|
||||||
|
this.timeout(5000);
|
||||||
|
var sshkeyDirPath = path.join(userDir, 'projects', '.sshkeys');
|
||||||
|
var username = 'test';
|
||||||
|
var options = {
|
||||||
|
comment: 'test@test.com',
|
||||||
|
name: 'test-key01',
|
||||||
|
password: 'testtest',
|
||||||
|
size: 4096
|
||||||
|
};
|
||||||
|
|
||||||
|
sshkeys.init(mockSettings, mockRuntime).then(function() {
|
||||||
|
sshkeys.generateSSHKey(username, options).then(function(retObj) {
|
||||||
|
retObj.should.be.equal(options.name);
|
||||||
|
fs.existsSync(path.join(sshkeyDirPath,username+'_'+options.name)).should.be.true();
|
||||||
|
fs.existsSync(path.join(sshkeyDirPath,username+'_'+options.name+'.pub')).should.be.true();
|
||||||
|
done();
|
||||||
|
}).catch(function(err) {
|
||||||
|
done(err);
|
||||||
|
});
|
||||||
|
}).catch(function(err) {
|
||||||
|
done(err);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should not generate sshkey file with illegal size data', function(done) {
|
||||||
|
this.timeout(5000);
|
||||||
|
var sshkeyDirPath = path.join(userDir, 'projects', '.sshkeys');
|
||||||
|
var username = 'test';
|
||||||
|
var options = {
|
||||||
|
comment: 'test@test.com',
|
||||||
|
name: 'test-key01',
|
||||||
|
size: 1023
|
||||||
|
};
|
||||||
|
|
||||||
|
sshkeys.init(mockSettings, mockRuntime).then(function() {
|
||||||
|
sshkeys.generateSSHKey(username, options).then(function(retObj) {
|
||||||
|
done(new Error('Does NOT throw error!'));
|
||||||
|
}).catch(function(err) {
|
||||||
|
try {
|
||||||
|
err.should.have.have.property('code', 'key_length_too_short');
|
||||||
|
done();
|
||||||
|
}
|
||||||
|
catch (error) {
|
||||||
|
done(error);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}).catch(function(err) {
|
||||||
|
done(err);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should not generate sshkey file with illegal password', function(done) {
|
||||||
|
this.timeout(5000);
|
||||||
|
var sshkeyDirPath = path.join(userDir, 'projects', '.sshkeys');
|
||||||
|
var username = 'test';
|
||||||
|
var options = {
|
||||||
|
comment: 'test@test.com',
|
||||||
|
name: 'test-key01',
|
||||||
|
password: 'aa'
|
||||||
|
};
|
||||||
|
|
||||||
|
sshkeys.init(mockSettings, mockRuntime).then(function() {
|
||||||
|
sshkeys.generateSSHKey(username, options).then(function(retObj) {
|
||||||
|
done(new Error('Does NOT throw error!'));
|
||||||
|
}).catch(function(err) {
|
||||||
|
try {
|
||||||
|
err.should.have.have.property('code', 'key_passphrase_too_short');
|
||||||
|
done();
|
||||||
|
}
|
||||||
|
catch (error) {
|
||||||
|
done(error);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}).catch(function(err) {
|
||||||
|
done(err);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should get sshkey file content', function(done) {
|
||||||
|
var sshkeyDirPath = path.join(userDir, 'projects', '.sshkeys');
|
||||||
|
var username = 'test';
|
||||||
|
var filename = 'test-key01';
|
||||||
|
var fileContent = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQD3a+sgtgzSbbliWxmOq5p6+H/mE+0gjWfLWrkIVmHENd1mifV4uCmIHAR2NfuadUYMQ3+bQ90kpmmEKTMYPsyentsKpHQZxTzG7wOCAIpJnbPTHDMxEJhVTaAwEjbVyMSIzTTPfnhoavWIBu0+uMgKDDlBm+RjlgkFlyhXyCN6UwFrIUUMH6Gw+eQHLiooKIl8ce7uDxIlt+9b7hFCU+sQ3kvuse239DZluu6+8buMWqJvrEHgzS9adRFKku8nSPAEPYn85vDi7OgVAcLQufknNgs47KHBAx9h04LeSrFJ/P5J1b//ItRpMOIme+O9d1BR46puzhvUaCHLdvO9czj+OmW+dIm+QIk6lZIOOMnppG72kZxtLfeKT16ur+2FbwAdL9ItBp4BI/YTlBPoa5mLMxpuWfmX1qHntvtGc9wEwS1P7YFfmF3XiK5apxalzrn0Qlr5UmDNbVIqJb1OlbC0w03Z0oktti1xT+R2DGOLWM4lBbpXDHV1BhQ7oYOvbUD8Cnof55lTP0WHHsOHlQc/BGDti1XA9aBX/OzVyzBUYEf0pkimsD0RYo6aqt7QwehJYdlz9x1NBguBffT0s4NhNb9IWr+ASnFPvNl2sw4XH/8U0J0q8ZkMpKkbLM1Zdp1Fv00GF0f5UNRokai6uM3w/ccantJ3WvZ6GtctqytWrw== \n";
|
||||||
|
|
||||||
|
sshkeys.init(mockSettings, mockRuntime).then(function() {
|
||||||
|
fs.writeFileSync(path.join(sshkeyDirPath,username+"_"+filename),"","utf8");
|
||||||
|
fs.writeFileSync(path.join(sshkeyDirPath,username+"_"+filename+".pub"),fileContent,"utf8");
|
||||||
|
sshkeys.getSSHKey(username, filename).then(function(retObj) {
|
||||||
|
retObj.should.be.equal(fileContent);
|
||||||
|
done();
|
||||||
|
}).catch(function(err) {
|
||||||
|
done(err);
|
||||||
|
});
|
||||||
|
}).catch(function(err) {
|
||||||
|
done(err);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should delete sshkey files', function(done) {
|
||||||
|
var sshkeyDirPath = path.join(userDir, 'projects', '.sshkeys');
|
||||||
|
var username = 'test';
|
||||||
|
var filename = 'test-key01';
|
||||||
|
var fileContent = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQD3a+sgtgzSbbliWxmOq5p6+H/mE+0gjWfLWrkIVmHENd1mifV4uCmIHAR2NfuadUYMQ3+bQ90kpmmEKTMYPsyentsKpHQZxTzG7wOCAIpJnbPTHDMxEJhVTaAwEjbVyMSIzTTPfnhoavWIBu0+uMgKDDlBm+RjlgkFlyhXyCN6UwFrIUUMH6Gw+eQHLiooKIl8ce7uDxIlt+9b7hFCU+sQ3kvuse239DZluu6+8buMWqJvrEHgzS9adRFKku8nSPAEPYn85vDi7OgVAcLQufknNgs47KHBAx9h04LeSrFJ/P5J1b//ItRpMOIme+O9d1BR46puzhvUaCHLdvO9czj+OmW+dIm+QIk6lZIOOMnppG72kZxtLfeKT16ur+2FbwAdL9ItBp4BI/YTlBPoa5mLMxpuWfmX1qHntvtGc9wEwS1P7YFfmF3XiK5apxalzrn0Qlr5UmDNbVIqJb1OlbC0w03Z0oktti1xT+R2DGOLWM4lBbpXDHV1BhQ7oYOvbUD8Cnof55lTP0WHHsOHlQc/BGDti1XA9aBX/OzVyzBUYEf0pkimsD0RYo6aqt7QwehJYdlz9x1NBguBffT0s4NhNb9IWr+ASnFPvNl2sw4XH/8U0J0q8ZkMpKkbLM1Zdp1Fv00GF0f5UNRokai6uM3w/ccantJ3WvZ6GtctqytWrw== \n";
|
||||||
|
|
||||||
|
sshkeys.init(mockSettings, mockRuntime).then(function() {
|
||||||
|
fs.writeFileSync(path.join(sshkeyDirPath,username+"_"+filename),"","utf8");
|
||||||
|
fs.writeFileSync(path.join(sshkeyDirPath,username+"_"+filename+".pub"),fileContent,"utf8");
|
||||||
|
sshkeys.deleteSSHKey(username, filename).then(function() {
|
||||||
|
fs.existsSync(path.join(sshkeyDirPath,username+'_'+filename)).should.be.false();
|
||||||
|
fs.existsSync(path.join(sshkeyDirPath,username+'_'+filename+'.pub')).should.be.false();
|
||||||
|
done();
|
||||||
|
}).catch(function(err) {
|
||||||
|
done(err);
|
||||||
|
});
|
||||||
|
}).catch(function(err) {
|
||||||
|
done(err);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
@ -19,9 +19,9 @@ var sinon = require("sinon");
|
|||||||
var child_process = require('child_process');
|
var child_process = require('child_process');
|
||||||
var EventEmitter = require("events");
|
var EventEmitter = require("events");
|
||||||
|
|
||||||
var ssh = require("../../../../../../red/runtime/storage/localfilesystem/projects/sshKeygen")
|
var keygen = require("../../../../../../../red/runtime/storage/localfilesystem/projects/ssh/keygen")
|
||||||
|
|
||||||
describe("localfilesystem/projects/ssh", function() {
|
describe("localfilesystem/projects/ssh/keygen", function() {
|
||||||
|
|
||||||
afterEach(function() {
|
afterEach(function() {
|
||||||
child_process.spawn.restore();
|
child_process.spawn.restore();
|
||||||
@ -46,7 +46,7 @@ describe("localfilesystem/projects/ssh", function() {
|
|||||||
return e;
|
return e;
|
||||||
});
|
});
|
||||||
|
|
||||||
ssh.generateKey({
|
keygen.generateKey({
|
||||||
size: 123,
|
size: 123,
|
||||||
location: 'location',
|
location: 'location',
|
||||||
comment: 'comment',
|
comment: 'comment',
|
||||||
@ -79,7 +79,7 @@ describe("localfilesystem/projects/ssh", function() {
|
|||||||
return e;
|
return e;
|
||||||
});
|
});
|
||||||
|
|
||||||
ssh.generateKey({
|
keygen.generateKey({
|
||||||
size: 123,
|
size: 123,
|
||||||
location: 'location',
|
location: 'location',
|
||||||
comment: 'comment',
|
comment: 'comment',
|
||||||
@ -112,7 +112,7 @@ describe("localfilesystem/projects/ssh", function() {
|
|||||||
return e;
|
return e;
|
||||||
});
|
});
|
||||||
|
|
||||||
ssh.generateKey({
|
keygen.generateKey({
|
||||||
size: 123,
|
size: 123,
|
||||||
location: 'location',
|
location: 'location',
|
||||||
comment: 'comment',
|
comment: 'comment',
|
@ -1,485 +0,0 @@
|
|||||||
/**
|
|
||||||
* Copyright JS Foundation and other contributors, http://js.foundation
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
**/
|
|
||||||
var should = require("should");
|
|
||||||
var fs = require('fs-extra');
|
|
||||||
var path = require('path');
|
|
||||||
|
|
||||||
var localfilesystem = require("../../../../../red/runtime/storage/localfilesystem");
|
|
||||||
var sshkeys = require("../../../../../red/runtime/storage/localfilesystem/sshkeys");
|
|
||||||
|
|
||||||
describe("storage/localfilesystem/sshkeys", function() {
|
|
||||||
var userDir = path.join(__dirname,".testSSHKeyUserHome");
|
|
||||||
var mockSettings = {
|
|
||||||
userDir: userDir
|
|
||||||
};
|
|
||||||
var mockRuntime = {
|
|
||||||
log:{
|
|
||||||
_:function() { return "placeholder message"},
|
|
||||||
info: function() { },
|
|
||||||
log: function() { },
|
|
||||||
trace: function() { }
|
|
||||||
}
|
|
||||||
};
|
|
||||||
var oldHOME;
|
|
||||||
|
|
||||||
beforeEach(function(done) {
|
|
||||||
oldHOME = process.env.HOME;
|
|
||||||
process.env.HOME = "/tmp/doesnt/exist";
|
|
||||||
fs.remove(userDir,function(err) {
|
|
||||||
fs.mkdir(userDir,done);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
afterEach(function(done) {
|
|
||||||
process.env.HOME = oldHOME;
|
|
||||||
fs.remove(userDir,done);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should create sshkey directory when sshkey initializes', function(done) {
|
|
||||||
var sshkeyDirPath = path.join(userDir, 'projects', '.sshkeys');
|
|
||||||
localfilesystem.init(mockSettings, mockRuntime).then(function() {
|
|
||||||
sshkeys.init(mockSettings, mockRuntime).then(function() {
|
|
||||||
var ret = fs.existsSync(sshkeyDirPath);
|
|
||||||
fs.existsSync(sshkeyDirPath).should.be.true();
|
|
||||||
done();
|
|
||||||
}).catch(function(err) {
|
|
||||||
done(err);
|
|
||||||
});
|
|
||||||
}).catch(function(err) {
|
|
||||||
done(err);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should get sshkey empty list if there is no sshkey file', function(done) {
|
|
||||||
var username = 'test';
|
|
||||||
localfilesystem.init(mockSettings, mockRuntime).then(function() {
|
|
||||||
sshkeys.init(mockSettings, mockRuntime).then(function() {
|
|
||||||
sshkeys.listSSHKeys(username).then(function(retObj) {
|
|
||||||
retObj.should.be.instanceOf(Array).and.have.lengthOf(0);
|
|
||||||
done();
|
|
||||||
}).catch(function(err) {
|
|
||||||
done(err);
|
|
||||||
});
|
|
||||||
}).catch(function(err) {
|
|
||||||
done(err);
|
|
||||||
});
|
|
||||||
}).catch(function(err) {
|
|
||||||
done(err);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should get sshkey list', function(done) {
|
|
||||||
var sshkeyDirPath = path.join(userDir, 'projects', '.sshkeys');
|
|
||||||
var username = 'test';
|
|
||||||
var filenameList = ['test-key01', 'test-key02'];
|
|
||||||
localfilesystem.init(mockSettings, mockRuntime).then(function() {
|
|
||||||
sshkeys.init(mockSettings, mockRuntime).then(function() {
|
|
||||||
for(var filename of filenameList) {
|
|
||||||
fs.writeFileSync(path.join(sshkeyDirPath,username+"_"+filename),"","utf8");
|
|
||||||
fs.writeFileSync(path.join(sshkeyDirPath,username+"_"+filename+".pub"),"","utf8");
|
|
||||||
}
|
|
||||||
sshkeys.listSSHKeys(username).then(function(retObj) {
|
|
||||||
retObj.should.be.instanceOf(Array).and.have.lengthOf(filenameList.length);
|
|
||||||
for(var filename of filenameList) {
|
|
||||||
retObj.should.containEql({ name: filename });
|
|
||||||
}
|
|
||||||
done();
|
|
||||||
}).catch(function(err) {
|
|
||||||
done(err);
|
|
||||||
});
|
|
||||||
}).catch(function(err) {
|
|
||||||
done(err);
|
|
||||||
});
|
|
||||||
}).catch(function(err) {
|
|
||||||
done(err);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should not get sshkey file if there is only private key', function(done) {
|
|
||||||
var sshkeyDirPath = path.join(userDir, 'projects', '.sshkeys');
|
|
||||||
var username = 'test';
|
|
||||||
var filenameList = ['test-key01', 'test-key02'];
|
|
||||||
var onlyPrivateKeyFilenameList = ['test-key03', 'test-key04'];
|
|
||||||
localfilesystem.init(mockSettings, mockRuntime).then(function() {
|
|
||||||
sshkeys.init(mockSettings, mockRuntime).then(function() {
|
|
||||||
for(var filename of filenameList) {
|
|
||||||
fs.writeFileSync(path.join(sshkeyDirPath,username+"_"+filename),"","utf8");
|
|
||||||
fs.writeFileSync(path.join(sshkeyDirPath,username+"_"+filename+".pub"),"","utf8");
|
|
||||||
}
|
|
||||||
for(var filename of onlyPrivateKeyFilenameList) {
|
|
||||||
fs.writeFileSync(path.join(sshkeyDirPath,username+"_"+filename),"","utf8");
|
|
||||||
}
|
|
||||||
sshkeys.listSSHKeys(username).then(function(retObj) {
|
|
||||||
retObj.should.be.instanceOf(Array).and.have.lengthOf(filenameList.length);
|
|
||||||
for(var filename of filenameList) {
|
|
||||||
retObj.should.containEql({ name: filename });
|
|
||||||
}
|
|
||||||
for(var filename of onlyPrivateKeyFilenameList) {
|
|
||||||
retObj.should.not.containEql({ name: filename });
|
|
||||||
}
|
|
||||||
done();
|
|
||||||
}).catch(function(err) {
|
|
||||||
done(err);
|
|
||||||
});
|
|
||||||
}).catch(function(err) {
|
|
||||||
done(err);
|
|
||||||
});
|
|
||||||
}).catch(function(err) {
|
|
||||||
done(err);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should not get sshkey file if there is only public key', function(done) {
|
|
||||||
var sshkeyDirPath = path.join(userDir, 'projects', '.sshkeys');
|
|
||||||
var username = 'test';
|
|
||||||
var filenameList = ['test-key01', 'test-key02'];
|
|
||||||
var directoryList = ['test-key03', '.test-key04'];
|
|
||||||
localfilesystem.init(mockSettings, mockRuntime).then(function() {
|
|
||||||
sshkeys.init(mockSettings, mockRuntime).then(function() {
|
|
||||||
for(var filename of filenameList) {
|
|
||||||
fs.writeFileSync(path.join(sshkeyDirPath,username+"_"+filename),"","utf8");
|
|
||||||
fs.writeFileSync(path.join(sshkeyDirPath,username+"_"+filename+".pub"),"","utf8");
|
|
||||||
}
|
|
||||||
for(var filename of directoryList) {
|
|
||||||
fs.ensureDirSync(path.join(sshkeyDirPath,filename));
|
|
||||||
}
|
|
||||||
sshkeys.listSSHKeys(username).then(function(retObj) {
|
|
||||||
retObj.should.be.instanceOf(Array).and.have.lengthOf(filenameList.length);
|
|
||||||
for(var filename of filenameList) {
|
|
||||||
retObj.should.containEql({ name: filename });
|
|
||||||
}
|
|
||||||
for(var directoryname of directoryList) {
|
|
||||||
retObj.should.not.containEql({ name: directoryname });
|
|
||||||
}
|
|
||||||
done();
|
|
||||||
}).catch(function(err) {
|
|
||||||
done(err);
|
|
||||||
});
|
|
||||||
}).catch(function(err) {
|
|
||||||
done(err);
|
|
||||||
});
|
|
||||||
}).catch(function(err) {
|
|
||||||
done(err);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should get sshkey list that does not have directory', function(done) {
|
|
||||||
var sshkeyDirPath = path.join(userDir, 'projects', '.sshkeys');
|
|
||||||
var username = 'test';
|
|
||||||
var otherUsername = 'other';
|
|
||||||
var filenameList = ['test-key01', 'test-key02'];
|
|
||||||
var otherUserFilenameList = ['test-key03', 'test-key04'];
|
|
||||||
localfilesystem.init(mockSettings, mockRuntime).then(function() {
|
|
||||||
sshkeys.init(mockSettings, mockRuntime).then(function() {
|
|
||||||
for(var filename of filenameList) {
|
|
||||||
fs.writeFileSync(path.join(sshkeyDirPath,username+"_"+filename),"","utf8");
|
|
||||||
fs.writeFileSync(path.join(sshkeyDirPath,username+"_"+filename+".pub"),"","utf8");
|
|
||||||
}
|
|
||||||
for(var filename of otherUserFilenameList) {
|
|
||||||
fs.writeFileSync(path.join(sshkeyDirPath,otherUsername+"_"+filename),"","utf8");
|
|
||||||
fs.writeFileSync(path.join(sshkeyDirPath,otherUsername+"_"+filename+".pub"),"","utf8");
|
|
||||||
}
|
|
||||||
sshkeys.listSSHKeys(username).then(function(retObj) {
|
|
||||||
retObj.should.be.instanceOf(Array).and.have.lengthOf(filenameList.length);
|
|
||||||
for(var filename of filenameList) {
|
|
||||||
retObj.should.containEql({ name: filename });
|
|
||||||
}
|
|
||||||
for(var filename of otherUserFilenameList) {
|
|
||||||
retObj.should.not.containEql({ name: filename });
|
|
||||||
}
|
|
||||||
done();
|
|
||||||
}).catch(function(err) {
|
|
||||||
done(err);
|
|
||||||
});
|
|
||||||
}).catch(function(err) {
|
|
||||||
done(err);
|
|
||||||
});
|
|
||||||
}).catch(function(err) {
|
|
||||||
done(err);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should get sshkey list that have keys of specified user', function(done) {
|
|
||||||
var sshkeyDirPath = path.join(userDir, 'projects', '.sshkeys');
|
|
||||||
var username = 'test';
|
|
||||||
var otherUsername = 'other';
|
|
||||||
var filenameList = ['test-key01', 'test-key02'];
|
|
||||||
var otherUserFilenameList = ['test-key03', 'test-key04'];
|
|
||||||
localfilesystem.init(mockSettings, mockRuntime).then(function() {
|
|
||||||
sshkeys.init(mockSettings, mockRuntime).then(function() {
|
|
||||||
for(var filename of filenameList) {
|
|
||||||
fs.writeFileSync(path.join(sshkeyDirPath,username+"_"+filename),"","utf8");
|
|
||||||
fs.writeFileSync(path.join(sshkeyDirPath,username+"_"+filename+".pub"),"","utf8");
|
|
||||||
}
|
|
||||||
for(var filename of otherUserFilenameList) {
|
|
||||||
fs.writeFileSync(path.join(sshkeyDirPath,otherUsername+"_"+filename),"","utf8");
|
|
||||||
fs.writeFileSync(path.join(sshkeyDirPath,otherUsername+"_"+filename+".pub"),"","utf8");
|
|
||||||
}
|
|
||||||
sshkeys.listSSHKeys(username).then(function(retObj) {
|
|
||||||
retObj.should.be.instanceOf(Array).and.have.lengthOf(filenameList.length);
|
|
||||||
for(var filename of filenameList) {
|
|
||||||
retObj.should.containEql({ name: filename });
|
|
||||||
}
|
|
||||||
for(var filename of otherUserFilenameList) {
|
|
||||||
retObj.should.not.containEql({ name: filename });
|
|
||||||
}
|
|
||||||
done();
|
|
||||||
}).catch(function(err) {
|
|
||||||
done(err);
|
|
||||||
});
|
|
||||||
}).catch(function(err) {
|
|
||||||
done(err);
|
|
||||||
});
|
|
||||||
}).catch(function(err) {
|
|
||||||
done(err);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should generate sshkey file with empty data', function(done) {
|
|
||||||
var sshkeyDirPath = path.join(userDir, 'projects', '.sshkeys');
|
|
||||||
var username = 'test';
|
|
||||||
var options = {
|
|
||||||
name: 'test-key01'
|
|
||||||
};
|
|
||||||
localfilesystem.init(mockSettings, mockRuntime).then(function() {
|
|
||||||
sshkeys.init(mockSettings, mockRuntime).then(function() {
|
|
||||||
sshkeys.generateSSHKey(username, options).then(function(retObj) {
|
|
||||||
retObj.should.be.equal(options.name);
|
|
||||||
fs.existsSync(path.join(sshkeyDirPath,username+'_'+options.name)).should.be.true();
|
|
||||||
fs.existsSync(path.join(sshkeyDirPath,username+'_'+options.name+'.pub')).should.be.true();
|
|
||||||
done();
|
|
||||||
}).catch(function(err) {
|
|
||||||
done(err);
|
|
||||||
});
|
|
||||||
}).catch(function(err) {
|
|
||||||
done(err);
|
|
||||||
});
|
|
||||||
}).catch(function(err) {
|
|
||||||
done(err);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should generate sshkey file with only comment data', function(done) {
|
|
||||||
var sshkeyDirPath = path.join(userDir, 'projects', '.sshkeys');
|
|
||||||
var username = 'test';
|
|
||||||
var options = {
|
|
||||||
comment: 'test@test.com',
|
|
||||||
name: 'test-key01'
|
|
||||||
};
|
|
||||||
localfilesystem.init(mockSettings, mockRuntime).then(function() {
|
|
||||||
sshkeys.init(mockSettings, mockRuntime).then(function() {
|
|
||||||
sshkeys.generateSSHKey(username, options).then(function(retObj) {
|
|
||||||
retObj.should.be.equal(options.name);
|
|
||||||
fs.existsSync(path.join(sshkeyDirPath,username+'_'+options.name)).should.be.true();
|
|
||||||
fs.existsSync(path.join(sshkeyDirPath,username+'_'+options.name+'.pub')).should.be.true();
|
|
||||||
done();
|
|
||||||
}).catch(function(err) {
|
|
||||||
done(err);
|
|
||||||
});
|
|
||||||
}).catch(function(err) {
|
|
||||||
done(err);
|
|
||||||
});
|
|
||||||
}).catch(function(err) {
|
|
||||||
done(err);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should generate sshkey file with password data', function(done) {
|
|
||||||
var sshkeyDirPath = path.join(userDir, 'projects', '.sshkeys');
|
|
||||||
var username = 'test';
|
|
||||||
var options = {
|
|
||||||
comment: 'test@test.com',
|
|
||||||
name: 'test-key01',
|
|
||||||
password: 'testtest'
|
|
||||||
};
|
|
||||||
localfilesystem.init(mockSettings, mockRuntime).then(function() {
|
|
||||||
sshkeys.init(mockSettings, mockRuntime).then(function() {
|
|
||||||
sshkeys.generateSSHKey(username, options).then(function(retObj) {
|
|
||||||
retObj.should.be.equal(options.name);
|
|
||||||
fs.existsSync(path.join(sshkeyDirPath,username+'_'+options.name)).should.be.true();
|
|
||||||
fs.existsSync(path.join(sshkeyDirPath,username+'_'+options.name+'.pub')).should.be.true();
|
|
||||||
done();
|
|
||||||
}).catch(function(err) {
|
|
||||||
done(err);
|
|
||||||
});
|
|
||||||
}).catch(function(err) {
|
|
||||||
done(err);
|
|
||||||
});
|
|
||||||
}).catch(function(err) {
|
|
||||||
done(err);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should generate sshkey file with size data', function(done) {
|
|
||||||
var sshkeyDirPath = path.join(userDir, 'projects', '.sshkeys');
|
|
||||||
var username = 'test';
|
|
||||||
var options = {
|
|
||||||
comment: 'test@test.com',
|
|
||||||
name: 'test-key01',
|
|
||||||
size: 4096
|
|
||||||
};
|
|
||||||
localfilesystem.init(mockSettings, mockRuntime).then(function() {
|
|
||||||
sshkeys.init(mockSettings, mockRuntime).then(function() {
|
|
||||||
sshkeys.generateSSHKey(username, options).then(function(retObj) {
|
|
||||||
retObj.should.be.equal(options.name);
|
|
||||||
fs.existsSync(path.join(sshkeyDirPath,username+'_'+options.name)).should.be.true();
|
|
||||||
fs.existsSync(path.join(sshkeyDirPath,username+'_'+options.name+'.pub')).should.be.true();
|
|
||||||
done();
|
|
||||||
}).catch(function(err) {
|
|
||||||
done(err);
|
|
||||||
});
|
|
||||||
}).catch(function(err) {
|
|
||||||
done(err);
|
|
||||||
});
|
|
||||||
}).catch(function(err) {
|
|
||||||
done(err);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should generate sshkey file with password & size data', function(done) {
|
|
||||||
this.timeout(5000);
|
|
||||||
var sshkeyDirPath = path.join(userDir, 'projects', '.sshkeys');
|
|
||||||
var username = 'test';
|
|
||||||
var options = {
|
|
||||||
comment: 'test@test.com',
|
|
||||||
name: 'test-key01',
|
|
||||||
password: 'testtest',
|
|
||||||
size: 4096
|
|
||||||
};
|
|
||||||
localfilesystem.init(mockSettings, mockRuntime).then(function() {
|
|
||||||
sshkeys.init(mockSettings, mockRuntime).then(function() {
|
|
||||||
sshkeys.generateSSHKey(username, options).then(function(retObj) {
|
|
||||||
retObj.should.be.equal(options.name);
|
|
||||||
fs.existsSync(path.join(sshkeyDirPath,username+'_'+options.name)).should.be.true();
|
|
||||||
fs.existsSync(path.join(sshkeyDirPath,username+'_'+options.name+'.pub')).should.be.true();
|
|
||||||
done();
|
|
||||||
}).catch(function(err) {
|
|
||||||
done(err);
|
|
||||||
});
|
|
||||||
}).catch(function(err) {
|
|
||||||
done(err);
|
|
||||||
});
|
|
||||||
}).catch(function(err) {
|
|
||||||
done(err);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should not generate sshkey file with illegal size data', function(done) {
|
|
||||||
this.timeout(5000);
|
|
||||||
var sshkeyDirPath = path.join(userDir, 'projects', '.sshkeys');
|
|
||||||
var username = 'test';
|
|
||||||
var options = {
|
|
||||||
comment: 'test@test.com',
|
|
||||||
name: 'test-key01',
|
|
||||||
size: 1023
|
|
||||||
};
|
|
||||||
localfilesystem.init(mockSettings, mockRuntime).then(function() {
|
|
||||||
sshkeys.init(mockSettings, mockRuntime).then(function() {
|
|
||||||
sshkeys.generateSSHKey(username, options).then(function(retObj) {
|
|
||||||
done(new Error('Does NOT throw error!'));
|
|
||||||
}).catch(function(err) {
|
|
||||||
try {
|
|
||||||
err.should.have.have.property('code', 'key_length_too_short');
|
|
||||||
done();
|
|
||||||
}
|
|
||||||
catch (error) {
|
|
||||||
done(error);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}).catch(function(err) {
|
|
||||||
done(err);
|
|
||||||
});
|
|
||||||
}).catch(function(err) {
|
|
||||||
done(err);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should not generate sshkey file with illegal password', function(done) {
|
|
||||||
this.timeout(5000);
|
|
||||||
var sshkeyDirPath = path.join(userDir, 'projects', '.sshkeys');
|
|
||||||
var username = 'test';
|
|
||||||
var options = {
|
|
||||||
comment: 'test@test.com',
|
|
||||||
name: 'test-key01',
|
|
||||||
password: 'aa'
|
|
||||||
};
|
|
||||||
localfilesystem.init(mockSettings, mockRuntime).then(function() {
|
|
||||||
sshkeys.init(mockSettings, mockRuntime).then(function() {
|
|
||||||
sshkeys.generateSSHKey(username, options).then(function(retObj) {
|
|
||||||
done(new Error('Does NOT throw error!'));
|
|
||||||
}).catch(function(err) {
|
|
||||||
try {
|
|
||||||
err.should.have.have.property('code', 'key_passphrase_too_short');
|
|
||||||
done();
|
|
||||||
}
|
|
||||||
catch (error) {
|
|
||||||
done(error);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}).catch(function(err) {
|
|
||||||
done(err);
|
|
||||||
});
|
|
||||||
}).catch(function(err) {
|
|
||||||
done(err);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should get sshkey file content', function(done) {
|
|
||||||
var sshkeyDirPath = path.join(userDir, 'projects', '.sshkeys');
|
|
||||||
var username = 'test';
|
|
||||||
var filename = 'test-key01';
|
|
||||||
var fileContent = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQD3a+sgtgzSbbliWxmOq5p6+H/mE+0gjWfLWrkIVmHENd1mifV4uCmIHAR2NfuadUYMQ3+bQ90kpmmEKTMYPsyentsKpHQZxTzG7wOCAIpJnbPTHDMxEJhVTaAwEjbVyMSIzTTPfnhoavWIBu0+uMgKDDlBm+RjlgkFlyhXyCN6UwFrIUUMH6Gw+eQHLiooKIl8ce7uDxIlt+9b7hFCU+sQ3kvuse239DZluu6+8buMWqJvrEHgzS9adRFKku8nSPAEPYn85vDi7OgVAcLQufknNgs47KHBAx9h04LeSrFJ/P5J1b//ItRpMOIme+O9d1BR46puzhvUaCHLdvO9czj+OmW+dIm+QIk6lZIOOMnppG72kZxtLfeKT16ur+2FbwAdL9ItBp4BI/YTlBPoa5mLMxpuWfmX1qHntvtGc9wEwS1P7YFfmF3XiK5apxalzrn0Qlr5UmDNbVIqJb1OlbC0w03Z0oktti1xT+R2DGOLWM4lBbpXDHV1BhQ7oYOvbUD8Cnof55lTP0WHHsOHlQc/BGDti1XA9aBX/OzVyzBUYEf0pkimsD0RYo6aqt7QwehJYdlz9x1NBguBffT0s4NhNb9IWr+ASnFPvNl2sw4XH/8U0J0q8ZkMpKkbLM1Zdp1Fv00GF0f5UNRokai6uM3w/ccantJ3WvZ6GtctqytWrw== \n";
|
|
||||||
localfilesystem.init(mockSettings, mockRuntime).then(function() {
|
|
||||||
sshkeys.init(mockSettings, mockRuntime).then(function() {
|
|
||||||
fs.writeFileSync(path.join(sshkeyDirPath,username+"_"+filename),"","utf8");
|
|
||||||
fs.writeFileSync(path.join(sshkeyDirPath,username+"_"+filename+".pub"),fileContent,"utf8");
|
|
||||||
sshkeys.getSSHKey(username, filename).then(function(retObj) {
|
|
||||||
retObj.should.be.equal(fileContent);
|
|
||||||
done();
|
|
||||||
}).catch(function(err) {
|
|
||||||
done(err);
|
|
||||||
});
|
|
||||||
}).catch(function(err) {
|
|
||||||
done(err);
|
|
||||||
});
|
|
||||||
}).catch(function(err) {
|
|
||||||
done(err);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should delete sshkey files', function(done) {
|
|
||||||
var sshkeyDirPath = path.join(userDir, 'projects', '.sshkeys');
|
|
||||||
var username = 'test';
|
|
||||||
var filename = 'test-key01';
|
|
||||||
var fileContent = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQD3a+sgtgzSbbliWxmOq5p6+H/mE+0gjWfLWrkIVmHENd1mifV4uCmIHAR2NfuadUYMQ3+bQ90kpmmEKTMYPsyentsKpHQZxTzG7wOCAIpJnbPTHDMxEJhVTaAwEjbVyMSIzTTPfnhoavWIBu0+uMgKDDlBm+RjlgkFlyhXyCN6UwFrIUUMH6Gw+eQHLiooKIl8ce7uDxIlt+9b7hFCU+sQ3kvuse239DZluu6+8buMWqJvrEHgzS9adRFKku8nSPAEPYn85vDi7OgVAcLQufknNgs47KHBAx9h04LeSrFJ/P5J1b//ItRpMOIme+O9d1BR46puzhvUaCHLdvO9czj+OmW+dIm+QIk6lZIOOMnppG72kZxtLfeKT16ur+2FbwAdL9ItBp4BI/YTlBPoa5mLMxpuWfmX1qHntvtGc9wEwS1P7YFfmF3XiK5apxalzrn0Qlr5UmDNbVIqJb1OlbC0w03Z0oktti1xT+R2DGOLWM4lBbpXDHV1BhQ7oYOvbUD8Cnof55lTP0WHHsOHlQc/BGDti1XA9aBX/OzVyzBUYEf0pkimsD0RYo6aqt7QwehJYdlz9x1NBguBffT0s4NhNb9IWr+ASnFPvNl2sw4XH/8U0J0q8ZkMpKkbLM1Zdp1Fv00GF0f5UNRokai6uM3w/ccantJ3WvZ6GtctqytWrw== \n";
|
|
||||||
localfilesystem.init(mockSettings, mockRuntime).then(function() {
|
|
||||||
sshkeys.init(mockSettings, mockRuntime).then(function() {
|
|
||||||
fs.writeFileSync(path.join(sshkeyDirPath,username+"_"+filename),"","utf8");
|
|
||||||
fs.writeFileSync(path.join(sshkeyDirPath,username+"_"+filename+".pub"),fileContent,"utf8");
|
|
||||||
sshkeys.deleteSSHKey(username, filename).then(function() {
|
|
||||||
fs.existsSync(path.join(sshkeyDirPath,username+'_'+filename)).should.be.false();
|
|
||||||
fs.existsSync(path.join(sshkeyDirPath,username+'_'+filename+'.pub')).should.be.false();
|
|
||||||
done();
|
|
||||||
}).catch(function(err) {
|
|
||||||
done(err);
|
|
||||||
});
|
|
||||||
}).catch(function(err) {
|
|
||||||
done(err);
|
|
||||||
});
|
|
||||||
}).catch(function(err) {
|
|
||||||
done(err);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
Loading…
Reference in New Issue
Block a user