diff --git a/web_interface/js/attack.js b/web_interface/js/attack.js
index 6edc414..d9303b7 100644
--- a/web_interface/js/attack.js
+++ b/web_interface/js/attack.js
@@ -1,40 +1,38 @@
-var attackJSON = [[false,0,0],[false,0,0],[false,0,0]];
-
-function draw(){
+const attackJSON = [
+ [false, 0, 0],
+ [false, 0, 0],
+ [false, 0, 0]
+];
+
+const 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]+"");
+
+ 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]}`);
}
-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 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 load(){
- getFile("attack.json",function(response){
+const load = () => {
+ getFile("attack.json", (response) => {
attackJSON = JSON.parse(response);
draw();
});
diff --git a/web_interface/js/scan.js b/web_interface/js/scan.js
index eb4b8f1..2ea298f 100644
--- a/web_interface/js/scan.js
+++ b/web_interface/js/scan.js
@@ -1,13 +1,16 @@
-var nameJson = [];
-var scanJson = {aps:[],stations:[]};
-
-function drawScan(){
- var html;
- var selected;
- var width;
- var color;
- var macVendor;
-
+let nameJson = [];
+let scanJson = {
+ aps: [],
+ stations: []
+};
+
+const drawScan = () => {
+ let html;
+ let selected;
+ let width;
+ let color;
+ let macVendor;
+
// Access Points
getE("apNum").innerHTML = scanJson.aps.length;
html = "
"
@@ -23,7 +26,7 @@ function drawScan(){
+ " | "
+ " | "
+ "
";
-
+
for(var i=0;i" : "")
+ "| "+i+" | " // ID
+ ""+esc(scanJson.aps[i][0])+" | " // SSID
@@ -48,9 +51,9 @@ function drawScan(){
+ " | " // Remove
+ "
";
}
-
+
getE("apTable").innerHTML = html;
-
+
// Stations
getE("stNum").innerHTML = scanJson.stations.length;
html = ""
@@ -65,13 +68,13 @@ function drawScan(){
+ " | "
+ " | "
+ "
";
-
+
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
@@ -86,14 +89,14 @@ function drawScan(){
+ " | " // Remove
+ "
";
}
-
+
getE("stTable").innerHTML = html;
}
function drawNames(){
var html;
var selected;
-
+
// Names
getE("nNum").innerHTML = nameJson.length;
html = ""
@@ -107,10 +110,10 @@ function drawNames(){
+ " | "
+ " | "
+ "
";
-
+
for(var i=0;i" : "")
+ "| "+i+" | " // ID
+ ""+esc(nameJson[i][0])+" | " // MAC
@@ -124,10 +127,10 @@ function drawNames(){
+ " | " // Remove
+ "
";
}
-
+
getE("nTable").innerHTML = html;
}
-
+
function scan(type){
var cmdStr = "scan "
+ (type == 0 ? "aps " : "stations -t "+getE("scanTime").value+"s")
@@ -202,14 +205,14 @@ function save(id){
nameJson[id][2] = name;
nameJson[id][3] = apbssid;
nameJson[id][4] = ch;
-
+
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" : ""));
-
+
drawNames();
}
}
@@ -218,8 +221,8 @@ function add(type,id){
if(nameJson.length >= 25){
showMessage("Device Name List is full!");
return;
- }
-
+ }
+
switch(type){
case 0:
getFile("run?cmd=add name \""+scanJson.aps[id][0]+"\" -ap "+id);
@@ -238,7 +241,7 @@ function add(type,id){
nameJson.push(["00:00:00:00:00:00","","device_"+nameJson.length,"",1,false]);
drawNames();
}
-
+
drawNames();
}
diff --git a/web_interface/js/settings.js b/web_interface/js/settings.js
index 5fc77f8..a9ff020 100644
--- a/web_interface/js/settings.js
+++ b/web_interface/js/settings.js
@@ -1,51 +1,61 @@
-var settingsJson = {};
+let settingsJson = {};
-function load(){
- getFile("settings.json",function(res){
+const load = () => {
+ getFile("settings.json", res => {
settingsJson = JSON.parse(res);
draw();
});
}
-function draw(){
- var html = "";
+const draw = () => {
+ let html = "";
+
for (var key in settingsJson) {
key = esc(key);
+
if (settingsJson.hasOwnProperty(key)) {
- html += ""
- + ""
- + "
"
- + "
"+lang("setting_"+key)+"
"
- + "
"
- + "
"
- + "
";
+ html += `
+
+
+
+
${lang("setting_"+key)}
+
+
+
+ `;
}
}
getE("settingsList").innerHTML = html;
}
-function save(key, value){
- if(key){
+const save = (key, value) => {
+ if (key) {
settingsJson[key] = value;
- getFile("run?cmd=set "+key+" \""+value+"\"");
- }else{
- getFile("run?cmd=save settings",function(res){
- load();
- });
+ getFile(`run?cmd=set ${key} "${value}"`);
+ } else {
+ getFile("run?cmd=save settings", load);
}
}
\ No newline at end of file
diff --git a/web_interface/js/site.js b/web_interface/js/site.js
index 54665e7..1ca6644 100644
--- a/web_interface/js/site.js
+++ b/web_interface/js/site.js
@@ -1,118 +1,113 @@
-var langJson = {};
+let langJson = {};
-function getE(name){
- return document.getElementById(name);
-}
+const getE = (name) => document.getElementById(name);
-function esc(str) {
- if(str){
+const 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 "";
}
-function convertLineBreaks(str){
- if(str){
+const 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 "";
}
-function showMessage(msg, closeAfter){
- var elmt = getE("error");
- elmt.innerHTML = esc(msg)+"x";
-
- elmt.classList.remove('hide');
- elmt.classList.add('show');
+const showMessage = (msg, closeAfter) => {
+ const 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);
}
}
-function closeMessage(){
- var elmt = getE("error");
+const closeMessage = () => {
+ const elmt = getE("error");
+
elmt.innerHTML = "";
- elmt.classList.remove('show');
- elmt.classList.add('hide');
+ elmt.classList.remove("show");
+ elmt.classList.add("hide");
}
-function getFile(adr, callback, timeout, method, onTimeout, onError){
+const getFile = (
+ adr,
+ callback = () => undefined,
+ timeout = 8000,
+ method = "GET",
+ onTimeout = showMessage(`ERROR: timeout loading file ${adr}`),
+ onError = showMessage(`ERROR: loading file: ${adr}`)
+) => {
/* 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 */
- var request = new XMLHttpRequest();
-
+ const 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 = function() {
- if(this.readyState == 4){
- if(this.status == 200){
- callback(this.responseText);
- }
+
+ request.onreadystatechange = () => {
+ if (this.readyState == 4 && this.status == 200) {
+ callback(this.responseText);
}
};
-
+
/* send request */
request.send();
-
+
console.log(adr);
}
-function lang(key){
- return convertLineBreaks(esc(langJson[key]));
-}
+const lang = key => convertLineBreaks(esc(langJson[key]));
-function parseLang(fileStr){
+const parseLang = fileStr => {
langJson = JSON.parse(fileStr);
- 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"));
- }
+
+ 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"));
+ })
}
- document.querySelector('html').setAttribute("lang", langJson["lang"] );
+
+ document.querySelector('html').setAttribute("lang", langJson["lang"]);
+
if(typeof load !== 'undefined') load();
}
-function loadLang(){
- var language = "default"; //navigator.language.slice(0, 2);
- getFile("lang/" + language + ".lang",
- parseLang,
+const loadLang = () => {
+ const language = "default"; //navigator.language.slice(0, 2);
+ const langFunc = () => getFile("lang/en.lang", parseLang);
+
+ getFile(
+ `lang/${language}.lang`,
+ parseLang,
2000,
"GET",
- function(){
- getFile("lang/en.lang", parseLang);
- }, function(){
- getFile("lang/en.lang", parseLang);
- }
+ langFunc,
+ langFunc
);
}
diff --git a/web_interface/js/ssids.js b/web_interface/js/ssids.js
index dd2ac32..befd9f4 100644
--- a/web_interface/js/ssids.js
+++ b/web_interface/js/ssids.js
@@ -1,105 +1,112 @@
-var ssidJson = {"random":false,"ssids":[]};
-
-function load(){
- getFile("run?cmd=save ssids", function(){
- getFile("ssids.json",function(res){
+let ssidJson = {
+ "random": false,
+ "ssids": []
+};
+
+const load = () => {
+ getFile("run?cmd=save ssids", () =>
+ getFile("ssids.json", res => {
ssidJson = JSON.parse(res);
draw();
- });
- });
+ })
+ );
}
-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");
-
+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");
getE("ssidTable").innerHTML = html;
}
-function remove(id){
+const remove = id => {
ssidJson.ssids.splice(id, 1);
- getFile("run?cmd=remove ssid "+id);
+ getFile(`run?cmd=remove ssid ${id}`);
draw();
}
-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]);
+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]);
}
-
+
draw();
}
}
-function enableRandom(){
- if(ssidJson.random){
- getFile("run?cmd=disable random",function(){
- load();
- });
- }else{
- getFile("run?cmd=enable random "+getE("interval").value,function(){
- load();
- });
+const enableRandom = () => {
+ if (ssidJson.random) {
+ getFile("run?cmd=disable random", load);
+ } else {
+ getFile(`run?cmd=enable random ${getE("interval").value}`, load);
}
-
+
}
-function disableRandom(){
-
+const disableRandom = () => {
+
}
-function addSelected(){
- getFile("run?cmd=add ssid -s"+(getE("overwrite").checked ? " -f":""));
+const addSelected = () => {
+ getFile(`run?cmd=add ssid -s ${getE("overwrite").checked ? "-f":""}`);
}
-function changeEnc(id){
+const changeEnc = id => {
ssidJson.ssids[id][1] = !ssidJson.ssids[id][1];
+
draw();
save(id);
}
-function removeAll(){
+const removeAll = () => {
ssidJson.ssids = [];
+
getFile("run?cmd=remove ssids");
draw();
}
-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" : ""));
+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" : ""}`);
}