** Function: configureWebServer ** configure web server **********************************************************************/
| 400 | ** configure web server |
| 401 | **********************************************************************/ |
| 402 | void configureWebServer() { |
| 403 | mdnsRunning = startMdnsResponder(); |
| 404 | DefaultHeaders::Instance().addHeader("Access-Control-Allow-Origin", "*"); |
| 405 | server->onNotFound(notFound); |
| 406 | |
| 407 | // Index |
| 408 | server->on("/", HTTP_GET, [](AsyncWebServerRequest *request) { |
| 409 | if (checkUserWebAuth(request, true)) { |
| 410 | serveWebUIFile(request, "index.html", "text/html", true, index_html, index_html_size); |
| 411 | } |
| 412 | }); |
| 413 | |
| 414 | // Login |
| 415 | server->on("/login", HTTP_POST, [](AsyncWebServerRequest *request) { |
| 416 | if (request->hasParam("username", true) && request->hasParam("password", true)) { |
| 417 | String username = request->getParam("username", true)->value(); |
| 418 | String password = request->getParam("password", true)->value(); |
| 419 | |
| 420 | if (username == bruceConfig.webUI.user && password == bruceConfig.webUI.pwd) { |
| 421 | String token = generateToken(); |
| 422 | AsyncWebServerResponse *response = request->beginResponse(302); |
| 423 | response->addHeader("Location", "/"); |
| 424 | response->addHeader("Set-Cookie", "BRUCESESSION=" + token + "; Path=/; HttpOnly"); |
| 425 | request->send(response); |
| 426 | bruceConfig.addWebUISession(token); |
| 427 | return; |
| 428 | } |
| 429 | } |
| 430 | AsyncWebServerResponse *response = request->beginResponse(302); |
| 431 | response->addHeader("Location", "/?failed"); |
| 432 | request->send(response); |
| 433 | }); |
| 434 | |
| 435 | // Logout |
| 436 | server->on("/logout", HTTP_GET, [](AsyncWebServerRequest *request) { |
| 437 | if (request->hasHeader("Cookie")) { |
| 438 | const AsyncWebHeader *cookie = request->getHeader("Cookie"); |
| 439 | String c = cookie->value(); |
| 440 | int idx = c.indexOf("BRUCESESSION="); |
| 441 | if (idx != -1) { |
| 442 | int start = idx + 13; |
| 443 | int end = c.indexOf(';', start); |
| 444 | if (end == -1) end = c.length(); |
| 445 | String token = c.substring(start, end); |
| 446 | bruceConfig.removeWebUISession(token); |
| 447 | } |
| 448 | } |
| 449 | AsyncWebServerResponse *response = request->beginResponse(302); |
| 450 | response->addHeader("Location", "/?loggedout"); |
| 451 | response->addHeader("Set-Cookie", "BRUCESESSION=0; Path=/; Expires=Thu, 01 Jan 1970 00:00:00 GMT"); |
| 452 | request->send(response); |
| 453 | }); |
| 454 | |
| 455 | // Static files |
| 456 | server->on("/theme.css", HTTP_GET, [](AsyncWebServerRequest *request) { |
| 457 | serveWebUIFile(request, "theme.css", "text/css"); |
| 458 | }); |
| 459 | server->on("/index.css", HTTP_GET, [](AsyncWebServerRequest *request) { |
no test coverage detected