#18: export and import of config

This commit is contained in:
andreas 2022-03-02 10:53:47 +01:00
parent 82a9c5dcd6
commit 785ece971e
2 changed files with 61 additions and 37 deletions

View File

@ -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">

View File

@ -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;