diff --git a/esp8266_deauther/language.h b/esp8266_deauther/language.h index aaa3610..ce9a366 100644 --- a/esp8266_deauther/language.h +++ b/esp8266_deauther/language.h @@ -604,6 +604,8 @@ static const char W_PWNED[] PROGMEM = "pwned"; static const char W_DEAUTHER[] PROGMEM = "deauth.me"; static const char W_WEBINTERFACE[] PROGMEM = "/web"; static const char W_DOWNLOAD[] PROGMEM = "download"; +static const char W_CONTENT_ENCODING[] PROGMEM = "Content-Encoding"; +static const char W_CACHE_CONTROL[] PROGMEM = "Cache-Control"; static const char W_STREAM[] PROGMEM = "application/octet-stream"; static const char W_HTML[] PROGMEM = "text/html"; static const char W_CSS[] PROGMEM = "text/css"; diff --git a/esp8266_deauther/wifi.h b/esp8266_deauther/wifi.h index cc7cb96..abbaace 100644 --- a/esp8266_deauther/wifi.h +++ b/esp8266_deauther/wifi.h @@ -194,10 +194,10 @@ void handleFileList() { server.send(200, str(W_JSON).c_str(), output); } -void sendProgmem(const char* ptr, size_t size, String type) { - server.sendHeader(String(F("Content-Encoding")).c_str(), "gzip"); - server.sendHeader("Cache-Control", "max-age=86400"); - server.send_P(200, type.c_str(), ptr, size); +void sendProgmem(const char* ptr, size_t size, const char* type) { + server.sendHeader(str(W_CONTENT_ENCODING).c_str(), String(F("gzip"))); + server.sendHeader(str(W_CACHE_CONTROL).c_str(), "max-age=86400"); + server.send_P(200, str(type).c_str(), ptr, size); } // path = folder of web files, ssid = name of network, password = password ("0" => no password), hidden = if the network is visible, captivePortal = enable a captive portal @@ -230,79 +230,87 @@ void startAP(String path, String ssid, String password, uint8_t ch, bool hidden, // ================================================================ // post here the output of the webConverter.py + if(!settings.getWebSpiffs()){ - server.on("/", HTTP_GET, [](){ - sendProgmem(indexhtml, sizeof(indexhtml), str(W_HTML)); - }); - server.on("/attack.html", HTTP_GET, [](){ - sendProgmem(attackhtml, sizeof(attackhtml), str(W_HTML)); - }); - server.on("/index.html", HTTP_GET, [](){ - sendProgmem(indexhtml, sizeof(indexhtml), str(W_HTML)); - }); - server.on("/info.html", HTTP_GET, [](){ - sendProgmem(infohtml, sizeof(infohtml), str(W_HTML)); - }); - server.on("/scan.html", HTTP_GET, [](){ - sendProgmem(scanhtml, sizeof(scanhtml), str(W_HTML)); - }); - server.on("/settings.html", HTTP_GET, [](){ - sendProgmem(settingshtml, sizeof(settingshtml), str(W_HTML)); - }); - server.on("/ssids.html", HTTP_GET, [](){ - sendProgmem(ssidshtml, sizeof(ssidshtml), str(W_HTML)); - }); - server.on("/js/style.css", HTTP_GET, [](){ - sendProgmem(stylecss, sizeof(stylecss), str(W_CSS)); - }); - server.on("/js/attack.js", HTTP_GET, [](){ - sendProgmem(attackjs, sizeof(attackjs), str(W_JS)); - }); - server.on("/js/scan.js", HTTP_GET, [](){ - sendProgmem(scanjs, sizeof(scanjs), str(W_JS)); - }); - server.on("/js/settings.js", HTTP_GET, [](){ - sendProgmem(settingsjs, sizeof(settingsjs), str(W_JS)); - }); - server.on("/js/site.js", HTTP_GET, [](){ - sendProgmem(sitejs, sizeof(sitejs), str(W_JS)); - }); - server.on("/js/ssids.js", HTTP_GET, [](){ - sendProgmem(ssidsjs, sizeof(ssidsjs), str(W_JS)); - }); - server.on("/lang/cn.lang", HTTP_GET, [](){ - sendProgmem(cnlang, sizeof(cnlang), str(W_JSON)); - }); - server.on("/lang/cs.lang", HTTP_GET, [](){ - sendProgmem(cslang, sizeof(cslang), str(W_JSON)); - }); - server.on("/lang/de.lang", HTTP_GET, [](){ - sendProgmem(delang, sizeof(delang), str(W_JSON)); - }); - server.on("/lang/en.lang", HTTP_GET, [](){ - sendProgmem(enlang, sizeof(enlang), str(W_JSON)); - }); - server.on("/lang/fr.lang", HTTP_GET, [](){ - sendProgmem(frlang, sizeof(frlang), str(W_JSON)); - }); - server.on("/lang/tlh.lang", HTTP_GET, [](){ - sendProgmem(tlhlang, sizeof(tlhlang), str(W_JSON)); - }); + server.on(String(SLASH).c_str(), HTTP_GET, [](){ + sendProgmem(indexhtml, sizeof(indexhtml), W_HTML); +}); +server.on(String(F("/index.html")).c_str(), HTTP_GET, [](){ + sendProgmem(indexhtml, sizeof(indexhtml), W_HTML); +}); +server.on(String(F("/scan.html")).c_str(), HTTP_GET, [](){ + sendProgmem(scanhtml, sizeof(scanhtml), W_HTML); +}); +server.on(String(F("/attack.html")).c_str(), HTTP_GET, [](){ + sendProgmem(attackhtml, sizeof(attackhtml), W_HTML); +}); +server.on(String(F("/settings.html")).c_str(), HTTP_GET, [](){ + sendProgmem(settingshtml, sizeof(settingshtml), W_HTML); +}); +server.on(String(F("/ssids.html")).c_str(), HTTP_GET, [](){ + sendProgmem(ssidshtml, sizeof(ssidshtml), W_HTML); +}); +server.on(String(F("/info.html")).c_str(), HTTP_GET, [](){ + sendProgmem(infohtml, sizeof(infohtml), W_HTML); +}); +server.on(String(F("/style.css")).c_str(), HTTP_GET, [](){ + sendProgmem(stylecss, sizeof(stylecss), W_CSS); +}); +server.on(String(F("/js/attack.js")).c_str(), HTTP_GET, [](){ + sendProgmem(attackjs, sizeof(attackjs), W_JS); +}); +server.on(String(F("/js/settings.js")).c_str(), HTTP_GET, [](){ + sendProgmem(settingsjs, sizeof(settingsjs), W_JS); +}); +server.on(String(F("/js/site.js")).c_str(), HTTP_GET, [](){ + sendProgmem(sitejs, sizeof(sitejs), W_JS); +}); +server.on(String(F("/js/scan.js")).c_str(), HTTP_GET, [](){ + sendProgmem(scanjs, sizeof(scanjs), W_JS); +}); +server.on(String(F("/js/ssids.js")).c_str(), HTTP_GET, [](){ + sendProgmem(ssidsjs, sizeof(ssidsjs), W_JS); +}); +server.on(String(F("/lang/en.lang")).c_str(), HTTP_GET, [](){ + sendProgmem(enlang, sizeof(enlang), W_JSON); +}); +server.on(String(F("/lang/tlh.lang")).c_str(), HTTP_GET, [](){ + sendProgmem(tlhlang, sizeof(tlhlang), W_JSON); +}); +server.on(String(F("/lang/ru.lang")).c_str(), HTTP_GET, [](){ + sendProgmem(rulang, sizeof(rulang), W_JSON); +}); +server.on(String(F("/lang/cs.lang")).c_str(), HTTP_GET, [](){ + sendProgmem(cslang, sizeof(cslang), W_JSON); +}); +server.on(String(F("/lang/fr.lang")).c_str(), HTTP_GET, [](){ + sendProgmem(frlang, sizeof(frlang), W_JSON); +}); +server.on(String(F("/lang/cn.lang")).c_str(), HTTP_GET, [](){ + sendProgmem(cnlang, sizeof(cnlang), W_JSON); +}); +server.on(String(F("/lang/de.lang")).c_str(), HTTP_GET, [](){ + sendProgmem(delang, sizeof(delang), W_JSON); +}); + } server.on(str(W_DEFAULT_LANG).c_str(), HTTP_GET, [](){ if(!settings.getWebSpiffs()){ - if(settings.getLang() == "cn") sendProgmem(cnlang, sizeof(cnlang), str(W_JSON)); - else if(settings.getLang() == "cs") sendProgmem(cslang, sizeof(cslang), str(W_JSON)); - else if(settings.getLang() == "de") sendProgmem(delang, sizeof(delang), str(W_JSON)); - else if(settings.getLang() == "en") sendProgmem(enlang, sizeof(enlang), str(W_JSON)); - else if(settings.getLang() == "fr") sendProgmem(frlang, sizeof(frlang), str(W_JSON)); - else if(settings.getLang() == "tlh") sendProgmem(tlhlang, sizeof(tlhlang), str(W_JSON)); + if(settings.getLang() == String(F("en"))) sendProgmem(enlang, sizeof(enlang), W_JSON); + else if(settings.getLang() == String(F("tlh"))) sendProgmem(tlhlang, sizeof(tlhlang), W_JSON); + else if(settings.getLang() == String(F("ru"))) sendProgmem(rulang, sizeof(rulang), W_JSON); + else if(settings.getLang() == String(F("cs"))) sendProgmem(cslang, sizeof(cslang), W_JSON); + else if(settings.getLang() == String(F("fr"))) sendProgmem(frlang, sizeof(frlang), W_JSON); + else if(settings.getLang() == String(F("cn"))) sendProgmem(cnlang, sizeof(cnlang), W_JSON); + else if(settings.getLang() == String(F("de"))) sendProgmem(delang, sizeof(delang), W_JSON); - else handleFileRead("/web/lang/"+settings.getLang()+".lang"); + else handleFileRead(String(F("/web/lang/"))+settings.getLang()+String(F(".lang"))); } else { - handleFileRead("/web/lang/"+settings.getLang()+".lang"); + handleFileRead(String(F("/web/lang/"))+settings.getLang()+String(F(".lang"))); } }); + + // ================================================================ server.on(str(W_RUN).c_str(), HTTP_GET, []() { diff --git a/utils/web_converter_python/webConverter.py b/utils/web_converter_python/webConverter.py index 93dbb3f..1191eb2 100644 --- a/utils/web_converter_python/webConverter.py +++ b/utils/web_converter_python/webConverter.py @@ -90,7 +90,7 @@ for file in html_files: hex_formatted_content = hex_formatted_content[:-2] progmem_definitions += "const char " + array_name + "[] PROGMEM = {" + hex_formatted_content + "};\n" copy_files_function += ' if(!SPIFFS.exists(String(F("/web/' + base_file + '.gz"))) || force) progmemToSpiffs(' + array_name + ', sizeof(' + array_name + '), String(F("/web/' + base_file + '.gz")));\n' - webserver_events += 'server.on(PSTR("/' + base_file + '"), HTTP_GET, [](){\n sendProgmem(' + array_name + ', sizeof(' + array_name + '), PSTR("text/html"));\n});\n' + webserver_events += 'server.on(String(F("/' + base_file + '")).c_str(), HTTP_GET, [](){\n sendProgmem(' + array_name + ', sizeof(' + array_name + '), W_HTML);\n});\n' for file in css_files: base_file = os.path.basename(str(file)) @@ -118,7 +118,7 @@ for file in css_files: hex_formatted_content = hex_formatted_content[:-2] progmem_definitions += "const char " + array_name + "[] PROGMEM = {" + hex_formatted_content + "};\n" copy_files_function += ' if(!SPIFFS.exists(String(F("/web/' + base_file + '.gz"))) || force) progmemToSpiffs(' + array_name + ', sizeof(' + array_name + '), String(F("/web/' + base_file + '.gz")));\n' - webserver_events += 'server.on(PSTR("/' + base_file + '"), HTTP_GET, [](){\n sendProgmem(' + array_name + ', sizeof(' + array_name + '), PSTR("text/css"));\n});\n' + webserver_events += 'server.on(String(F("/' + base_file + '")).c_str(), HTTP_GET, [](){\n sendProgmem(' + array_name + ', sizeof(' + array_name + '), W_CSS);\n});\n' for file in js_files: q = PurePath('js') @@ -150,7 +150,7 @@ for file in js_files: hex_formatted_content = hex_formatted_content[:-2] progmem_definitions += "const char " + array_name + "[] PROGMEM = {" + hex_formatted_content + "};\n" copy_files_function += ' if(!SPIFFS.exists(String(F("/web/js/' + base_file + '.gz"))) || force) progmemToSpiffs(' + array_name + ', sizeof(' + array_name + '), String(F("/web/js/' + base_file + '.gz")));\n' - webserver_events += 'server.on(PSTR("/' + base_file + '"), HTTP_GET, [](){\n sendProgmem(' + array_name + ', sizeof(' + array_name + '), PSTR("application/javascript"));\n});\n' + webserver_events += 'server.on(String(F("/js/' + base_file + '")).c_str(), HTTP_GET, [](){\n sendProgmem(' + array_name + ', sizeof(' + array_name + '), W_JS);\n});\n' for file in lang_files: q = PurePath('lang') @@ -180,11 +180,11 @@ for file in lang_files: hex_formatted_content = hex_formatted_content[:-2] progmem_definitions += "const char " + array_name + "[] PROGMEM = {" + hex_formatted_content + "};\n" copy_files_function += ' if(!SPIFFS.exists(String(F("/web/lang/' + base_file + '.gz"))) || force) progmemToSpiffs(' + array_name + ', sizeof(' + array_name + '), String(F("/web/lang/' + base_file + '.gz")));\n' - webserver_events += 'server.on(PSTR("/' + base_file + '"), HTTP_GET, [](){\n sendProgmem(' + array_name + ', sizeof(' + array_name + '), PSTR("application/json"));\n});\n' + webserver_events += 'server.on(String(F("/lang/' + base_file + '")).c_str(), HTTP_GET, [](){\n sendProgmem(' + array_name + ', sizeof(' + array_name + '), W_JSON);\n});\n' if(len(load_lang) > 0): - load_lang += ' else if(settings.getLang() == String(F("'+lang_name+'"))) sendProgmem(' + array_name + ', sizeof(' + array_name + '), PSTR("application/json"));\n' + load_lang += ' else if(settings.getLang() == String(F("'+lang_name+'"))) sendProgmem(' + array_name + ', sizeof(' + array_name + '), W_JSON);\n' else: - load_lang += ' if(settings.getLang() == String(F("'+lang_name+'"))) sendProgmem(' + array_name + ', sizeof(' + array_name + '), PSTR("application/json"));\n' + load_lang += ' if(settings.getLang() == String(F("'+lang_name+'"))) sendProgmem(' + array_name + ', sizeof(' + array_name + '), W_JSON);\n' base_file = os.path.basename(license_file_path) new_file = str(os.path.join(str(compressed), str("LICENSE"))) @@ -235,16 +235,16 @@ print("\n[+] Done, happy uploading :)") print("Here are the updated functions for wifi.h, in case you added or removed files:") print(); print('if(!settings.getWebSpiffs()){') -print(' server.on(PSTR("/"), HTTP_GET, [](){') -print(' sendProgmem(indexhtml, sizeof(indexhtml), PSTR("text/html"));') +print(' server.on(String(SLASH).c_str(), HTTP_GET, [](){') +print(' sendProgmem(indexhtml, sizeof(indexhtml), W_HTML);') print('});') print(webserver_events) print('}') print("server.on(str(W_DEFAULT_LANG).c_str(), HTTP_GET, [](){") print(" if(!settings.getWebSpiffs()){") print(load_lang) -print(' else handleFileRead("/web/lang/"+settings.getLang()+".lang");') +print(' else handleFileRead(String(F("/web/lang/"))+settings.getLang()+String(F(".lang")));') print(' } else {') -print(' handleFileRead("/web/lang/"+settings.getLang()+".lang");') +print(' handleFileRead(String(F("/web/lang/"))+settings.getLang()+String(F(".lang")));') print(' }') print("});");