mirror of
https://github.com/SpacehuhnTech/esp8266_deauther.git
synced 2025-12-11 17:19:58 +01:00
feat(web_interface): js refactor
This commit is contained in:
@@ -1,40 +1,38 @@
|
|||||||
var attackJSON = [[false,0,0],[false,0,0],[false,0,0]];
|
const attackJSON = [
|
||||||
|
[false, 0, 0],
|
||||||
function draw(){
|
[false, 0, 0],
|
||||||
|
[false, 0, 0]
|
||||||
|
];
|
||||||
|
|
||||||
|
const draw = () => {
|
||||||
getE("deauth").innerHTML = attackJSON[0][0] ? lang("stop") : lang("start");
|
getE("deauth").innerHTML = attackJSON[0][0] ? lang("stop") : lang("start");
|
||||||
getE("beacon").innerHTML = attackJSON[1][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("probe").innerHTML = attackJSON[2][0] ? lang("stop") : lang("start");
|
||||||
|
|
||||||
getE("deauthTargets").innerHTML = esc(attackJSON[0][1]+"");
|
getE("deauthTargets").innerHTML = esc(`${attackJSON[0][1]}`);
|
||||||
getE("beaconTargets").innerHTML = esc(attackJSON[1][1]+"");
|
getE("beaconTargets").innerHTML = esc(`${attackJSON[1][1]}`);
|
||||||
getE("probeTargets").innerHTML = esc(attackJSON[2][1]+"");
|
getE("probeTargets").innerHTML = esc(`${attackJSON[2][1]}`);
|
||||||
|
|
||||||
getE("deauthPkts").innerHTML = esc(attackJSON[0][2] + "/" + attackJSON[0][3]);
|
getE("deauthPkts").innerHTML = esc(`${attackJSON[0][2]}/${attackJSON[0][3]}`);
|
||||||
getE("beaconPkts").innerHTML = esc(attackJSON[1][2] + "/" + attackJSON[1][3]);
|
getE("beaconPkts").innerHTML = esc(`${attackJSON[1][2]}/${attackJSON[1][3]}`);
|
||||||
getE("probePkts").innerHTML = esc(attackJSON[2][2] + "/" + attackJSON[2][3]);
|
getE("probePkts").innerHTML = esc(`${attackJSON[2][2]}/${attackJSON[2][3]}`);
|
||||||
|
|
||||||
getE("allpkts").innerHTML = esc(attackJSON[3]+"");
|
getE("allpkts").innerHTML = esc(`${attackJSON[3]}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
function start(mode){
|
const start = (mode) => {
|
||||||
switch(mode){
|
attackJSON[mode][0] = !attackJSON[mode][0];
|
||||||
case 0:
|
|
||||||
attackJSON[0][0] = !attackJSON[0][0];
|
getFile(
|
||||||
break;
|
`run?cmd=attack${attackJSON[0][0] ? " -d":""}${attackJSON[1][0] ? " -b":""}${attackJSON[2][0] ? " -p":""}`,
|
||||||
case 1:
|
() => {
|
||||||
attackJSON[1][0] = !attackJSON[1][0];
|
draw();
|
||||||
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();
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function load(){
|
const load = () => {
|
||||||
getFile("attack.json",function(response){
|
getFile("attack.json", (response) => {
|
||||||
attackJSON = JSON.parse(response);
|
attackJSON = JSON.parse(response);
|
||||||
draw();
|
draw();
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,13 +1,16 @@
|
|||||||
var nameJson = [];
|
let nameJson = [];
|
||||||
var scanJson = {aps:[],stations:[]};
|
let scanJson = {
|
||||||
|
aps: [],
|
||||||
function drawScan(){
|
stations: []
|
||||||
var html;
|
};
|
||||||
var selected;
|
|
||||||
var width;
|
const drawScan = () => {
|
||||||
var color;
|
let html;
|
||||||
var macVendor;
|
let selected;
|
||||||
|
let width;
|
||||||
|
let color;
|
||||||
|
let macVendor;
|
||||||
|
|
||||||
// Access Points
|
// Access Points
|
||||||
getE("apNum").innerHTML = scanJson.aps.length;
|
getE("apNum").innerHTML = scanJson.aps.length;
|
||||||
html = "<tr>"
|
html = "<tr>"
|
||||||
@@ -23,7 +26,7 @@ function drawScan(){
|
|||||||
+ "<th class='selectColumn'></th>"
|
+ "<th class='selectColumn'></th>"
|
||||||
+ "<th class='remove'></th>"
|
+ "<th class='remove'></th>"
|
||||||
+ "</tr>";
|
+ "</tr>";
|
||||||
|
|
||||||
for(var i=0;i<scanJson.aps.length;i++){
|
for(var i=0;i<scanJson.aps.length;i++){
|
||||||
selected = scanJson.aps[i][scanJson.aps[i].length-1];
|
selected = scanJson.aps[i][scanJson.aps[i].length-1];
|
||||||
width = parseInt(scanJson.aps[i][3]) + 130;
|
width = parseInt(scanJson.aps[i][3]) + 130;
|
||||||
@@ -31,7 +34,7 @@ function drawScan(){
|
|||||||
if(width < 50) color = "meter_red";
|
if(width < 50) color = "meter_red";
|
||||||
else if(width < 70) color = "meter_orange";
|
else if(width < 70) color = "meter_orange";
|
||||||
else color = "meter_green";
|
else color = "meter_green";
|
||||||
|
|
||||||
html += (selected ? "<tr class='selected'>" : "<tr>")
|
html += (selected ? "<tr class='selected'>" : "<tr>")
|
||||||
+ "<td class='id'>"+i+"</td>" // ID
|
+ "<td class='id'>"+i+"</td>" // ID
|
||||||
+ "<td class='ssid'>"+esc(scanJson.aps[i][0])+"</td>" // SSID
|
+ "<td class='ssid'>"+esc(scanJson.aps[i][0])+"</td>" // SSID
|
||||||
@@ -48,9 +51,9 @@ function drawScan(){
|
|||||||
+ "<td class='remove'><button class='red' onclick='remove(0,"+i+")'>X</button></td>" // Remove
|
+ "<td class='remove'><button class='red' onclick='remove(0,"+i+")'>X</button></td>" // Remove
|
||||||
+ "</tr>";
|
+ "</tr>";
|
||||||
}
|
}
|
||||||
|
|
||||||
getE("apTable").innerHTML = html;
|
getE("apTable").innerHTML = html;
|
||||||
|
|
||||||
// Stations
|
// Stations
|
||||||
getE("stNum").innerHTML = scanJson.stations.length;
|
getE("stNum").innerHTML = scanJson.stations.length;
|
||||||
html = "<tr>"
|
html = "<tr>"
|
||||||
@@ -65,13 +68,13 @@ function drawScan(){
|
|||||||
+ "<th class='selectColumn'></th>"
|
+ "<th class='selectColumn'></th>"
|
||||||
+ "<th class='remove'></th>"
|
+ "<th class='remove'></th>"
|
||||||
+ "</tr>";
|
+ "</tr>";
|
||||||
|
|
||||||
for(var i=0;i<scanJson.stations.length;i++){
|
for(var i=0;i<scanJson.stations.length;i++){
|
||||||
selected = scanJson.stations[i][scanJson.stations[i].length-1];
|
selected = scanJson.stations[i][scanJson.stations[i].length-1];
|
||||||
ap = "";
|
ap = "";
|
||||||
if(scanJson.stations[i][5] >= 0)
|
if(scanJson.stations[i][5] >= 0)
|
||||||
ap = esc(scanJson.aps[scanJson.stations[i][5]][0]);
|
ap = esc(scanJson.aps[scanJson.stations[i][5]][0]);
|
||||||
|
|
||||||
html += (selected ? "<tr class='selected'>" : "<tr>")
|
html += (selected ? "<tr class='selected'>" : "<tr>")
|
||||||
+ "<td class='id'>"+i+"</td>" // ID
|
+ "<td class='id'>"+i+"</td>" // ID
|
||||||
+ "<td class='vendor'>"+esc(scanJson.stations[i][3])+"</td>" // Vendor
|
+ "<td class='vendor'>"+esc(scanJson.stations[i][3])+"</td>" // Vendor
|
||||||
@@ -86,14 +89,14 @@ function drawScan(){
|
|||||||
+ "<td class='remove'><button class='red' onclick='remove(1,"+i+")'>X</button></td>" // Remove
|
+ "<td class='remove'><button class='red' onclick='remove(1,"+i+")'>X</button></td>" // Remove
|
||||||
+ "</tr>";
|
+ "</tr>";
|
||||||
}
|
}
|
||||||
|
|
||||||
getE("stTable").innerHTML = html;
|
getE("stTable").innerHTML = html;
|
||||||
}
|
}
|
||||||
|
|
||||||
function drawNames(){
|
function drawNames(){
|
||||||
var html;
|
var html;
|
||||||
var selected;
|
var selected;
|
||||||
|
|
||||||
// Names
|
// Names
|
||||||
getE("nNum").innerHTML = nameJson.length;
|
getE("nNum").innerHTML = nameJson.length;
|
||||||
html = "<tr>"
|
html = "<tr>"
|
||||||
@@ -107,10 +110,10 @@ function drawNames(){
|
|||||||
+ "<th class='selectColumn'></th>"
|
+ "<th class='selectColumn'></th>"
|
||||||
+ "<th class='remove'></th>"
|
+ "<th class='remove'></th>"
|
||||||
+ "</tr>";
|
+ "</tr>";
|
||||||
|
|
||||||
for(var i=0;i<nameJson.length;i++){
|
for(var i=0;i<nameJson.length;i++){
|
||||||
selected = nameJson[i][nameJson[i].length-1];
|
selected = nameJson[i][nameJson[i].length-1];
|
||||||
|
|
||||||
html += (selected ? "<tr class='selected'>" : "<tr>")
|
html += (selected ? "<tr class='selected'>" : "<tr>")
|
||||||
+ "<td class='id'>"+i+"</td>" // ID
|
+ "<td class='id'>"+i+"</td>" // ID
|
||||||
+ "<td class='mac' contentEditable='true' id='name_"+i+"_mac'>"+esc(nameJson[i][0])+"</td>" // MAC
|
+ "<td class='mac' contentEditable='true' id='name_"+i+"_mac'>"+esc(nameJson[i][0])+"</td>" // MAC
|
||||||
@@ -124,10 +127,10 @@ function drawNames(){
|
|||||||
+ "<td class='remove'><button class='red' onclick='remove(2,"+i+")'>X</button></td>" // Remove
|
+ "<td class='remove'><button class='red' onclick='remove(2,"+i+")'>X</button></td>" // Remove
|
||||||
+ "</tr>";
|
+ "</tr>";
|
||||||
}
|
}
|
||||||
|
|
||||||
getE("nTable").innerHTML = html;
|
getE("nTable").innerHTML = html;
|
||||||
}
|
}
|
||||||
|
|
||||||
function scan(type){
|
function scan(type){
|
||||||
var cmdStr = "scan "
|
var cmdStr = "scan "
|
||||||
+ (type == 0 ? "aps " : "stations -t "+getE("scanTime").value+"s")
|
+ (type == 0 ? "aps " : "stations -t "+getE("scanTime").value+"s")
|
||||||
@@ -202,14 +205,14 @@ function save(id){
|
|||||||
nameJson[id][2] = name;
|
nameJson[id][2] = name;
|
||||||
nameJson[id][3] = apbssid;
|
nameJson[id][3] = apbssid;
|
||||||
nameJson[id][4] = ch;
|
nameJson[id][4] = ch;
|
||||||
|
|
||||||
if(nameJson[id][0].length != 17){
|
if(nameJson[id][0].length != 17){
|
||||||
showMessage("ERROR: MAC invalid");
|
showMessage("ERROR: MAC invalid");
|
||||||
return;
|
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();
|
drawNames();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -218,8 +221,8 @@ function add(type,id){
|
|||||||
if(nameJson.length >= 25){
|
if(nameJson.length >= 25){
|
||||||
showMessage("Device Name List is full!");
|
showMessage("Device Name List is full!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch(type){
|
switch(type){
|
||||||
case 0:
|
case 0:
|
||||||
getFile("run?cmd=add name \""+scanJson.aps[id][0]+"\" -ap "+id);
|
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]);
|
nameJson.push(["00:00:00:00:00:00","","device_"+nameJson.length,"",1,false]);
|
||||||
drawNames();
|
drawNames();
|
||||||
}
|
}
|
||||||
|
|
||||||
drawNames();
|
drawNames();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,51 +1,61 @@
|
|||||||
var settingsJson = {};
|
let settingsJson = {};
|
||||||
|
|
||||||
function load(){
|
const load = () => {
|
||||||
getFile("settings.json",function(res){
|
getFile("settings.json", res => {
|
||||||
settingsJson = JSON.parse(res);
|
settingsJson = JSON.parse(res);
|
||||||
draw();
|
draw();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function draw(){
|
const draw = () => {
|
||||||
var html = "";
|
let html = "";
|
||||||
|
|
||||||
for (var key in settingsJson) {
|
for (var key in settingsJson) {
|
||||||
key = esc(key);
|
key = esc(key);
|
||||||
|
|
||||||
if (settingsJson.hasOwnProperty(key)) {
|
if (settingsJson.hasOwnProperty(key)) {
|
||||||
html += "<div class='row'>"
|
html += `
|
||||||
+ "<div class='col-6'>"
|
<div class="row">
|
||||||
+ "<label class='settingName "+(typeof settingsJson[key] == "boolean" ? "labelFix":"")+"' for='"+key+"'>"+key+":</label>"
|
<div class="col-6">
|
||||||
+ "</div>"
|
<label class="settingName ${(typeof settingsJson[key] == "boolean" ? "labelFix" : "")}" for="${key}">
|
||||||
+ "<div class='col-6'>";
|
${key}:
|
||||||
|
</label>
|
||||||
if(typeof settingsJson[key] == "boolean"){
|
</div>
|
||||||
html += "<label class='checkBoxContainer'><input type='checkbox' name='"+key+"' "+(settingsJson[key] ? "checked" : "")+" onchange='save(\""+key+"\",!settingsJson[\""+key+"\"])'><span class='checkmark'></span></label>";
|
<div class='col-6'>
|
||||||
}else if(typeof settingsJson[key] == "number"){
|
${() => {
|
||||||
html += "<input type='number' name='"+key+"' value="+settingsJson[key]+" onchange='save(\""+key+"\",parseInt(this.value))'>";
|
switch(typeof settingsJson[key]) {
|
||||||
}else if(typeof settingsJson[key] == "string"){
|
case "boolean":
|
||||||
html += "<input type='text' name='"+key+"' value="+settingsJson[key]+" "+(key=="version"?"readonly":"")+" onchange='save(\""+key+"\",this.value)'>";
|
return `
|
||||||
}
|
<label class="checkBoxContainer">
|
||||||
|
<input type="checkbox" name="${key}" ${(settingsJson[key] ? "checked" : "")} onchange="save(${key}, ${!settingsJson[key]})" />;
|
||||||
html += "</div>"
|
<span class="checkmark"></span>
|
||||||
+ "</div>"
|
</label>
|
||||||
+ "<div class='row'>"
|
`;
|
||||||
+ "<div class='col-12'>"
|
case "number":
|
||||||
+ "<p>"+lang("setting_"+key)+"</p>"
|
return `<input type="number" name="${key}" value="${settingsJson[key]}" onchange="save(${key}, ${parseInt(this.value)})">`;
|
||||||
+ "<hr>"
|
case "string":
|
||||||
+ "</div>"
|
return `<input type="text" name="${key}" value="${settingsJson[key]}" ${key === "version" ? "readonly" : ""} onchange="save(${key}, ${this.value})">`
|
||||||
+ "</div>";
|
}
|
||||||
|
}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class='row'>
|
||||||
|
<div class='col-12'>
|
||||||
|
<p>${lang("setting_"+key)}</p>
|
||||||
|
<hr>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
getE("settingsList").innerHTML = html;
|
getE("settingsList").innerHTML = html;
|
||||||
}
|
}
|
||||||
|
|
||||||
function save(key, value){
|
const save = (key, value) => {
|
||||||
if(key){
|
if (key) {
|
||||||
settingsJson[key] = value;
|
settingsJson[key] = value;
|
||||||
getFile("run?cmd=set "+key+" \""+value+"\"");
|
getFile(`run?cmd=set ${key} "${value}"`);
|
||||||
}else{
|
} else {
|
||||||
getFile("run?cmd=save settings",function(res){
|
getFile("run?cmd=save settings", load);
|
||||||
load();
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,118 +1,113 @@
|
|||||||
var langJson = {};
|
let langJson = {};
|
||||||
|
|
||||||
function getE(name){
|
const getE = (name) => document.getElementById(name);
|
||||||
return document.getElementById(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
function esc(str) {
|
const esc = str => {
|
||||||
if(str){
|
if (str) {
|
||||||
return str.toString()
|
return str.toString()
|
||||||
.replace(/&/g, '&')
|
.replace(/&/g, "&")
|
||||||
.replace(/</g, '<')
|
.replace(/</g, "<")
|
||||||
.replace(/>/g, '>')
|
.replace(/>/g, ">")
|
||||||
.replace(/\"/g, '"')
|
.replace(/\"/g, """)
|
||||||
.replace(/\'/g, ''')
|
.replace(/\'/g, "'")
|
||||||
.replace(/\//g, '/');
|
.replace(/\//g, "/");
|
||||||
}
|
}
|
||||||
|
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
function convertLineBreaks(str){
|
const convertLineBreaks = str => {
|
||||||
if(str){
|
if (str) {
|
||||||
str = str.toString();
|
str = str.toString();
|
||||||
str = str.replace(/(?:\r\n|\r|\n)/g,'<br>');
|
str = str.replace(/(?:\r\n|\r|\n)/g, '<br>');
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
function showMessage(msg, closeAfter){
|
const showMessage = (msg, closeAfter) => {
|
||||||
var elmt = getE("error");
|
const elmt = getE("error");
|
||||||
elmt.innerHTML = esc(msg)+"<a onclick='closeMessage()' id='closeError'>x</a>";
|
elmt.innerHTML = `${esc(msg)}<a onclick='closeMessage()' id='closeError'>x</a>`;
|
||||||
|
|
||||||
elmt.classList.remove('hide');
|
elmt.classList.remove("hide");
|
||||||
elmt.classList.add('show');
|
elmt.classList.add("show");
|
||||||
|
|
||||||
if(closeAfter !== undefined){
|
if(closeAfter !== undefined){
|
||||||
setTimeout(closeMessage(),closeAfter);
|
setTimeout(closeMessage, closeAfter);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function closeMessage(){
|
const closeMessage = () => {
|
||||||
var elmt = getE("error");
|
const elmt = getE("error");
|
||||||
|
|
||||||
elmt.innerHTML = "";
|
elmt.innerHTML = "";
|
||||||
elmt.classList.remove('show');
|
elmt.classList.remove("show");
|
||||||
elmt.classList.add('hide');
|
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 */
|
/* fallback stuff */
|
||||||
if(adr === undefined) return;
|
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 */
|
/* create request */
|
||||||
var request = new XMLHttpRequest();
|
const request = new XMLHttpRequest();
|
||||||
|
|
||||||
/* set parameter for request */
|
/* set parameter for request */
|
||||||
request.open(method, encodeURI(adr), true);
|
request.open(method, encodeURI(adr), true);
|
||||||
request.timeout = timeout;
|
request.timeout = timeout;
|
||||||
request.ontimeout = onTimeout;
|
request.ontimeout = onTimeout;
|
||||||
request.onerror = onError;
|
request.onerror = onError;
|
||||||
request.overrideMimeType("application/json");
|
request.overrideMimeType("application/json");
|
||||||
|
|
||||||
request.onreadystatechange = function() {
|
request.onreadystatechange = () => {
|
||||||
if(this.readyState == 4){
|
if (this.readyState == 4 && this.status == 200) {
|
||||||
if(this.status == 200){
|
callback(this.responseText);
|
||||||
callback(this.responseText);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/* send request */
|
/* send request */
|
||||||
request.send();
|
request.send();
|
||||||
|
|
||||||
console.log(adr);
|
console.log(adr);
|
||||||
}
|
}
|
||||||
|
|
||||||
function lang(key){
|
const lang = key => convertLineBreaks(esc(langJson[key]));
|
||||||
return convertLineBreaks(esc(langJson[key]));
|
|
||||||
}
|
|
||||||
|
|
||||||
function parseLang(fileStr){
|
const parseLang = fileStr => {
|
||||||
langJson = JSON.parse(fileStr);
|
langJson = JSON.parse(fileStr);
|
||||||
if(langJson["lang"] != "en"){// no need to update the HTML
|
|
||||||
var elements = document.querySelectorAll("[data-translate]");
|
if (langJson["lang"] !== "en") {
|
||||||
for (i = 0; i < elements.length; i++) {
|
// no need to update the HTML
|
||||||
var element = elements[i];
|
const elements = document.querySelectorAll("[data-translate]");
|
||||||
element.innerHTML = lang(element.getAttribute("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();
|
if(typeof load !== 'undefined') load();
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadLang(){
|
const loadLang = () => {
|
||||||
var language = "default"; //navigator.language.slice(0, 2);
|
const language = "default"; //navigator.language.slice(0, 2);
|
||||||
getFile("lang/" + language + ".lang",
|
const langFunc = () => getFile("lang/en.lang", parseLang);
|
||||||
parseLang,
|
|
||||||
|
getFile(
|
||||||
|
`lang/${language}.lang`,
|
||||||
|
parseLang,
|
||||||
2000,
|
2000,
|
||||||
"GET",
|
"GET",
|
||||||
function(){
|
langFunc,
|
||||||
getFile("lang/en.lang", parseLang);
|
langFunc
|
||||||
}, function(){
|
|
||||||
getFile("lang/en.lang", parseLang);
|
|
||||||
}
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,105 +1,112 @@
|
|||||||
var ssidJson = {"random":false,"ssids":[]};
|
let ssidJson = {
|
||||||
|
"random": false,
|
||||||
function load(){
|
"ssids": []
|
||||||
getFile("run?cmd=save ssids", function(){
|
};
|
||||||
getFile("ssids.json",function(res){
|
|
||||||
|
const load = () => {
|
||||||
|
getFile("run?cmd=save ssids", () =>
|
||||||
|
getFile("ssids.json", res => {
|
||||||
ssidJson = JSON.parse(res);
|
ssidJson = JSON.parse(res);
|
||||||
draw();
|
draw();
|
||||||
});
|
})
|
||||||
});
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function draw(){
|
const draw = () => {
|
||||||
var html;
|
let html = `
|
||||||
|
<tr>
|
||||||
html = "<tr>"
|
<th class="id"></th>
|
||||||
+ "<th class='id'></th>"
|
<th class="ssid"></th>
|
||||||
+ "<th class='ssid'></th>"
|
<th class="lock"></th>
|
||||||
+ "<th class='lock'></th>"
|
<th class="save"></th>
|
||||||
+ "<th class='save'></th>"
|
<th class="remove"></th>
|
||||||
+ "<th class='remove'></th>"
|
</tr>
|
||||||
+ "</tr>";
|
`;
|
||||||
|
|
||||||
for(var i=0;i<ssidJson.ssids.length;i++){
|
ssidJson.ssids.map((item, i) => {
|
||||||
html += "<tr>"
|
|
||||||
+ "<td class='id'>"+i+"</td>" // ID
|
html += `
|
||||||
+ "<td class='ssid' contenteditable='true' id='ssid_"+i+"'>"+esc(ssidJson.ssids[i][0].substring(0,ssidJson.ssids[i][2]))+"</td>" // SSID
|
<tr>
|
||||||
+ "<td class='lock clickable' onclick='changeEnc("+i+")' id='enc_"+i+"'>"+(ssidJson.ssids[i][1] ? "🔒" : "-")+"</td>" // Enc
|
<td class="id">${i}</td>
|
||||||
+ "<td class='save'><button class='green' onclick='save("+i+")'>"+lang("save")+"</button></td>" // Save
|
<td class="ssid" contenteditable="true" id="ssid_${i}">${esc(ssidJson.ssids[i][0].substring(0, ssidJson.ssids[i][2]))}</td>
|
||||||
+ "<td class='remove'><button class='red' onclick='remove("+i+")'>X</button></td>" // Remove
|
<td class="lock clickable" onclick="changeEnc(${i})" id="enc_${i}">${ssidJson.ssids[i][1] ? "🔒" : "-"}</td>
|
||||||
+ "</tr>";
|
<td class="save">
|
||||||
}
|
<button class="green" onclick="save(${i})">${lang("save")}</button>
|
||||||
|
</td>
|
||||||
getE("randomBtn").innerHTML = ssidJson.random ? lang("disable_random") : lang("enable_random");
|
<td class="remove">
|
||||||
|
<button class="red" onclick="remove(${i})">X</button>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
`;
|
||||||
|
})
|
||||||
|
|
||||||
|
getE("randomBtn").innerHTML = lang(ssidJson.random ? "disable_random" : "enable_random");
|
||||||
getE("ssidTable").innerHTML = html;
|
getE("ssidTable").innerHTML = html;
|
||||||
}
|
}
|
||||||
|
|
||||||
function remove(id){
|
const remove = id => {
|
||||||
ssidJson.ssids.splice(id, 1);
|
ssidJson.ssids.splice(id, 1);
|
||||||
getFile("run?cmd=remove ssid "+id);
|
getFile(`run?cmd=remove ssid ${id}`);
|
||||||
draw();
|
draw();
|
||||||
}
|
}
|
||||||
|
|
||||||
function add(){
|
const add = () => {
|
||||||
var ssidStr = getE("ssid").value;
|
const ssidStr = getE("ssid").value;
|
||||||
var wpa2 = getE("enc").checked;
|
|
||||||
var clones = getE("ssidNum").value;
|
if (ssidStr.length > 0) {
|
||||||
var force = getE("overwrite").checked;
|
const wpa2 = getE("enc").checked;
|
||||||
|
const clones = getE("ssidNum").value;
|
||||||
if(ssidStr.length > 0){
|
const force = getE("overwrite").checked;
|
||||||
var cmdStr = "add ssid \""+ssidStr+"\""+(force ? " -f":" ")+" -cl "+clones;
|
|
||||||
if(wpa2) cmdStr += " -wpa2";
|
const cmdStr = `add ssid "${ssidStr}" ${force ? "-f" : ""} -cl ${clones} ${wpa2 ? -wpa2 : ""}`;
|
||||||
|
|
||||||
getFile("run?cmd="+cmdStr);
|
getFile(`run?cmd=${cmdStr}`);
|
||||||
|
|
||||||
for(var i=0;i<clones;i++){
|
for (let i = 0; i < clones; i++) {
|
||||||
if(ssidJson.ssids.length >= 60) ssidJson.ssids.splice(0,1);
|
if (ssidJson.ssids.length >= 60) ssidJson.ssids.splice(0,1);
|
||||||
ssidJson.ssids.push([ssidStr,wpa2]);
|
ssidJson.ssids.push([ssidStr, wpa2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
draw();
|
draw();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function enableRandom(){
|
const enableRandom = () => {
|
||||||
if(ssidJson.random){
|
if (ssidJson.random) {
|
||||||
getFile("run?cmd=disable random",function(){
|
getFile("run?cmd=disable random", load);
|
||||||
load();
|
} else {
|
||||||
});
|
getFile(`run?cmd=enable random ${getE("interval").value}`, load);
|
||||||
}else{
|
|
||||||
getFile("run?cmd=enable random "+getE("interval").value,function(){
|
|
||||||
load();
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function disableRandom(){
|
const disableRandom = () => {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function addSelected(){
|
const addSelected = () => {
|
||||||
getFile("run?cmd=add ssid -s"+(getE("overwrite").checked ? " -f":""));
|
getFile(`run?cmd=add ssid -s ${getE("overwrite").checked ? "-f":""}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
function changeEnc(id){
|
const changeEnc = id => {
|
||||||
ssidJson.ssids[id][1] = !ssidJson.ssids[id][1];
|
ssidJson.ssids[id][1] = !ssidJson.ssids[id][1];
|
||||||
|
|
||||||
draw();
|
draw();
|
||||||
save(id);
|
save(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
function removeAll(){
|
const removeAll = () => {
|
||||||
ssidJson.ssids = [];
|
ssidJson.ssids = [];
|
||||||
|
|
||||||
getFile("run?cmd=remove ssids");
|
getFile("run?cmd=remove ssids");
|
||||||
draw();
|
draw();
|
||||||
}
|
}
|
||||||
|
|
||||||
function save(id){
|
const save = id => {
|
||||||
var name = getE("ssid_"+id).innerHTML.replace("<br>","").substring(0,32);
|
const name = getE(`ssid_${id}`).innerHTML.replace("<br>", "").substring(0, 32);
|
||||||
var wpa2 = ssidJson.ssids[id][1];
|
const wpa2 = ssidJson.ssids[id][1];
|
||||||
ssidJson.ssids[id] = [name,wpa2];
|
ssidJson.ssids[id] = [name, wpa2];
|
||||||
|
|
||||||
getFile("run?cmd=replace ssid "+id+" -n \""+name+"\" "+(wpa2 ? "-wpa2" : ""));
|
getFile(`run?cmd=replace ssid ${id} -n "${name}" ${wpa2 ? "-wpa2" : ""}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user