dns-mobileconfig/js/tool.js
2021-11-12 17:47:00 +01:00

158 lines
No EOL
6.8 KiB
JavaScript

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;
});
}
});
}