提交 0ace9c77 编写于 作者: R rsercano

resolves #351

上级 efaf4339
......@@ -5,6 +5,7 @@ import {ReactiveVar} from "meteor/reactive-var";
import {FlowRouter} from "meteor/kadira:flow-router";
import Helper from "/client/imports/helper";
import {Connections} from "/lib/imports/collections/connections";
import {loadFile} from "/client/imports/views/layouts/top_navbar/top_navbar";
import "./connections.html";
const toastr = require('toastr');
......@@ -255,7 +256,7 @@ const prepareFormForEdit = function () {
const loadSSHCertificate = function (connection, currentConnection, done) {
if (connection.ssh) {
if (connection.ssh.certificateFileName) {
loadCertificate(currentConnection.ssh ? currentConnection.ssh.certificateFile : null, $('#inputSshCertificate'), function (val) {
loadFile(currentConnection.ssh ? currentConnection.ssh.certificateFile : null, $('#inputSshCertificate'), function (val) {
connection.ssh.certificateFile = val;
done(connection);
});
......@@ -306,7 +307,7 @@ const populateConnection = function (currentConnection, done) {
const loadCertificateKeyFile = function (connection, prop, currentConnection, done) {
if (connection[prop].certificateKeyFileName) {
loadCertificate(currentConnection[prop] ? currentConnection[prop].certificateKeyFile : null, $('#inputCertificateKey'), function (val) {
loadFile(currentConnection[prop] ? currentConnection[prop].certificateKeyFile : null, $('#inputCertificateKey'), function (val) {
connection[prop].certificateKeyFile = val;
done();
});
......@@ -317,7 +318,7 @@ const loadCertificateKeyFile = function (connection, prop, currentConnection, do
const loadsslCertificate = function (connection, prop, currentConnection, done) {
if (connection[prop].certificateFileName) {
loadCertificate(currentConnection[prop] ? currentConnection[prop].certificateFile : null, $('#inputCertificate'), function (val) {
loadFile(currentConnection[prop] ? currentConnection[prop].certificateFile : null, $('#inputCertificate'), function (val) {
connection[prop].certificateFile = val;
loadCertificateKeyFile(connection, prop, currentConnection, done);
});
......@@ -329,7 +330,7 @@ const loadsslCertificate = function (connection, prop, currentConnection, done)
const loadRootCa = function (connection, prop, currentConnection, done) {
if (connection[prop].rootCAFileName) {
loadCertificate(currentConnection[prop] ? currentConnection[prop].rootCAFile : null, $('#inputRootCA'), function (val) {
loadFile(currentConnection[prop] ? currentConnection[prop].rootCAFile : null, $('#inputRootCA'), function (val) {
connection[prop].rootCAFile = val;
loadsslCertificate(connection, prop, currentConnection, done);
});
......@@ -339,22 +340,6 @@ const loadRootCa = function (connection, prop, currentConnection, done) {
}
};
const loadCertificate = function (currentVal, input, done) {
let fileInput = input.siblings('.bootstrap-filestyle').children('input');
if (input[0].files.length == 0 && currentVal && fileInput.val()) {
done(currentVal);
}
else if (input[0].files.length != 0) {
const fileReader = new FileReader();
fileReader.onload = function (file) {
done(new Uint8Array(file.target.result));
};
fileReader.readAsArrayBuffer(input[0].files[0]);
} else {
done([]);
}
};
const fillSsh = function (connection) {
const port = $('#inputSshPort').val();
const localPort = $('#inputSshLocalPort').val();
......@@ -627,18 +612,6 @@ Template.connections.events({
$(e.currentTarget).parents('.divHostField').remove();
},
'change .filestyle'(e){
let inputSelector = $('#' + e.currentTarget.id);
let blob = inputSelector[0].files[0];
let fileInput = inputSelector.siblings('.bootstrap-filestyle').children('input');
if (blob) {
fileInput.val(blob.name);
} else {
fileInput.val('');
}
},
'click #btnCreateNewConnection' () {
$('#addEditConnectionModalTitle').text('Add Connection');
const modal = $('#addEditConnectionModal');
......
......@@ -108,7 +108,7 @@
<div class="form-group">
<label class="col-lg-3 control-label">Backup File </label>
<div class="col-lg-9">
<input class="form-control" type="text" id="inputImportBackupFile"
<input class="form-control filestyle" type="file" id="inputImportBackupFile"
data-buttonName="btn-primary">
<span class="help-block m-b-none">Example: <b>/home/user/mongoclient/backup_17_10_2016_18_24_01.json</b></span>
</div>
......
......@@ -18,7 +18,27 @@ require('datatables.net-bs')(window, $);
require('datatables.net-buttons-bs')(window, $);
require('datatables.net-responsive-bs')(window, $);
export const loadFile = function (currentVal, input, done, readAsString) {
let fileInput = input.siblings('.bootstrap-filestyle').children('input');
if (input[0].files.length == 0 && currentVal && fileInput.val()) {
done(currentVal);
}
else if (input[0].files.length != 0) {
const fileReader = new FileReader();
fileReader.onload = function (file) {
if (readAsString) done(file.target.result);
else done(new Uint8Array(file.target.result));
};
if (readAsString) fileReader.readAsText(input[0].files[0], "UTF-8");
else fileReader.readAsArrayBuffer(input[0].files[0]);
} else {
done([]);
}
};
const init = function () {
$(".filestyle").filestyle({});
let selectorForSwitchDatabases = $('#tblSwitchDatabases');
selectorForSwitchDatabases.find('tbody').on('click', 'tr', function () {
let table = selectorForSwitchDatabases.DataTable();
......@@ -65,16 +85,18 @@ Template.topNavbar.events({
if (isImport && importInput.val()) {
laddaButton.start();
Meteor.call('importMongoclient', importInput.val(), function (err) {
if (err) {
toastr.error("Couldn't import: " + err.message);
} else {
toastr.success("Successfully imported from " + importInput.val());
$('#importExportMongoclientModal').modal('hide');
}
Ladda.stopAll();
});
loadFile(null, importInput, function (val) {
Meteor.call('importMongoclient', val, function (err) {
if (err) {
toastr.error("Couldn't import: " + err.message);
} else {
toastr.success("Successfully imported from " + importInput.siblings('.bootstrap-filestyle').children('input').val());
$('#importExportMongoclientModal').modal('hide');
}
Ladda.stopAll();
});
}, true);
}
else if (!isImport && exportInput.val()) {
laddaButton.start();
......@@ -92,6 +114,18 @@ Template.topNavbar.events({
},
'change .filestyle'(e){
let inputSelector = $('#' + e.currentTarget.id);
let blob = inputSelector[0].files[0];
let fileInput = inputSelector.siblings('.bootstrap-filestyle').children('input');
if (blob) {
fileInput.val(blob.name);
} else {
fileInput.val('');
}
},
'click #btnRefreshCollections2'() {
connect(true);
},
......
......@@ -12,7 +12,7 @@ import {parseUrl} from "./internal_methods";
/**
* Migrates 1.x version connections to 2.x
*/
const migrateConnectionsIfExist = function () {
export const migrateConnectionsIfExist = function () {
let settings = Settings.findOne();
if (settings.isMigrationDone) return;
......
......@@ -6,6 +6,7 @@
import {Meteor} from "meteor/meteor";
import {Settings} from "/lib/imports/collections/settings";
import {Connections} from "/lib/imports/collections/connections";
import {migrateConnectionsIfExist} from "/server/imports/internal/startup";
import ShellCommands from "/lib/imports/collections/shell";
import SchemaAnaylzeResult from "/lib/imports/collections/schema_analyze_result";
import LOGGER from "../internal/logger";
......@@ -188,34 +189,26 @@ Meteor.methods({
importMongoclient(file) {
LOGGER.info('[importMongoclient]', file);
let result = Async.runSync(function (done) {
try {
fs.readFile(file, 'utf8', function (err, data) {
done(err, data);
});
} catch (ex) {
LOGGER.error('[importMongoclient]', ex);
done(new Meteor.Error(ex.message), null);
try {
let mongoclientData = JSON.parse(file);
if (mongoclientData.settings) {
Settings.remove({});
delete mongoclientData.settings._id;
Settings.insert(mongoclientData.settings);
}
});
if (result.err) {
return result;
}
let mongoclientData = JSON.parse(result.result);
if (mongoclientData.settings) {
Settings.remove({});
delete mongoclientData.settings._id;
Settings.insert(mongoclientData.settings);
}
if (mongoclientData.connections) {
for (let i = 0; i < mongoclientData.connections.length; i++) {
delete mongoclientData.connections[i]._id;
Connections._collection.insert(mongoclientData.connections[i]);
if (mongoclientData.connections) {
for (let i = 0; i < mongoclientData.connections.length; i++) {
delete mongoclientData.connections[i]._id;
Connections._collection.insert(mongoclientData.connections[i]);
}
migrateConnectionsIfExist();
}
}
catch (ex) {
LOGGER.error('[importMongoclient]', 'unexpected error during import', ex);
throw new Meteor.Error(ex.message);
}
},
exportMongoclient(dir) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册