function getCookie(cname) { var name = cname + "="; var decodedCookie = decodeURIComponent(document.cookie); var ca = decodedCookie.split(';'); for (var i = 0; i < ca.length; i++) { var c = ca[i]; while (c.charAt(0) == ' ') { c = c.substring(1); } if (c.indexOf(name) == 0) { return c.substring(name.length, c.length); } } return ""; } function addToList() { if (document.getElementById("serverUrl").value.includes(":")) { alert("Entering custom ports (e.g. :853) is not supported. Please remove it."); } else { var runningNo = getCookie("runningNo"); if (getCookie("runningNo") == "") { runningNo = 0; } var d = new Date(); d.setTime(d.getTime() + (86400000)); //expires in 24h var expires = "expires="+ d.toUTCString(); document.cookie = runningNo + "provName=" + encodeURIComponent(document.getElementById("provName").value) + ";" + expires + ";path=/; SameSite=Strict; Secure"; document.cookie = runningNo + "doh=" + document.getElementById("doh").checked + ";" + expires + ";path=/; SameSite=Strict; Secure"; document.cookie = runningNo + "dns1v4=" + document.getElementById("dns1v4").value + ";" + expires + ";path=/; SameSite=Strict; Secure"; document.cookie = runningNo + "dns2v4=" + document.getElementById("dns2v4").value + ";" + expires + ";path=/; SameSite=Strict; Secure"; document.cookie = runningNo + "dns1v6=" + document.getElementById("dns1v6").value + ";" + expires + ";path=/; SameSite=Strict; Secure"; document.cookie = runningNo + "dns2v6=" + document.getElementById("dns2v6").value + ";" + expires + ";path=/; SameSite=Strict; Secure"; document.cookie = runningNo + "serverUrl=" + document.getElementById("serverUrl").value + ";" + expires + ";path=/; SameSite=Strict; Secure"; document.cookie = runningNo + "exclWifi=" + encodeURIComponent(document.getElementById("exclWifi").value) + ";" + expires + ";path=/; SameSite=Strict; Secure"; document.cookie = runningNo + "useWifi=" + document.getElementById("useWifi").checked + ";" + expires + ";path=/; SameSite=Strict; Secure"; document.cookie = runningNo + "useCell=" + document.getElementById("useCell").checked + ";" + expires + ";path=/; SameSite=Strict; Secure"; document.cookie = runningNo + "lockProfile=" + document.getElementById("lockProfile").checked + ";" + expires + ";path=/; SameSite=Strict; Secure"; runningNo = runningNo + 1; document.cookie = "runningNo=" + runningNo + ";" + expires + ";path=/; SameSite=Strict; Secure"; window.location.href = "finalize.html"; } } 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:"; } function accordion() { var adv = document.getElementById("advanced_container"); if (adv.className.indexOf("w3-show") == -1) { adv.className += " w3-show"; adv.previousElementSibling.className = adv.previousElementSibling.className.replace("w3-dark-grey", "w3-black"); } else { adv.className = adv.className.replace(" w3-show", ""); adv.previousElementSibling.className = adv.previousElementSibling.className.replace("w3-black", "w3-dark-grey"); } } function getDataFromUpload() { const selectedFile = document.getElementById('fileupload').files[0]; var read = new FileReader(); read.addEventListener("load", () => { // this will save file to string handleProfileText(read.result); }, false); if (selectedFile) { read.readAsText(selectedFile); } } function handleProfileText(uploadedProfile) { var profile = plist.parse(uploadedProfile); console.log(profile); //Name document.getElementById("provName").value = profile.PayloadDisplayName; //Protocol and URL/ServerName if (profile.PayloadContent[0].DNSSettings.DNSProtocol == "HTTPS") { document.getElementById("doh").checked = true; document.getElementById("serverUrl").value = profile.PayloadContent[0].DNSSettings.ServerURL; } else if(profile.PayloadContent[0].DNSSettings.DNSProtocol == "TLS") { document.getElementById("dot").checked = true; document.getElementById("serverUrl").value = profile.PayloadContent[0].DNSSettings.ServerName; } //ServerAddresses, if applicable const serverAddresses = profile.PayloadContent[0].DNSSettings.ServerAddresses; if (serverAddresses) { var dns4count = 0; var dns6count = 0; for (let index = 0; index < serverAddresses.length; index++) { if (serverAddresses[index].includes(":")) { if (dns6count == 0) { document.getElementById("dns1v6").value = serverAddresses[index]; } else { document.getElementById("dns2v6").value = serverAddresses[index]; } dns6count++; } else if (serverAddresses[index].includes(".")) { if (dns4count == 0) { document.getElementById("dns1v4").value = serverAddresses[index]; } else { document.getElementById("dns2v4").value = serverAddresses[index]; } dns4count++; } } } //Profile locked? document.getElementById("lockProfile").checked = profile.PayloadContent[0].ProhibitDisablement; //Allow Wi-Fi and Cellular, check for excluded SSIDs profile.PayloadContent[0].OnDemandRules.forEach(rule => { if (rule.InterfaceTypeMatch == "WiFi") { if (rule.Action == "Connect") { document.getElementById("useWifi").checked = true; } else { document.getElementById("useWifi").checked = false; } } else if (rule.InterfaceTypeMatch == "Cellular") { if (rule.Action == "Connect") { document.getElementById("useCell").checked = true; } else { document.getElementById("useCell").checked = false; } } else if (rule.SSIDMatch) { rule.SSIDMatch.forEach(ssid => { if (document.getElementById("exclWifi").value != "") { document.getElementById("exclWifi").value += ", " } document.getElementById("exclWifi").value += ssid; }); } }); }