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()); server.send(200, "text/html", fihr(200, "OK")); } else { digitalWrite(pin2gpio(server.arg("p")), server.arg("v").toInt());server.send(200, "text/html", fihr(200, "OK")); } } else { pinMode(pin2gpio(server.arg("p")), INPUT); delay(1); // idk if(server.arg("p").substring(0, 1) == "a" || server.arg("p").substring(0, 1) == "A") { ; server.send(200, "text/plain", String(analogRead(pin2gpio(server.arg("p"))))); } else { server.send(200, "text/plain", String(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.softAPConfig(ipas, gatewayas, subnetas); 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/u(ra))). 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("u")) { server.send(200, "text/plain", String(now())); } 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 handleForcedTimeUpdate() { setTime(timeSyncProvider()); server.send(200, "text/html", fihr(200, "ok")); } 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")); } } } void handleFile() { if (!preveriprijavo()) return; if (!server.hasArg("i") || server.arg("i") == NULL || !server.hasArg("v")) { server.send(400, "text/html", fihr(400, "obvezena argumenta: i(me), v(sebina)")); return; } writefile(String(server.arg("i")), String(server.arg("v"))); server.send(200, "text/html", fihr(200, "ok")); } 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 && DISALLOW_403) { 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 }