#18: export and import of config
This commit is contained in:
parent
82a9c5dcd6
commit
785ece971e
|
@ -62,6 +62,8 @@
|
||||||
<button id="resetForm">ReloadConfig</button>
|
<button id="resetForm">ReloadConfig</button>
|
||||||
<button id="forgetPass">ForgetPass</button>
|
<button id="forgetPass">ForgetPass</button>
|
||||||
<button id="changeConfig">Save&Restart</button>
|
<button id="changeConfig">Save&Restart</button>
|
||||||
|
<button id="exportConfig">Export</button>
|
||||||
|
<button id="importConfig">Import</button>
|
||||||
<button id="factoryReset">FactoryReset</button>
|
<button id="factoryReset">FactoryReset</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="configFormRows">
|
<div class="configFormRows">
|
||||||
|
|
64
web/index.js
64
web/index.js
|
@ -204,11 +204,7 @@ function checkXDR(v,allValues){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
function changeConfig() {
|
function getAllConfigs(omitPass) {
|
||||||
ensurePass()
|
|
||||||
.then(function (pass) {
|
|
||||||
let newAdminPass;
|
|
||||||
let url = "/api/setConfig?_hash="+encodeURIComponent(pass)+"&";
|
|
||||||
let values = document.querySelectorAll('.configForm select , .configForm input');
|
let values = document.querySelectorAll('.configForm select , .configForm input');
|
||||||
let allValues = {};
|
let allValues = {};
|
||||||
for (let i = 0; i < values.length; i++) {
|
for (let i = 0; i < values.length; i++) {
|
||||||
|
@ -217,7 +213,7 @@ function changeConfig() {
|
||||||
if (!name) continue;
|
if (!name) continue;
|
||||||
if (name.indexOf("_") >= 0) continue;
|
if (name.indexOf("_") >= 0) continue;
|
||||||
let def = getConfigDefition(name);
|
let def = getConfigDefition(name);
|
||||||
if (def.type === 'password' && v.value == '') {
|
if (def.type === 'password' && ( v.value == '' || omitPass)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
let check = v.getAttribute('data-check');
|
let check = v.getAttribute('data-check');
|
||||||
|
@ -232,11 +228,22 @@ function changeConfig() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (name == 'adminPassword'){
|
|
||||||
newAdminPass=v.value;
|
|
||||||
}
|
|
||||||
allValues[name] = v.value;
|
allValues[name] = v.value;
|
||||||
url += name + "=" + encodeURIComponent(v.value) + "&";
|
}
|
||||||
|
return allValues;
|
||||||
|
}
|
||||||
|
function changeConfig() {
|
||||||
|
ensurePass()
|
||||||
|
.then(function (pass) {
|
||||||
|
let newAdminPass;
|
||||||
|
let url = "/api/setConfig?_hash="+encodeURIComponent(pass)+"&";
|
||||||
|
let allValues=getAllConfigs();
|
||||||
|
if (!allValues) return;
|
||||||
|
for (let name in allValues){
|
||||||
|
if (name == 'adminPassword'){
|
||||||
|
newAdminPass=allValues[name];
|
||||||
|
}
|
||||||
|
url += name + "=" + encodeURIComponent(allValues[name]) + "&";
|
||||||
}
|
}
|
||||||
getJson(url)
|
getJson(url)
|
||||||
.then(function (status) {
|
.then(function (status) {
|
||||||
|
@ -254,7 +261,7 @@ function changeConfig() {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
.catch(function (e) { alert("Invalid password"); })
|
.catch(function (e) { alert(e); })
|
||||||
}
|
}
|
||||||
function factoryReset() {
|
function factoryReset() {
|
||||||
ensurePass()
|
ensurePass()
|
||||||
|
@ -861,6 +868,19 @@ function formatDate(d){
|
||||||
else rt+=v;
|
else rt+=v;
|
||||||
return rt;
|
return rt;
|
||||||
}
|
}
|
||||||
|
function downloadData(data,name){
|
||||||
|
let url="data:application/octet-stream,"+encodeURIComponent(JSON.stringify(data,undefined,2));
|
||||||
|
let target=document.getElementById('downloadXdr');
|
||||||
|
if (! target) return;
|
||||||
|
target.setAttribute('href',url);
|
||||||
|
target.setAttribute('download',name);
|
||||||
|
target.click();
|
||||||
|
}
|
||||||
|
function exportConfig(){
|
||||||
|
let data=getAllConfigs(true);
|
||||||
|
if (! data) return;
|
||||||
|
downloadData(data,"config"+formatDate()+".json");
|
||||||
|
}
|
||||||
function exportXdr(){
|
function exportXdr(){
|
||||||
let data={};
|
let data={};
|
||||||
forEl('.xdrvalue',function(el) {
|
forEl('.xdrvalue',function(el) {
|
||||||
|
@ -873,18 +893,14 @@ function exportXdr(){
|
||||||
}
|
}
|
||||||
data[name]=value;
|
data[name]=value;
|
||||||
})
|
})
|
||||||
let url="data:application/octet-stream,"+encodeURIComponent(JSON.stringify(data,undefined,2));
|
downloadData(data,"xdr"+formatDate()+".json");
|
||||||
let target=document.getElementById('downloadXdr');
|
|
||||||
if (! target) return;
|
|
||||||
target.setAttribute('href',url);
|
|
||||||
target.setAttribute('download',"xdr"+formatDate()+".json");
|
|
||||||
target.click();
|
|
||||||
}
|
}
|
||||||
function importXdr(){
|
function importJson(opt_keyPattern){
|
||||||
forEl('.uploadXdr',function(ul){
|
let clazz='importJson';
|
||||||
|
forEl('.'+clazz,function(ul){
|
||||||
ul.remove();
|
ul.remove();
|
||||||
});
|
});
|
||||||
let ip=addEl('input','uploadXdr',document.body);
|
let ip=addEl('input',clazz,document.body);
|
||||||
ip.setAttribute('type','file');
|
ip.setAttribute('type','file');
|
||||||
ip.addEventListener('change',function(ev){
|
ip.addEventListener('change',function(ev){
|
||||||
if (ip.files.length > 0){
|
if (ip.files.length > 0){
|
||||||
|
@ -895,7 +911,7 @@ function importXdr(){
|
||||||
let idata=JSON.parse(reader.result);
|
let idata=JSON.parse(reader.result);
|
||||||
let hasOverwrites=false;
|
let hasOverwrites=false;
|
||||||
for (let k in idata){
|
for (let k in idata){
|
||||||
if (! k.match(/^XDR[0-9][0-9]*/)){
|
if (opt_keyPattern && ! k.match(opt_keyPattern)){
|
||||||
alert("file contains invalid key "+k);
|
alert("file contains invalid key "+k);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -926,6 +942,12 @@ function importXdr(){
|
||||||
});
|
});
|
||||||
ip.click();
|
ip.click();
|
||||||
}
|
}
|
||||||
|
function importXdr(){
|
||||||
|
importJson(new RegExp(/^XDR[0-9][0-9]*/));
|
||||||
|
}
|
||||||
|
function importConfig(){
|
||||||
|
importJson();
|
||||||
|
}
|
||||||
function toggleClass(el,id,classList){
|
function toggleClass(el,id,classList){
|
||||||
let nc=classList[id];
|
let nc=classList[id];
|
||||||
let rt=false;
|
let rt=false;
|
||||||
|
|
Loading…
Reference in New Issue