let html = "<h4class=\"titleis-4\">Accounts</h4><divclass=spacer></div><div>" + result["total"].toString() + " known account(s)</div><divclass=spacer></div>";
let html = "<h4class=\"titleis-4\">Instance</h4><divclass=spacer></div>";
html += "<formaction=\"javascript:saveInstance()\"><div>";
html += "<divclass=\"sectionis-inline-block\"style=\"width:420px;vertical-align:top\">";
html += "<labelclass=label>URI</label><divclass=control><inputid=uriclass=inputplaceholder=my-slon-instance.foorequiredautocomplete=offvalue=\""+instance["uri"]+"\"></div><divclass=spacer></div>";
html += "<labelclass=label>Title</label><divclass=control><inputid=titleclass=inputplaceholder=\"MySlonInstance\"requiredautocomplete=offvalue=\""+instance["title"]+"\"></div><divclass=spacer></div>";
html += "<labelclass=label>Description</label><divclass=control><inputid=descriptionclass=inputplaceholder=\"AfediverseinstancerunningonTempleOS\"requiredautocomplete=offvalue=\""+instance["description"]+"\"></div><divclass=spacer></div>";
html += "<labelclass=label>Email</label><divclass=control><inputid=emailclass=inputtype=emailplaceholder=\"alec@checksum.fail\"requiredautocomplete=offvalue=\""+instance["email"]+"\"></div><divclass=spacer></div>";
html += "<labelclass=label>Enable Registrations</label><divclass=control><inputid=registrationstype=checkbox"+(instance["registrations"]?"checked":"")+"></div><divclass=spacer></div>";
html += "</div>";
html += "</div>";
html += "<divclass=\"controlnext\"><inputclass=\"buttonis-link\"type=submitvalue=Save></div>"
let html = "<h4class=\"titleis-4\">Settings</h4><divclass=spacer></div>";
html += "<formaction=\"javascript:saveSettings()\"><div>";
html += "<tableclass=table><thead><tr><th>name</th><th>value</th><th>delete</th></tr></head><tbody>";
if (keys.length) {
for (let i = 0; i <keys.length;i++){
let inputType = "text";
if (obscured_setting_names.indexOf(keys[i]) != -1) {
inputType = "password";
}
html += "<tr><td>" + keys[i] + "</td><td><divclass=control><inputautocomplete=offclass=inputid=settings_"+keys[i]+"type=\""+inputType+"\"value=\""+settings[keys[i]]+"\"></div></td><tdstyle=\"text-align:center\"><ahref=\"javascript:deleteSetting('"+keys[i]+"');\">❌</a></td>"
}
}
html += "</tbody></table>";
html += "<divclass=\"controlis-inline\"><inputautocomplete=offclass=\"inputis-inline\"id=new_nameplaceholder=name></div> ";
html += "<divclass=\"controlis-inline\"><inputautocomplete=offclass=\"inputis-inline\"id=new_valueplaceholder=value></div> ";
html += "<divclass=\"controlis-inline\"><inputclass=\"buttonis-inline\"onclick=\"addSetting()\"type=buttonvalue=Add></div> ";
html += "<divclass=\"controlnext\"><inputclass=\"buttonis-link\"type=submitvalue=Save></div>";
html += "</div></form>";
setContent(html);
setActiveLink("settings");
}
function addSetting() {
let name = document.getElementById("new_name").value;
let value = document.getElementById("new_value").value;
if (name.indexOf(" ") != -1) {
alert("key can not contain spaces: " + name);
return;
}
if (document.getElementById("settings_" + name)) {
alert("key already exists: " + name);
return;
}
let inputType = "text";
if (obscured_setting_names.indexOf(name) != -1) {
inputType = "password";
}
let new_setting_html = "<tr><td>" + name + "</td><td><divclass=control><inputautocomplete=offclass=inputid=settings_"+name+"type=\""+inputType+"\"value=\""+value+"\"></div></td><tdstyle=\"text-align:center\"><ahref=\"javascript:deleteSetting('"+name+"');\">❌</a></td>";
let html = "<h4class=\"titleis-4\">New User</h4><divclass=spacer></div>";
html += "<formaction=\"javascript:saveNewUser()\"><div>";
html += "<divclass=\"sectionis-inline-block\"style=\"width:420px;vertical-align:top\">";
html += "<labelclass=label>Username</label><divclass=control><inputid=usernameclass=inputplaceholder=baohrequiredautocomplete=off></div><divclass=spacer></div>";
html += "<labelclass=label>Display Name</label><divclass=control><inputid=display_nameclass=inputplaceholder=\"IkuroHashizawa\"requiredautocomplete=off></div><divclass=spacer></div>";
html += "<labelclass=label>Email</label><divclass=control><inputid=emailclass=inputtype=emailplaceholder=\"cooldude42069@checksum.fail\"requiredautocomplete=off></div><divclass=spacer></div>";
html += "<labelclass=label>Bio</label><divclass=control><inputid=bioclass=inputplaceholder=\"imafirinmahlazercannon\"requiredautocomplete=off></div><divclass=spacer></div>";
html += "</div>";
html += "<divclass=\"sectionis-inline-block\"style=\"width:420px;vertical-align:top\">";
html += "<labelclass=label>Avatar</label><divclass=control><inputid=avatarclass=inputplaceholder=\"https://full.path.to/my/avatar.png\"requiredautocomplete=off></div><divclass=spacer></div>";
html += "<labelclass=label>Header</label><divclass=control><inputid=headerclass=inputplaceholder=\"https://full.path.to/my/header.png\"requiredautocomplete=off></div><divclass=spacer></div>";
html += "<labelclass=label>Private Key (must be in DER format)</label><divclass=control><inputonchange=updateBase64(this)id=privatekeytype=filerequiredautocomplete=off></div><divclass=spacer></div>";
html += "<labelclass=label>Public Key (must be in PEM format)</label><divclass=control><inputonchange=updateBase64(this)id=publickeytype=filerequiredautocomplete=off></div><divclass=spacer></div>";
html += "</div>";
html += "</div>";
html += "<divclass=\"controlnext\"><inputclass=\"buttonis-link\"type=submitvalue=Save></div>"
html += "</div></form>";
setContent(html);
setActiveLink("accounts");
}
async function saveNewUser() {
let data = {};
let fields = document.getElementsByTagName("input");