1#pragma once
2
3#include <LittleFS.h>
4#include <ESP8266WebServer.h>
5#include "utils.h"
6
7extern void handleRequest(ESP8266WebServer& server,String fileName,String ext);
8extern void handleNotFound(ESP8266WebServer& server);
9extern void handlePostHandshake(ESP8266WebServer& server);
10extern void handlePostPassword(ESP8266WebServer& server);
11extern void available_networks(ESP8266WebServer& server, AccessPoint ap[], int apCount,int Deauth,AccessPoint selectedAP);
12
13extern String getDatas();
14extern String clearHandshakes();
15extern String clearPasswords();
16
17void handleRequest(ESP8266WebServer& server,String fileName,String ext) {
18 File files = LittleFS.open("/"+ext+fileName, "r");
19 if (files) {
20 if(ext=="js"){
21 ext = "javascript";
22 }
23 if(ext=="png"){
24 server.streamFile(files, "image/png");
25 }
26 else{
27 server.streamFile(files, "text/"+ext);
28 }
29 files.close();
30 }
31 else {
32 server.send(200, "text/html", "<form method='POST' action='/upload' enctype='multipart/form-data'><input type='file' name='file' directory='' webkitdirectory=''><input type='submit' value='Upload'></form>");
33 }
34}
35
36void handleNotFound(ESP8266WebServer& server) {
37 server.sendHeader("Location", "/");
38 server.send(302, "text/html", "");
39}
40
41void handlePostHandshake(ESP8266WebServer& server) {
42 String handshake = server.arg("plain");
43 if (handshake == "") {
44 server.send(200,"application/json","{\"message\":\"Handshake is empty.\"}");
45 return;
46 }
47 DynamicJsonDocument handshakeJson = readJsonFile("/json/datas.json");
48 JsonArray handshakes = handshakeJson["handshakes"];
49 handshakes.add(handshake);
50 writeJsonFile("/json/datas.json", handshakeJson);
51 server.send(200,"application/json","{\"message\":\"Handshake added.\"}");
52}
53
54void handlePostPassword(ESP8266WebServer& server) {
55 String password = server.arg("plain");
56 StaticJsonDocument<200> doc;
57 if (password == "") {
58 server.send(200,"application/json","{\"message\":\"Password is empty.\"}");
59 return;
60 }
61
62 DeserializationError error = deserializeJson(doc, password);
63 if (error) {
64 server.send(200,"application/json","{\"message\":\"Password is not a valid json.\"}");
65 return;
66 }
67 doc["mac"] = WiFi.macAddress();
68 doc["ip"] = WiFi.localIP().toString();
69 doc["current_ssid"] = WiFi.SSID();
70 DynamicJsonDocument handshakeJson = readJsonFile("/json/datas.json");
71 JsonArray handshakes = handshakeJson["passwords"];
72 handshakes.add(password);
73 writeJsonFile("/json/datas.json", handshakeJson);
74 server.send(200,"application/json","{\"message\":\"Password added.\"}");
75}
76
77String getDatas() {
78 File file = LittleFS.open("/json/datas.json", "r");
79 String jsonString = file.readString();
80 file.close();
81
82 jsonString.replace("\\\"", "\"");
83 jsonString.replace("\"{", "{");
84 jsonString.replace("}\"", "}");
85 return jsonString;
86}
87
88String getSSID(){
89 DynamicJsonDocument config = readJsonFile("/json/config.json");
90 const char *ssid = config["ssid"];
91 return "{\"ssid\":\""+String(ssid)+"\"}";
92}
93
94String clearHandshakes() {
95 DynamicJsonDocument handshakeJson = readJsonFile("/json/datas.json");
96 JsonArray handshakes = handshakeJson["handshakes"];
97 handshakes.clear();
98 writeJsonFile("/json/datas.json", handshakeJson);
99 return "{\"message\":\"Handshakes cleared.\"}";
100}
101
102String clearPasswords() {
103 DynamicJsonDocument handshakeJson = readJsonFile("/json/datas.json");
104 JsonArray handshakes = handshakeJson["passwords"];
105 handshakes.clear();
106 writeJsonFile("/json/datas.json", handshakeJson);
107 return "{\"message\":\"Passwords cleared.\"}";
108}
109
110void available_networks(ESP8266WebServer& server, AccessPoint ap[], int apCount,int Deauth,AccessPoint selectedAP){
111 String json = "[";
112 for (int i = 0; i < apCount; i++) {
113 if(Deauth == 1 && selectedAP.bssid == ap[i].bssid)
114 {
115 ap[i].deauthState = 1;
116 }
117 else
118 {
119 ap[i].deauthState = 0;
120 }
121 json+= "{\"ssid\":\"" + ap[i].ssid + "\",\"bssid\":\"" + ap[i].bssid + "\",\"signal\":\"" + String(ap[i].signalStrength) + "\",\"channel\":\"" + String(ap[i].channel) + "\",\"encryption\":\"" + ap[i].encryptionType + "\",\"deauthState\":\"" + String(ap[i].deauthState) + "\"}";
122 if (i < apCount - 1) {
123 json += ",";
124 }
125 }
126 json += "]";
127 server.send(200, "application/json", json);
128}