feat: web server with REST API, captive portal, and management UI

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-03 10:59:26 -04:00
parent 798b0d0276
commit c98e34256e
6 changed files with 670 additions and 0 deletions

40
src/web_server.h Normal file
View File

@@ -0,0 +1,40 @@
#pragma once
#include <Arduino.h>
#include <ESPAsyncWebServer.h>
#include <functional>
#include "settings.h"
class ImmichClient;
class PowerManager;
class WiFiManager;
class AppWebServer {
public:
void begin(SettingsManager& settings, ImmichClient& immich,
PowerManager& power, WiFiManager& wifi);
void setActionCallback(std::function<void(const String& action)> cb);
bool isOTAInProgress();
private:
AsyncWebServer _server{80};
SettingsManager* _settings = nullptr;
ImmichClient* _immich = nullptr;
PowerManager* _power = nullptr;
WiFiManager* _wifi = nullptr;
std::function<void(const String& action)> _actionCb;
bool _otaInProgress = false;
void setupCaptivePortal();
void setupAPIRoutes();
void setupStaticFiles();
void setupOTA();
void handleGetStatus(AsyncWebServerRequest* request);
void handleGetAlbums(AsyncWebServerRequest* request);
void handlePostAlbumsSelect(AsyncWebServerRequest* request, uint8_t* data, size_t len);
void handleGetSettings(AsyncWebServerRequest* request);
void handlePostSettings(AsyncWebServerRequest* request, uint8_t* data, size_t len);
void handlePostAction(AsyncWebServerRequest* request);
void handlePostSetup(AsyncWebServerRequest* request, uint8_t* data, size_t len);
};