/* * ---------------------------------------------------------------------------- * "THE BEER-WARE LICENSE" (Revision 42): * Jeroen Domburg wrote this file. As long as you retain * this notice you can do whatever you want with this stuff. If we meet some day, * and you think this stuff is worth it, you can buy me a beer in return. * ---------------------------------------------------------------------------- */ #include #include "httpd.h" #include "io.h" #include "httpdespfs.h" #include "cgi.h" #include "cgiwifi.h" #include "cgiflash.h" #include "stdout.h" #include "auth.h" #include "espfs.h" //#define SHOW_HEAP_USE //Function that tells the authentication system what users/passwords live on the system. //This is disabled in the default build; if you want to try it, enable the authBasic line in //the builtInUrls below. int myPassFn(HttpdConnData *connData, int no, char *user, int userLen, char *pass, int passLen) { if (no==0) { os_strcpy(user, "admin"); os_strcpy(pass, "s3cr3t"); return 1; //Add more users this way. Check against incrementing no for each user added. // } else if (no==1) { // os_strcpy(user, "user1"); // os_strcpy(pass, "something"); // return 1; } return 0; } /* This is the main url->function dispatching data struct. In short, it's a struct with various URLs plus their handlers. The handlers can be 'standard' CGI functions you wrote, or 'special' CGIs requiring an argument. They can also be auth-functions. An asterisk will match any url starting with everything before the asterisks; "*" matches everything. The list will be handled top-down, so make sure to put more specific rules above the more general ones. Authorization things (like authBasic) act as a 'barrier' and should be placed above the URLs they protect. */ HttpdBuiltInUrl builtInUrls[]={ {"/", cgiRedirect, "/index.tpl"}, {"/flash.bin", cgiReadFlash, NULL}, {"/led.tpl", cgiEspFsTemplate, tplLed}, {"/index.tpl", cgiEspFsTemplate, tplCounter}, {"/led.cgi", cgiLed, NULL}, {"/updateweb.cgi", cgiUploadEspfs, NULL}, //Routines to make the /wifi URL and everything beneath it work. //Enable the line below to protect the WiFi configuration with an username/password combo. // {"/wifi/*", authBasic, myPassFn}, {"/wifi", cgiRedirect, "/wifi/wifi.tpl"}, {"/wifi/", cgiRedirect, "/wifi/wifi.tpl"}, {"/wifi/wifiscan.cgi", cgiWiFiScan, NULL}, {"/wifi/wifi.tpl", cgiEspFsTemplate, tplWlan}, {"/wifi/connect.cgi", cgiWiFiConnect, NULL}, {"/wifi/connstatus.cgi", cgiWiFiConnStatus, NULL}, {"/wifi/setmode.cgi", cgiWiFiSetMode, NULL}, {"*", cgiEspFsHook, NULL}, //Catch-all cgi function for the filesystem {NULL, NULL, NULL} }; #ifdef SHOW_HEAP_USE static ETSTimer prHeapTimer; static void ICACHE_FLASH_ATTR prHeapTimerCb(void *arg) { os_printf("Heap: %ld\n", (unsigned long)system_get_free_heap_size()); } #endif // address of espfs binary blob extern uint8_t _binary_espfs_img_start; //Main routine. Initialize stdout, the I/O, filesystem and the webserver and we're done. void user_init(void) { stdoutInit(); ioInit(); os_delay_us(10000L); os_printf("\n\nInitializing esphttpd\n"); // 0x40200000 is the base address for spi flash memory mapping, ESPFS_POS is the position // where image is written in flash that is defined in Makefile. //EspFsInitResult res = espFsInit((void*)(0x40200000 + ESPFS_POS)); EspFsInitResult res = espFsInit(&_binary_espfs_img_start); os_printf("espFsInit(0x%08lx) returned %d\n", (uint32_t)&_binary_espfs_img_start, res); httpdInit(builtInUrls, 80); #ifdef SHOW_HEAP_USE os_timer_disarm(&prHeapTimer); os_timer_setfn(&prHeapTimer, prHeapTimerCb, NULL); os_timer_arm(&prHeapTimer, 3000, 1); #endif os_printf("\nReady\n"); }