/* Arching Kaos Settings * * Kaotisk Hund - 2024 * * @license magnet:?xt=urn:btih:0b31508aeb0634b347b8270c7bee4d411b5d4109&dn=agpl-3.0.txt AGPL v3.0 * */ /* * We will be using browser's localStorage for the clients to configure their * desired way to visit the web-ui. * * Proposed setting values: * - Scan Stellar Asset or not * - Stellar Asset to scan for addresses * - ipfs gateway to use for retrieving ipfs parts (can change targeted swarm) * - ring to local node (must running API locally see ../arching-kaos-tools * repo) * - have a follow nodeInfo/zchain list and load these * - depth of retrieving at once (per zchain) (ak-enter -l X -n ) * * TODO: Make up a configuration item as well but there we could store locally * kays or other more personal stuff. Need to encrypt these with a password too! * */ var default_settings = { ipfs: { gateway: { list: [ 'https://ipfs.arching-kaos.com/', 'http://gw.ipfs.z.kaotisk-hund.com/', 'http://localhost:8080/' ], active: 0 } }, stellar: { asset: { list: [ { code: 'ARCHINGKAOS', issuer: 'GB4QVKD6NW3CSNO5TNPARAWNPPXOPSSTKB35XCWB7PUNBIQTK3DVELB2' }, { code: 'KAOTISKHUND', issuer: 'GDLJKMETTIXAVTZ2XXR2LHUITT7GZBNWEKQDN7V7SP4MURVY6266BIMO' } ], active: 0 }, variableNames: { list: [ 'config', 'ak-config', 'kh-config' ], active: 0 }, horizon: { list: [ 'https://horizon.stellar.org/', 'http://horizon.stellar.z.kaotisk-hund.com/' ], active: 0 }, scan: true }, ak: { settings : { seekDepth: 10, }, connect: { list: [ 'http://127.0.0.1:8610', 'http://[fc59:6076:6299:6776:c13d:fbb2:1226:ead0]:8610', 'http://api.aknet.z.kaotisk-hund.com/' ], active: 0 }, scan: false } } // TODO: Make up a settings configuration page to set this up initially rather // than forcing visitors to just save them into their local storage. // // We are overriding the settings each time to test our changes // with the settings above. // // if ( window.localStorage.getItem("ak-settings") === null ) { // window.localStorage.setItem("ak-settings", JSON.stringify(default_settings)); // } // var activeSettings = JSON.parse(window.localStorage.getItem("ak-settings")); // // All comments above are replaced by temporary initializing without saving // anything in the localStorage var activeSettings = default_settings; // Also, remove any settings stored from previous runs window.localStorage.removeItem("ak-settings"); // Full functionality for Stellar intergration, requires clearnet connection // However, we have other ways of running the WEB-UI, eg locally or via a // cjdns-based ipfs gateway. if (( location.origin === "http://z.kaotisk-hund.com") || ( location.origin === "http://gw.ipfs.z.kaotisk-hund.com") || ( location.origin === "http://[fc59:6076:6299:6776:c13d:fbb2:1226:ead0]")) { activeSettings.ipfsSelectedGatewayAddress = 1; activeSettings.horizonSelectedAddress = 1; } else if ( location.origin === "http://localhost:3000" ) { activeSettings.ipfsSelectedGatewayAddress = 2; } else { activeSettings.ipfsSelectedGatewayAddress = 0; } var settingsPage = document.querySelector('#settings-section'); var settingsKeys = Object.keys(activeSettings); function renderCheck(container, value){ var checkbox = document.createElement('input'); checkbox.type = 'checkbox'; if (value === true){ checkbox.checked = true; } container.appendChild(checkbox); } function renderList(container, value){ var selectOptions = document.createElement('select'); for ( i = 0 ; i < value.list.length; i++ ){ var option = document.createElement("option"); if ( i === value.active ) { option.selected = true; }; option.innerText = value.list[i]; option.value = i; selectOptions.appendChild(option); } container.appendChild(selectOptions); } function renderAssets(container, value){ var selectOptions = document.createElement('select'); for ( i = 0 ; i < value.list.length; i++ ){ var option = document.createElement("option"); if ( i === value.active ) { option.selected = true; }; option.innerText = value.list[i].code + "-" + value.list[i].issuer; option.value = i; selectOptions.appendChild(option); } container.appendChild(selectOptions); } function settingPlaceToDOM(key, value){ var container = document.createElement("details"); container.innerText=key; if ( Array.isArray(value) ){ var ul = document.createElement("select"); value.map((v)=>{ if (v.constructor.name === "Object"){ Object.keys(v).forEach((value)=>{ var li = document.createElement("option"); li.innerText = value + ': ' + v[value]; li.value = value; ul.appendChild(li); }); } else { var li = document.createElement("option"); li.innerText = v; li.value = v; ul.appendChild(li); } }); container.appendChild(ul); } else if (value.constructor.name === "Object" ) { console.log("KEY: "+key); switch (key){ case 'ipfs': var label = document.createElement('summary'); label.innerText = "Gateway"; container.appendChild(label); renderList(container, value.gateway); break; case 'stellar': var label = document.createElement('summary'); label.innerText = "Stellar"; container.appendChild(label); renderAssets(container, value.asset); var label = document.createElement('summary'); label.innerText = "Variable Names"; container.appendChild(label); renderList(container, value.variableNames); var label = document.createElement('summary'); label.innerText = "Horizon"; container.appendChild(label); renderList(container, value.horizon); var label = document.createElement('summary'); label.innerText = "Scan"; container.appendChild(label); renderCheck(container, value.scan); break; case 'ak': var label = document.createElement('summary'); label.innerText = "Connect"; container.appendChild(label); renderList(container, value.connect); break; default: container.innerText += " unknonwn lol"; } } else { console.log(`Settings value: ${value}, type: ${typeof(value)}`); // container.innerText = value; } settingsPage.appendChild(container); } settingsKeys.forEach( (value) => { settingPlaceToDOM(value, activeSettings[value]); } ); /* Small dump as pre text */ var predump = document.createElement('pre'); predump.innerText = JSON.stringify(activeSettings, null, 2); settingsPage.appendChild(predump); /* END of: Small dump as pre text */ // console.log(activeSettings.ipfsGatewayAddress[activeSettings.ipfsSelectedGatewayAddress]); // vim: tabstop=4 shiftwidth=4 expandtab softtabstop=4 // @license-end