function getRegDNS() {
var dns1v4 = document.getElementById("dns1v4").value;
var dns2v4 = document.getElementById("dns2v4").value;
var dns1v6 = document.getElementById("dns1v6").value;
var dns2v6 = document.getElementById("dns2v6").value;
var ip4format = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;
var ip6format = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;
var returnstring = "ServerAddresses\n\n";
var dnsOverride = false;
if (ip6format.test(dns1v6)) {
console.log("61valid!");
dnsOverride = true;
returnstring += "" + dns1v6 + "\n";
}
if (ip6format.test(dns2v6)) {
console.log("62valid!");
dnsOverride = true;
returnstring += "" + dns2v6 + "\n";
}
if (ip4format.test(dns1v4)) {
console.log("41valid!");
dnsOverride = true;
returnstring += "" + dns1v4 + "\n";
}
if (ip4format.test(dns2v4)) {
console.log("42valid!");
dnsOverride = true;
returnstring += "" + dns2v4 + "\n";
}
if (dnsOverride) {
returnstring += "\n";
return returnstring;
}
else {
return "";
}
}
function createServerUrl(encValue) {
var returnstring = "";
if (encValue == "HTTPS") {
returnstring = "https://" + document.getElementById("serverUrl").value + "\n";
}
else {
returnstring = document.getElementById("serverUrl").value + "\n";
}
return returnstring;
}
function saveDynamicDataToFile() {
var encryption = document.getElementsByName('encryption');
var encValue = null;
var provName = document.getElementById("provName").value;
for (var i = 0, length = encryption.length; i < length; i++) {
if (encryption[i].checked) {
encValue = encryption[i].value;
// only one radio can be logically checked, don't check the rest
break;
}
}
var fileString = "\n";
fileString += "\n";
fileString += "\n";
fileString += "\n";
fileString += "PayloadContent\n";
fileString += "\n";
fileString += "\n";
fileString += "DNSSettings\n";
fileString += "\n";
fileString += "DNSProtocol\n";
fileString += "" + encValue + "\n";
fileString += getRegDNS();
fileString += "ServerURL\n";
fileString += "" + createServerUrl(encValue);
fileString += "\n";
fileString += "PayloadDescription\n";
fileString += "Configures device to use " + provName + " Encrypted DNS over " + encValue + "\n";
fileString += "PayloadDisplayName\n";
fileString += "" + provName + " DNS over " + encValue + "\n";
fileString += "PayloadIdentifier\n";
fileString += "com.apple.dnsSettings.managed." + uuidv4() + "\n";
fileString += "PayloadType\n";
fileString += "com.apple.dnsSettings.managed\n";
fileString += "PayloadUUID\n";
fileString += "" + uuidv4() + "\n";
fileString += "PayloadVersion\n";
fileString += "1\n";
fileString += "ProhibitDisablement\n";
fileString += "\n";
fileString += "\n";
fileString += "\n";
fileString += "PayloadDescription\n";
fileString += "Adds " + provName + " Encrypted DNS over " + encValue + " to Big Sur and iOS 14 based systems\n";
fileString += "PayloadDisplayName\n" + provName + " DNS over " + encValue + "\n";
fileString += "" + provName + " DNS over " + encValue + "\n";
fileString += "PayloadIdentifier\n";
fileString += "com.notjakob.apple-dns\n";
fileString += "PayloadRemovalDisallowed\n";
fileString += "\n";
fileString += "PayloadType\n";
fileString += "Configuration\n";
fileString += "PayloadUUID\n";
fileString += "" + uuidv4() + "\n";
fileString += "PayloadVersion\n";
fileString += "1\n";
fileString += "\n";
fileString += "";
var blob = new Blob([fileString], { type: "text/plain;charset=utf-8" });
saveAs(blob, "dns.mobileconfig");
//TODO: Premade configs! Fill in fields
//TODO: Check for HTTPS in server field
}
function switchToHTTPS() {
document.getElementById("serverUrl").placeholder = "https://example.com/query" + document.getElementById("serverUrl").value;
document.getElementById("dohdotServerLabel").innerHTML = "DoH server URL:";
}
function switchToTLS() {
document.getElementById("serverUrl").placeholder = "dot.example.com";
document.getElementById("dohdotServerLabel").innerHTML = "DoT server URL:";
}