summaryrefslogtreecommitdiffstats
path: root/f015_apihandler.ino
diff options
context:
space:
mode:
Diffstat (limited to 'f015_apihandler.ino')
-rw-r--r--f015_apihandler.ino234
1 files changed, 234 insertions, 0 deletions
diff --git a/f015_apihandler.ino b/f015_apihandler.ino
new file mode 100644
index 0000000..12c9044
--- /dev/null
+++ b/f015_apihandler.ino
@@ -0,0 +1,234 @@
+void handleTest() {
+ server.send(200, "text/plain", "200: OK");
+}
+
+bool preveriprijavo() {
+ if(!server.authenticate(program_ime, readfile("/403/webgeslo.txt").c_str())){
+ server.requestAuthentication();
+ return false;
+ } else {
+ return true;
+ }
+}
+void handleRoot() {
+ if (!preveriprijavo()) return;
+ server.sendHeader("Location", "/www/index.html");
+ server.send(303);
+}
+void handleRename() {
+ if (!preveriprijavo()) return;
+ if (!server.hasArg("i") || server.arg("i") == NULL || !server.hasArg("v") || server.arg("v") == NULL) {
+ server.send(400, "text/html", fihr(400, "obvezni argument: i(z) in v (pot datoteke, npr. /www/index.html)"));
+ return;
+ }
+ if(SPIFFS.rename(server.arg("i"), server.arg("v"))) {
+ server.send(200, "text/html", fihr(200, "uspešno premaknjeno!"));
+ } else {
+ server.send(500, "text/html", fihr(500, "premikanje ni uspelo!"));
+ }
+}
+void handleTms() { // timeset
+ if (!preveriprijavo()) return;
+ if (!server.hasArg("s") || server.arg("s") == NULL) {
+ server.send(400, "text/html", fihr(400, "obvezni argument: s(ec) ter neobvezni: h(r), m(in), s(ec), d(ay), (m)o(nth), y(ear) (ce je prisoten le argument s, nastavimo kot unix timestamp, drugace kot mhsdmy)"));
+ return;
+ }
+ if (!server.hasArg("m") || server.arg("m") == NULL) {
+ setTime(String(server.arg("s")).toInt());
+ server.send(200, "text/html", fihr(200, "ura nastavljena!"));
+ } else {
+ if(server.hasArg("h") && server.arg("h") != NULL && server.hasArg("m") && server.arg("m") != NULL && server.hasArg("s") && server.arg("s") != NULL &&
+ server.hasArg("d") && server.arg("d") != NULL && server.hasArg("o") && server.arg("o") != NULL && server.hasArg("y") && server.arg("y") != NULL) {
+ setTime(String(server.arg("h")).toInt(), String(server.arg("m")).toInt(), String(server.arg("s")).toInt(), String(server.arg("d")).toInt(),
+ String(server.arg("o")).toInt(), String(server.arg("y")).toInt());
+ server.send(200, "text/html", fihr(200, "ura zamenjana!"));
+ } else {
+ server.send(400, "text/html", fihr(400, "ce ze delas ura, minuta, sekunda, dan, mesec, leto; morajo biti prisotni vsi argumenti (hmsdoy)"));
+ }
+ }
+}
+void handlePin() {
+ if (!preveriprijavo()) return;
+ if (!server.hasArg("p") || server.arg("p") == NULL) {
+ server.send(400, "text/html", fihr(400, "obvezni argument: p(in) ter neobvezni: v(rednost) (0-1 za digital, 0-1023 za a) (glede na to ce je prisoten spremeni pinMode)"));
+ return;
+ }
+ if (!server.hasArg("v") && server.arg("v") != NULL) {
+ pinMode(pin2gpio(server.arg("p")), OUTPUT);
+ if(server.arg("p").substring(0, 1) == "a" || server.arg("p").substring(0, 1) == "A" || server.arg("v").toInt() > 1) {
+ analogWrite(pin2gpio(server.arg("p")), server.arg("v").toInt());
+ } else {
+ digitalWrite(pin2gpio(server.arg("p")), server.arg("v").toInt());
+ }
+ } else {
+ pinMode(pin2gpio(server.arg("p")), OUTPUT);
+ delay(1); // idk
+ if(server.arg("p").substring(0, 1) == "a") {
+ analogRead(pin2gpio(server.arg("p")));
+ } else {
+ digitalRead(pin2gpio(server.arg("p")));
+ }
+ }
+}
+void handleRes() {
+ if (!preveriprijavo()) return;
+ if (!server.hasArg("k") || server.arg("k") == NULL) {
+ server.send(400, "text/html", fihr(400, "obvezni argument: k(aj), vrednost je lahko: availheap"));
+ return;
+ }
+ server.send(200, "text/plain", String(ESP.getFreeHeap()));
+}
+void handleSetAP() {
+ if (!preveriprijavo()) return;
+ if (!server.hasArg("s") || server.arg("s") == NULL) {
+ server.send(400, "text/html", fihr(400, "obvezni argument: s(sid) ter neobvezni: p(ass), c(hannel), h(idden-bool) in m(AC address npr. EEFABC286787 APja)"));
+ return;
+ }
+ WiFi.softAPdisconnect(true);
+ if(server.hasArg("m") && server.arg("m") != NULL) {
+ long unsigned int mac; uint8_t macar[6];
+ mac = strtoul(server.arg("m").c_str(), NULL, 16);
+ memcpy(macar, (char*)&mac, 6);
+ wifi_set_macaddr(STATION_IF, macar);
+ }
+ if (server.hasArg("h") && server.arg("h") != NULL) {
+ writefile("/403/hostname.txt", String(server.arg("h")));
+ }
+ writefile("/403/wifi-ap.txt", String(server.arg("s"))+","+String(server.arg("p"))+","+String(server.arg("c"))+","+String(readfile("/403/hostname.txt")));
+ WiFi.softAP(server.arg("s").c_str(), server.arg("p").c_str(), server.arg("c").toInt(), readfile("/403/hostname.txt").toInt());
+ server.send(200, "text/html", fihr(200, "AP nastavljena"));
+}
+void handleSetSTA() {
+ if (!preveriprijavo()) return;
+ if (!server.hasArg("s") || server.arg("s") == NULL) {
+ server.send(400, "text/html", fihr(400, "obvezni argument: s(sid) ter neobvezni: p(ass), h(ostname) in m(AC address npr. EEFABC286787 STAja)"));
+ return;
+ }
+ WiFi.disconnect(true);
+ if(server.hasArg("m") && server.arg("m") != NULL) {
+ long unsigned int mac; uint8_t macar[6];
+ mac = strtoul(server.arg("m").c_str(), NULL, 16);
+ memcpy(macar, (char*)&mac, 6);
+ wifi_set_macaddr(SOFTAP_IF, macar);
+ }
+ if (server.hasArg("h") && server.arg("h") != NULL) writefile("/403/hostname.txt", String(server.arg("h")));
+ WiFi.hostname(readfile("/403/hostname.txt").c_str());
+ WiFi.begin(server.arg("s").c_str(), server.arg("p").c_str());
+ server.send(200, "text/html", fihr(200, "STA nastavljena"));
+}
+void handleGetID() {
+ if (!preveriprijavo()) return;
+ if (!server.hasArg("k") || server.arg("k") == NULL) {
+ server.send(400, "text/html", fihr(400, "obvezni argument: k(aj s(ta MAC)/a(p MAC)/i(p)/c(hipId)/h(ostname)). prebere ID, za pisanje MACa glejte /api/sta in /api/ap"));
+ return;
+ }
+ if(server.arg("k").startsWith("s")) {
+ server.send(200, "text/plain", String(WiFi.macAddress()));
+ } else if (server.arg("k").startsWith("a")) {
+ server.send(200, "text/plain", String(WiFi.softAPmacAddress()));
+ } else if (server.arg("k").startsWith("i")) {
+ server.send(200, "text/plain", WiFi.localIP().toString());
+ } else if (server.arg("k").startsWith("c")) {
+ server.send(200, "text/plain", String(ESP.getChipId()));
+ } else {
+ server.send(200, "text/plain", String(readfile("/403/hostname.txt")));
+ }
+}
+void handlePWM() {
+ if (!preveriprijavo()) return;
+ if (server.hasArg("v") && server.arg("v") != NULL) {
+ writefile("/403/pwmfreq.txt", String(server.arg("v")));
+ analogWriteFreq(String(server.arg("v")).toInt());
+ server.send(200, "text/html", fihr(200, "PWM nastavljena"));
+ } else {
+ server.send(400, "text/html", fihr(400, "obvezni argument: v(rednost v Hz)"));
+ }
+}
+void handleRestart() {
+ if (!preveriprijavo()) return;
+ ESP.restart();
+}
+void handleDeepSleep() {
+ if (!preveriprijavo()) return;
+ if (!server.hasArg("m") || server.arg("m") == NULL) {
+ server.send(400, "text/html", fihr(400, "obvezni argument: m(ikrosekund)"));
+ return;
+ }
+ ESP.deepSleep(String(server.arg("m")).toInt());
+}
+void handleUpdate() {
+ if (!preveriprijavo()) return;
+ int vraat;
+ if (!server.hasArg("g") || server.arg("g") == NULL || !server.hasArg("p") || server.arg("p") == NULL) {
+ server.send(400, "text/html", fihr(400, "obvezna argumenta: g(ostiteljev IP) in p(ot /do/datoteke.bin), neobvezen: v(rata HTTP (privzeta 80))"));
+ return;
+ }
+ if(String(server.arg("v")).toInt() > 0 && String(server.arg("v")).toInt() < 65536) {
+ vraat = String(server.arg("v")).toInt();
+ } else {
+ vraat = 80;
+ }
+ t_httpUpdate_return ret = ESPhttpUpdate.update(server.arg("g"), vraat, server.arg("p"), String(verzija[0])+"."+String(verzija[1])+"."+String(verzija[2]));
+ switch(ret) {
+ case HTTP_UPDATE_FAILED:
+ server.send(500, "text/html", fihr(500, "Sistemska napaka: programska posodobitev: ni uspela"));
+ break;
+ case HTTP_UPDATE_NO_UPDATES:
+ server.send(304, "text/html", fihr(304, "Nespremenjeno: programska posodobitev: ni potrebna, verjetno ni nove verzije"));
+ break;
+ case HTTP_UPDATE_OK:
+ server.send(200, "text/html", fihr(200, "OK: programska posodobitev: uspela, po ponovnem zagonu se bo uporabila"));
+ break;
+ }
+}
+void handleUnixTimestamp() {
+ if (!preveriprijavo()) return;
+ server.send(200, "text/plain", String(now()));
+}
+void handleNewPassword() {
+ if (!preveriprijavo()) return;
+ if (!server.hasArg("g") || server.arg("g") == NULL) {
+ server.send(400, "text/html", fihr(400, "obvezen argument: g(eslo-novo)"));
+ return;
+ }
+ writefile("/403/webgeslo.txt", String(server.arg("g")));
+}
+void handleFileUpload() {
+ if (!preveriprijavo()) return;
+ HTTPUpload& upload = server.upload();
+ if(upload.status == UPLOAD_FILE_START){
+ String filename = upload.filename;
+ if(!filename.startsWith("/")) filename = "/"+filename;
+ if (razhroscevanje) Serial.print("(razhroscevanje) -> handleFileUpload Name: "); Serial.println(filename);
+ fsUploadFile = SPIFFS.open(filename, "w"); // Open the file for writing in SPIFFS (create if it doesn't exist)
+ filename = String();
+ } else if(upload.status == UPLOAD_FILE_WRITE){
+ if(fsUploadFile)
+ fsUploadFile.write(upload.buf, upload.currentSize); // Write the received bytes to the file
+ } else if(upload.status == UPLOAD_FILE_END){
+ if(fsUploadFile) { // If the file was successfully created
+ fsUploadFile.close(); // Close the file again
+ Serial.print("handleFileUpload Size: "); Serial.println(upload.totalSize);
+ server.send(200, "text/html", fihr(200, "prenos uspel"));
+ } else {
+ server.send(500, "text/html", fihr(500, "izdelava datoteke ni uspela"));
+ }
+ }
+}
+bool handleFileRead(String path) { // send the right file to the client (if it exists)
+ if (!preveriprijavo()) return false;
+ // Serial.println("handleFileRead: " + path); // 2hc
+ if (path.endsWith("/")) path += "index.html"; // If a folder is requested, send the index file
+ if(path.indexOf("/403/") >= 0) {
+ server.send(403, "text/html", fihr(403, "prepovedano"));
+ return true;
+ }
+ String contentType = getContentType(path); // Get the MIME type
+ if (SPIFFS.exists(path)) { // If the file exists
+ File file = SPIFFS.open(path, "r"); // Open it
+ size_t sent = server.streamFile(file, contentType); // And send it to the client
+ file.close(); // Then close the file again
+ return true;
+ }
+ return false; // If the file doesn't exist, return false
+}