123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- /* Web Server */
- const String webroot = "/web/"; //Require tailing slash
- // Function to serve files
- void handleFileServe(AsyncWebServerRequest *request) {
- String path = request->url();
- String filepath = path;
- filepath.remove(0, 1); // Trim the prefix slash in uri
- filepath = webroot + filepath;
- Serial.println(filepath);
- if (SD.exists(filepath)) {
- request->send(SD, filepath, getMime(filepath));
- } else {
- handleRootRedirect(request);
- }
- }
- void sendNotFound(AsyncWebServerRequest *request) {
- request->send(404, "text/plain", "404 - Not found");
- }
- // Redirect request to index.html
- void handleRootRedirect(AsyncWebServerRequest *request) {
- request->redirect("/index.html");
- }
- //Register all the required API endpoint for web server
- void registerAPIEndpoints() {
- /* Basic handlers */
- server.on("/", HTTP_GET, [](AsyncWebServerRequest * request) {
- handleRootRedirect(request);
- });
- server.onNotFound([](AsyncWebServerRequest * request) {
- handleFileServe(request);
- });
- server.on("/upload", HTTP_POST, [](AsyncWebServerRequest * request) {
- request->send(200); // Send empty response for the upload URL
- }, handleFileUpload);
- /* Application APIs */
- server.on("/api/ctr/emoji", HTTP_GET, handleRenderEmoji);
- server.on("/api/ctr/move", HTTP_GET, handleMovements);
- server.on("/api/ctr/cover", HTTP_GET, handleCover);
- server.on("/api/ctr/pusher", HTTP_GET, handlePusher);
- server.on("/api/fs/listDir", HTTP_GET, handleListDir);
- server.on("/api/fs/download", HTTP_GET, handleFileDownload);
- server.on("/api/fs/delete", HTTP_GET, handleFileDelete);
- server.on("/api/ipaddr", HTTP_GET, handleGetIPAddress);
- }
- //ip addr
- void handleGetIPAddress(AsyncWebServerRequest *request) {
- String ipAddress;
- if (!ENABLE_WIFI_DEBUG) {
- ipAddress = WiFi.softAPIP().toString();
- } else {
- ipAddress = WiFi.localIP().toString();
- }
- request->send(200, "application/json", "{\"ip\":\"" + ipAddress + "\"}");
- }
- /* Utilities */
- String GetPara(AsyncWebServerRequest *request, String key) {
- if (request->hasParam(key)) {
- return request->getParam(key)->value();
- }
- return "";
- }
- //Get the filename from filepath
- String basename(const String& filePath) {
- int lastSlashIndex = filePath.lastIndexOf('/');
- // If no slash is found, return the original path
- if (lastSlashIndex == -1) {
- return filePath;
- }
- // Return the substring after the last slash
- return filePath.substring(lastSlashIndex + 1);
- }
- String getMime(const String& path) {
- String _contentType = "text/plain";
- if (path.endsWith(".html")) _contentType = "text/html";
- else if (path.endsWith(".htm")) _contentType = "text/html";
- else if (path.endsWith(".css")) _contentType = "text/css";
- else if (path.endsWith(".json")) _contentType = "text/json";
- else if (path.endsWith(".js")) _contentType = "application/javascript";
- else if (path.endsWith(".png")) _contentType = "image/png";
- else if (path.endsWith(".gif")) _contentType = "image/gif";
- else if (path.endsWith(".jpg")) _contentType = "image/jpeg";
- else if (path.endsWith(".ico")) _contentType = "image/x-icon";
- else if (path.endsWith(".svg")) _contentType = "image/svg+xml";
- else if (path.endsWith(".eot")) _contentType = "font/eot";
- else if (path.endsWith(".woff")) _contentType = "font/woff";
- else if (path.endsWith(".woff2")) _contentType = "font/woff2";
- else if (path.endsWith(".ttf")) _contentType = "font/ttf";
- else if (path.endsWith(".xml")) _contentType = "text/xml";
- else if (path.endsWith(".pdf")) _contentType = "application/pdf";
- else if (path.endsWith(".zip")) _contentType = "application/zip";
- else if (path.endsWith(".gz")) _contentType = "application/x-gzip";
- else if (path.endsWith(".mp3")) _contentType = "audio/mpeg";
- else if (path.endsWith(".mp4")) _contentType = "video/mp4";
- else if (path.endsWith(".aac")) _contentType = "audio/aac";
- else if (path.endsWith(".ogg")) _contentType = "audio/ogg";
- else if (path.endsWith(".wav")) _contentType = "audio/wav";
- else if (path.endsWith(".m4v")) _contentType = "video/x-m4v";
- else if (path.endsWith(".webm")) _contentType = "video/webm";
- else _contentType = "text/plain";
- return _contentType;
- }
|