diff --git a/web_interface/js/attack.js b/web_interface/js/attack.js index 179da9b..6edc414 100644 --- a/web_interface/js/attack.js +++ b/web_interface/js/attack.js @@ -1,33 +1,40 @@ -const attackJSON = [ - [false, 0, 0], - [false, 0, 0], - [false, 0, 0] -]; - -const draw = () => { - getE("deauth").innerHTML = lang(attackJSON[0][0] ? "stop" : "start"); - getE("beacon").innerHTML = lang(attackJSON[1][0] ? "stop" : "start"); - getE("probe").innerHTML = lang(attackJSON[2][0] ? "stop" : "start"); - - getE("deauthTargets").innerHTML = esc(`${attackJSON[0][1]}`); - getE("beaconTargets").innerHTML = esc(`${attackJSON[1][1]}`); - getE("probeTargets").innerHTML = esc(`${attackJSON[2][1]}`); - - getE("deauthPkts").innerHTML = esc(`${attackJSON[0][2]}/${attackJSON[0][3]}`); - getE("beaconPkts").innerHTML = esc(`${attackJSON[1][2]}/${attackJSON[1][3]}`); - getE("probePkts").innerHTML = esc(`${attackJSON[2][2]}/${attackJSON[2][3]}`); - - getE("allpkts").innerHTML = esc(`${attackJSON[3]}`); +var attackJSON = [[false,0,0],[false,0,0],[false,0,0]]; + +function draw(){ + getE("deauth").innerHTML = attackJSON[0][0] ? lang("stop") : lang("start"); + getE("beacon").innerHTML = attackJSON[1][0] ? lang("stop") : lang("start"); + getE("probe").innerHTML = attackJSON[2][0] ? lang("stop") : lang("start"); + + getE("deauthTargets").innerHTML = esc(attackJSON[0][1]+""); + getE("beaconTargets").innerHTML = esc(attackJSON[1][1]+""); + getE("probeTargets").innerHTML = esc(attackJSON[2][1]+""); + + getE("deauthPkts").innerHTML = esc(attackJSON[0][2] + "/" + attackJSON[0][3]); + getE("beaconPkts").innerHTML = esc(attackJSON[1][2] + "/" + attackJSON[1][3]); + getE("probePkts").innerHTML = esc(attackJSON[2][2] + "/" + attackJSON[2][3]); + + getE("allpkts").innerHTML = esc(attackJSON[3]+""); } -const start = (mode) => { - attackJSON[mode][0] = !attackJSON[mode][0]; - - getFile(`run?cmd=attack${attackJSON[0][0] ? " -d":""}${attackJSON[1][0] ? " -b":""}${attackJSON[2][0] ? " -p":""}`, draw); +function start(mode){ + switch(mode){ + case 0: + attackJSON[0][0] = !attackJSON[0][0]; + break; + case 1: + attackJSON[1][0] = !attackJSON[1][0]; + break; + case 2: + attackJSON[2][0] = !attackJSON[2][0]; + break; + } + getFile("run?cmd=attack"+(attackJSON[0][0] ? " -d":"")+(attackJSON[1][0] ? " -b":"")+(attackJSON[2][0] ? " -p":""),function(){ + draw(); + }); } -const load = () => { - getFile("attack.json", (response) => { +function load(){ + getFile("attack.json",function(response){ attackJSON = JSON.parse(response); draw(); }); diff --git a/web_interface/js/scan.js b/web_interface/js/scan.js index ef16f0d..0ed28ef 100644 --- a/web_interface/js/scan.js +++ b/web_interface/js/scan.js @@ -1,167 +1,130 @@ -let nameJson = []; -let scanJson = { - aps: [], - stations: [] -}; - -const drawScan = () => { - let html; - +var nameJson = []; +var scanJson = {aps:[],stations:[]}; + +function drawScan(){ + var html; + var selected; + var width; + var color; + var macVendor; + // Access Points getE("apNum").innerHTML = scanJson.aps.length; - html = ` - - - SSID - Name - Ch - RSSI - Enc - - MAC - Vendor - - - - ` + html = "" + + "" + + "SSID" + + "Name" + + "Ch" + + "RSSI" + + "Enc" + + "" + + "MAC" + + "Vendor" + + "" + + "" + + ""; + + for(var i=0;i { - const selected = item[item.length - 1]; - const width = parseInt(item[3]) + 130; - let color = ''; - - if (width < 50) color = "meter_red"; - else if (width < 70) color = "meter_orange"; + if(width < 50) color = "meter_red"; + else if(width < 70) color = "meter_orange"; else color = "meter_green"; - - html += ` - " : ""}> - ${index} - ${esc(item[0])} - - ${item[1].length > 0 ? esc(item[1]) : ``} - - ${esc(item[2])}" - -
-
-
- item[3] -
-
-
- - ${esc(item[4])} - ${item[4] === "-" ? "" : "🔒"} - ${esc(item[5])} - ${esc(item[6])} - - - - - - - - `; - }) - + + html += (selected ? "" : "") + + ""+i+"" // ID + + ""+esc(scanJson.aps[i][0])+"" // SSID + + ""+(scanJson.aps[i][1].length > 0 ? esc(scanJson.aps[i][1]) : "")+"" // Name + + ""+esc(scanJson.aps[i][2])+"" // Ch + // RSSI + + "
" + scanJson.aps[i][3] + "
" + + ""+esc(scanJson.aps[i][4])+"" // ENC + + ""+(scanJson.aps[i][4] == "-" ? "":"🔒")+"" // Lock Emoji + + ""+esc(scanJson.aps[i][5])+"" // MAC + + ""+esc(scanJson.aps[i][6])+"" // Vendor + // Select + + "" + + "" // Remove + + ""; + } + getE("apTable").innerHTML = html; - + // Stations getE("stNum").innerHTML = scanJson.stations.length; - - html = ` - - - Vendor - MAC - Ch - Name - Pkts - AP - Last seen - - - - `; - - scanJson.stations.forEach((item, index) => { - const selected = item[item.length - 1]; - const ap = item[5] >= 0 ? esc(scanJson.aps[item[5]][0]) : ""; - - html += ` - " : ""}> - ${i} - ${esc(item[3])} - ${esc(item[0])} - ${esc(item[1])} - - ${item[2].length > 0 ? esc(item[2]) : ``} - - ${esc(item[4])} - ${ap} - ${esc(item[6])} - - - - - - - - `; - }) - + html = "" + + "" + + "Vendor" + + "MAC" + + "Ch" + + "Name" + + "Pkts" + + "AP" + + "Last seen" + + "" + + "" + + ""; + + for(var i=0;i= 0) + ap = esc(scanJson.aps[scanJson.stations[i][5]][0]); + + html += (selected ? "" : "") + + ""+i+"" // ID + + ""+esc(scanJson.stations[i][3])+"" // Vendor + + ""+esc(scanJson.stations[i][0])+"" // MAC + + ""+esc(scanJson.stations[i][1])+"" // Ch + + ""+(scanJson.stations[i][2].length > 0 ? esc(scanJson.stations[i][2]) : "")+"" // Name + + ""+esc(scanJson.stations[i][4])+"" // Pkts + + ""+ap+"" // AP + + ""+esc(scanJson.stations[i][6])+"" // Last seen + // Select + + "" + + "" // Remove + + ""; + } + getE("stTable").innerHTML = html; } -const drawNames = () => { +function drawNames(){ + var html; + var selected; + + // Names getE("nNum").innerHTML = nameJson.length; - let html = ` - - - MAC - Vendor - Name - AP-BSSID - Ch - - - - ` - - nameJson.forEach((item, index) => { - const selected = item[item.length - 1]; - - html += ` - " : ""}> - ${index} - ${esc(item[0])} - ${esc(item[1])} - ${esc(item[2].substring(0,16))} - ${esc(item[3])} - ${esc(item[4])} - - - - - - - - - - - `; - }) - + html = "" + + "" + + "MAC" + + "Vendor" + + "Name" + + "AP-BSSID" + + "Ch" + + "" + + "" + + "" + + ""; + + for(var i=0;i" : "") + + ""+i+"" // ID + + ""+esc(nameJson[i][0])+"" // MAC + + ""+esc(nameJson[i][1])+"" // Vendor + + ""+esc(nameJson[i][2].substring(0,16))+"" // Name + + ""+esc(nameJson[i][3])+"" // AP-BSSID + + ""+esc(nameJson[i][4])+"" // Ch + + "" // Save + // Select + + "" + + "" // Remove + + ""; + } + getE("nTable").innerHTML = html; } @@ -203,137 +166,126 @@ function buttonFunc(){ function load(){ // APs and Stations - getFile("run?cmd=save scan", () => - getFile("scan.json", res => { + getFile("run?cmd=save scan", function(){ + getFile("scan.json",function(res){ scanJson = JSON.parse(res); drawScan(); - }) - ); - + }); + }); // Names - getFile("run?cmd=save names", () => - getFile("names.json", res => { + getFile("run?cmd=save names", function(){ + getFile("names.json",function(res){ nameJson = JSON.parse(res); drawNames(); - }) - ); + }); + }); } -const selectRow = (type, id, selected) => { - if (type === 0 || type === 1) { - scanJson.aps[id][7] = selected; - drawScan(); - } else if (type === 2) { - save(id); - nameJson[id][5] = selected; - drawNames(); - } - - switch(type) { +function selectRow(type,id,selected){ + switch(type){ case 0: - return getFile(`run?cmd=${selected ? "" : "de" } select ap ${id}`); - case 1: - return getFile(`run?cmd=${selected ? "" : "de" } select station ${id}`); - case 2: - return getFile(`run?cmd=${selected ? "" : "de" } select name ${id}`); - } -} - -const remove = (type, id) => { - if (type === 0 || type === 1) { - scanJson.aps.splice(id, 1); - drawScan(); - } else if (type === 2) { - nameJson.splice(id, 1); - drawNames(); - } - - switch(type) { - case 0: - getFile(`run?cmd=remove ap ${id}`); + scanJson.aps[id][7] = selected; + drawScan(); + getFile("run?cmd="+(selected ? "":"de")+"select ap "+id); break; case 1: - getFile(`run?cmd=remove station ${id}`); + scanJson.stations[id][7] = selected; + drawScan(); + getFile("run?cmd="+(selected ? "":"de")+"select station "+id); break; case 2: - getFile(`run?cmd=remove name ${id}`); + save(id); + nameJson[id][5] = selected; + drawNames(); + getFile("run?cmd="+(selected ? "":"de")+"select name "+id); } } -const save = id => { - const mac = getE(`name_${id}_mac`).innerHTML.replace("
" ,""); - const name = getE(`name_${id}_name`).innerHTML.replace("
", ""); - const apbssid = getE(`name_${id}_apbssid`).innerHTML.replace("
", ""); - const ch = getE(`name_${id}_ch`).innerHTML.replace("
", ""); - const changed = mac !== nameJson[id][0] || name !== nameJson[id][2] || apbssid !== nameJson[id][3] || ch !== nameJson[id][4]; +function remove(type,id){ + switch(type){ + case 0: + scanJson.aps.splice(id, 1); + drawScan(); + getFile("run?cmd=remove ap "+id); + break; + case 1: + scanJson.stations.splice(id, 1); + drawScan(); + getFile("run?cmd=remove station "+id); + break; + case 2: + nameJson.splice(id, 1); + drawNames(); + getFile("run?cmd=remove name "+id); + } +} - if (changed) { +function save(id){ + var mac = getE("name_"+id+"_mac").innerHTML.replace("
",""); + var name = getE("name_"+id+"_name").innerHTML.replace("
",""); + var apbssid = getE("name_"+id+"_apbssid").innerHTML.replace("
",""); + var ch = getE("name_"+id+"_ch").innerHTML.replace("
",""); + var changed = mac != nameJson[id][0] || name != nameJson[id][2] || apbssid != nameJson[id][3] || ch != nameJson[id][4]; + if(changed){ nameJson[id][0] = mac; nameJson[id][2] = name; nameJson[id][3] = apbssid; nameJson[id][4] = ch; - - if (nameJson[id][0].length !== 17) { - return showMessage("ERROR: MAC invalid"); + + if(nameJson[id][0].length != 17){ + showMessage("ERROR: MAC invalid"); + return; } - - getFile(`run?cmd=replace name ${id} -n "${nameJson[id][2]}" -m "${nameJson[id][0]}" -ch ${nameJson[id][4]} -b "${nameJson[id][3]}" ${nameJson[id][5] ? "-s" : ""}`); - + + getFile("run?cmd=replace name "+id+" -n \""+nameJson[id][2]+"\" -m \""+nameJson[id][0]+"\" -ch "+nameJson[id][4]+" -b \""+nameJson[id][3]+"\" "+(nameJson[id][5] ? "-s" : "")); + drawNames(); } } -const add = (type, id) => { +function add(type,id){ if(nameJson.length >= 25){ - return showMessage("Device Name List is full!"); - } - - switch(type) { + showMessage("Device Name List is full!"); + return; + } + + switch(type){ case 0: - getFile(`run?cmd=add name "${scanJson.aps[id][0]}" -ap ${id}`); + getFile("run?cmd=add name \""+scanJson.aps[id][0]+"\" -ap "+id); scanJson.aps[id][1] = scanJson.aps[id][0]; // name = SSID - nameJson.push([scanJson.aps[id][5], scanJson.aps[id][6], scanJson.aps[id][0], "", scanJson.aps[id][2], false]); + nameJson.push([scanJson.aps[id][5],scanJson.aps[id][6],scanJson.aps[id][0],"",scanJson.aps[id][2],false]); drawScan(); break; case 1: - getFile(`run?cmd=add name "${scanJson.stations[id][0]}" station ${id}`); - scanJson.stations[id][2] = `device_${nameJson.length}`; // name = device_ - nameJson.push([scanJson.stations[id][0], scanJson.stations[id][3], `device_${nameJson.length}`, scanJson.aps[scanJson.stations[id][5]][5], scanJson.stations[id][1], false]); + getFile("run?cmd=add name \""+scanJson.stations[id][0]+"\" station "+id); + scanJson.stations[id][2] = "device_"+nameJson.length; // name = device_ + nameJson.push([scanJson.stations[id][0],scanJson.stations[id][3],"device_"+nameJson.length,scanJson.aps[scanJson.stations[id][5]][5],scanJson.stations[id][1],false]); drawScan(); break; case 2: - getFile(`run?cmd=add name device_${nameJson.length} -m 00:00:00:00:00:00 -ch 1`); - nameJson.push(["00:00:00:00:00:00", "", `device_${nameJson.length}`, "", 1, false]); + getFile("run?cmd=add name device_"+nameJson.length+" -m 00:00:00:00:00:00 -ch 1"); + nameJson.push(["00:00:00:00:00:00","","device_"+nameJson.length,"",1,false]); drawNames(); } - + drawNames(); } -const selectAll = (type, select) => { - switch(type) { +function selectAll(type,select){ + switch(type){ case 0: - getFile(`run?cmd=${select ? "" : "de"}select aps`); - scanJson.aps.forEach(item => { - item[7] = select; - return item - }) + getFile("run?cmd="+(select ? "":"de")+"select aps"); + for(var i=0;i { - item[7] = select; - return item - }) + getFile("run?cmd="+(select ? "":"de")+"select stations"); + for(var i=0;i { - item[5] = select; - return item - }) + getFile("run?cmd="+(select ? "":"de")+"select names"); + for(var i=0;i { - getFile("settings.json", res => { +function load(){ + getFile("settings.json",function(res){ settingsJson = JSON.parse(res); draw(); }); } -const draw = () => { - let html = ""; - +function draw(){ + var html = ""; for (var key in settingsJson) { key = esc(key); - if (settingsJson.hasOwnProperty(key)) { html += "
" + "
" @@ -41,11 +39,13 @@ const draw = () => { getE("settingsList").innerHTML = html; } -const save = (key, value) => { - if (key) { +function save(key, value){ + if(key){ settingsJson[key] = value; - getFile(`run?cmd=set ${key} "${value}"`); - } else { - getFile("run?cmd=save settings", load); + getFile("run?cmd=set "+key+" \""+value+"\""); + }else{ + getFile("run?cmd=save settings",function(res){ + load(); + }); } } \ No newline at end of file diff --git a/web_interface/js/site.js b/web_interface/js/site.js index 00b552a..54665e7 100644 --- a/web_interface/js/site.js +++ b/web_interface/js/site.js @@ -1,113 +1,118 @@ -let langJson = {}; +var langJson = {}; -const getE = (name) => document.getElementById(name); +function getE(name){ + return document.getElementById(name); +} -const esc = str => { - if (str) { +function esc(str) { + if(str){ return str.toString() - .replace(/&/g, "&") - .replace(//g, ">") - .replace(/\"/g, """) - .replace(/\'/g, "'") - .replace(/\//g, "/"); + .replace(/&/g, '&') + .replace(//g, '>') + .replace(/\"/g, '"') + .replace(/\'/g, ''') + .replace(/\//g, '/'); } - return ""; } -const convertLineBreaks = str => { - if (str) { +function convertLineBreaks(str){ + if(str){ str = str.toString(); - str = str.replace(/(?:\r\n|\r|\n)/g, '
'); + str = str.replace(/(?:\r\n|\r|\n)/g,'
'); return str; } - return ""; } -const showMessage = (msg, closeAfter) => { - const elmt = getE("error"); - elmt.innerHTML = `${esc(msg)}x`; - - elmt.classList.remove("hide"); - elmt.classList.add("show"); +function showMessage(msg, closeAfter){ + var elmt = getE("error"); + elmt.innerHTML = esc(msg)+"x"; + + elmt.classList.remove('hide'); + elmt.classList.add('show'); if(closeAfter !== undefined){ - setTimeout(closeMessage, closeAfter); + setTimeout(closeMessage(),closeAfter); } } -const closeMessage = () => { - const elmt = getE("error"); - +function closeMessage(){ + var elmt = getE("error"); elmt.innerHTML = ""; - elmt.classList.remove("show"); - elmt.classList.add("hide"); + elmt.classList.remove('show'); + elmt.classList.add('hide'); } -const getFile = ( - adr, - callback = () => undefined, - timeout = 8000, - method = "GET", - onTimeout = showMessage(`ERROR: timeout loading file ${adr}`), - onError = showMessage(`ERROR: loading file: ${adr}`) -) => { +function getFile(adr, callback, timeout, method, onTimeout, onError){ /* fallback stuff */ if(adr === undefined) return; - + if(callback === undefined) callback = function(){}; + if(timeout === undefined) timeout = 8000; + if(method === undefined) method = "GET"; + if(onTimeout === undefined) { + onTimeout = function(){ + showMessage("ERROR: timeout loading file "+adr); + }; + } + if(onError === undefined){ + onError = function(){ + showMessage("ERROR: loading file: "+adr); + }; + } + /* create request */ - const request = new XMLHttpRequest(); - + var request = new XMLHttpRequest(); + /* set parameter for request */ request.open(method, encodeURI(adr), true); request.timeout = timeout; request.ontimeout = onTimeout; - request.onerror = onError; + request.onerror = onError; request.overrideMimeType("application/json"); - - request.onreadystatechange = () => { - if (this.readyState == 4 && this.status == 200) { - callback(this.responseText); + + request.onreadystatechange = function() { + if(this.readyState == 4){ + if(this.status == 200){ + callback(this.responseText); + } } }; - + /* send request */ request.send(); - + console.log(adr); } -const lang = key => convertLineBreaks(esc(langJson[key])); +function lang(key){ + return convertLineBreaks(esc(langJson[key])); +} -const parseLang = fileStr => { +function parseLang(fileStr){ langJson = JSON.parse(fileStr); - - if (langJson["lang"] !== "en") { - // no need to update the HTML - const elements = document.querySelectorAll("[data-translate]"); - - [...elements].forEach(item => { - item.innerHTML = lang(element.getAttribute("data-translate")); - }) + if(langJson["lang"] != "en"){// no need to update the HTML + var elements = document.querySelectorAll("[data-translate]"); + for (i = 0; i < elements.length; i++) { + var element = elements[i]; + element.innerHTML = lang(element.getAttribute("data-translate")); + } } - - document.querySelector('html').setAttribute("lang", langJson["lang"]); - + document.querySelector('html').setAttribute("lang", langJson["lang"] ); if(typeof load !== 'undefined') load(); } -const loadLang = () => { - const language = "default"; //navigator.language.slice(0, 2); - const langFunc = () => getFile("lang/en.lang", parseLang); - - getFile( - `lang/${language}.lang`, - parseLang, +function loadLang(){ + var language = "default"; //navigator.language.slice(0, 2); + getFile("lang/" + language + ".lang", + parseLang, 2000, "GET", - langFunc, - langFunc + function(){ + getFile("lang/en.lang", parseLang); + }, function(){ + getFile("lang/en.lang", parseLang); + } ); } diff --git a/web_interface/js/ssids.js b/web_interface/js/ssids.js index 0d44be1..dd2ac32 100644 --- a/web_interface/js/ssids.js +++ b/web_interface/js/ssids.js @@ -1,111 +1,105 @@ -let ssidJson = { - "random": false, - "ssids": [] -}; - -const load = () => { - getFile("run?cmd=save ssids", () => - getFile("ssids.json", res => { +var ssidJson = {"random":false,"ssids":[]}; + +function load(){ + getFile("run?cmd=save ssids", function(){ + getFile("ssids.json",function(res){ ssidJson = JSON.parse(res); draw(); - }) - ); + }); + }); } -const draw = () => { - let html = ` - - - - - - - - `; - - ssidJson.ssids.map((item, i) => { - html += ` - - ${i} - ${esc(ssidJson.ssids[i][0].substring(0, ssidJson.ssids[i][2]))} - ${ssidJson.ssids[i][1] ? "🔒" : "-"} - - - - - - - - `; - }) - - getE("randomBtn").innerHTML = lang(ssidJson.random ? "disable_random" : "enable_random"); +function draw(){ + var html; + + html = "" + + "" + + "" + + "" + + "" + + "" + + ""; + + for(var i=0;i"+i+"" // ID + + ""+esc(ssidJson.ssids[i][0].substring(0,ssidJson.ssids[i][2]))+"" // SSID + + ""+(ssidJson.ssids[i][1] ? "🔒" : "-")+"" // Enc + + "" // Save + + "" // Remove + + ""; + } + + getE("randomBtn").innerHTML = ssidJson.random ? lang("disable_random") : lang("enable_random"); + getE("ssidTable").innerHTML = html; } -const remove = id => { +function remove(id){ ssidJson.ssids.splice(id, 1); - getFile(`run?cmd=remove ssid ${id}`); + getFile("run?cmd=remove ssid "+id); draw(); } -const add = () => { - const ssidStr = getE("ssid").value; - - if (ssidStr.length > 0) { - const wpa2 = getE("enc").checked; - const clones = getE("ssidNum").value; - const force = getE("overwrite").checked; - - const cmdStr = `add ssid "${ssidStr}" ${force ? "-f" : ""} -cl ${clones} ${wpa2 ? -wpa2 : ""}`; - - getFile(`run?cmd=${cmdStr}`); - - for (let i = 0; i < clones; i++) { - if (ssidJson.ssids.length >= 60) ssidJson.ssids.splice(0,1); - ssidJson.ssids.push([ssidStr, wpa2]); +function add(){ + var ssidStr = getE("ssid").value; + var wpa2 = getE("enc").checked; + var clones = getE("ssidNum").value; + var force = getE("overwrite").checked; + + if(ssidStr.length > 0){ + var cmdStr = "add ssid \""+ssidStr+"\""+(force ? " -f":" ")+" -cl "+clones; + if(wpa2) cmdStr += " -wpa2"; + + getFile("run?cmd="+cmdStr); + + for(var i=0;i= 60) ssidJson.ssids.splice(0,1); + ssidJson.ssids.push([ssidStr,wpa2]); } - + draw(); } } -const enableRandom = () => { - if (ssidJson.random) { - getFile("run?cmd=disable random", load); - } else { - getFile(`run?cmd=enable random ${getE("interval").value}`, load); +function enableRandom(){ + if(ssidJson.random){ + getFile("run?cmd=disable random",function(){ + load(); + }); + }else{ + getFile("run?cmd=enable random "+getE("interval").value,function(){ + load(); + }); } - + } -const disableRandom = () => { - +function disableRandom(){ + } -const addSelected = () => { - getFile(`run?cmd=add ssid -s ${getE("overwrite").checked ? "-f":""}`); +function addSelected(){ + getFile("run?cmd=add ssid -s"+(getE("overwrite").checked ? " -f":"")); } -const changeEnc = id => { +function changeEnc(id){ ssidJson.ssids[id][1] = !ssidJson.ssids[id][1]; - draw(); save(id); } -const removeAll = () => { +function removeAll(){ ssidJson.ssids = []; - getFile("run?cmd=remove ssids"); draw(); } -const save = id => { - const name = getE(`ssid_${id}`).innerHTML.replace("
", "").substring(0, 32); - const wpa2 = ssidJson.ssids[id][1]; - ssidJson.ssids[id] = [name, wpa2]; - - getFile(`run?cmd=replace ssid ${id} -n "${name}" ${wpa2 ? "-wpa2" : ""}`); +function save(id){ + var name = getE("ssid_"+id).innerHTML.replace("
","").substring(0,32); + var wpa2 = ssidJson.ssids[id][1]; + ssidJson.ssids[id] = [name,wpa2]; + + getFile("run?cmd=replace ssid "+id+" -n \""+name+"\" "+(wpa2 ? "-wpa2" : "")); }