mirror of
https://github.com/esphome/esphome.git
synced 2025-11-20 08:46:01 +00:00
Add Captive Portal (#624)
* WIP: Captive Portal * Updates * Updates * Lint * Fixes
This commit is contained in:
76
esphome/components/web_server_base/web_server_base.h
Normal file
76
esphome/components/web_server_base/web_server_base.h
Normal file
@@ -0,0 +1,76 @@
|
||||
#pragma once
|
||||
|
||||
#include "esphome/core/component.h"
|
||||
|
||||
#include <ESPAsyncWebServer.h>
|
||||
|
||||
namespace esphome {
|
||||
namespace web_server_base {
|
||||
|
||||
class WebServerBase : public Component {
|
||||
public:
|
||||
void init() {
|
||||
if (this->initialized_) {
|
||||
this->initialized_++;
|
||||
return;
|
||||
}
|
||||
this->server_ = new AsyncWebServer(this->port_);
|
||||
this->server_->begin();
|
||||
|
||||
for (auto *handler : this->handlers_)
|
||||
this->server_->addHandler(handler);
|
||||
|
||||
this->initialized_++;
|
||||
}
|
||||
void deinit() {
|
||||
this->initialized_--;
|
||||
if (this->initialized_ == 0) {
|
||||
delete this->server_;
|
||||
this->server_ = nullptr;
|
||||
}
|
||||
}
|
||||
AsyncWebServer *get_server() const { return server_; }
|
||||
float get_setup_priority() const override;
|
||||
|
||||
void add_handler(AsyncWebHandler *handler) {
|
||||
// remove all handlers
|
||||
|
||||
this->handlers_.push_back(handler);
|
||||
if (this->server_ != nullptr)
|
||||
this->server_->addHandler(handler);
|
||||
}
|
||||
|
||||
void add_ota_handler();
|
||||
|
||||
void set_port(uint16_t port) { port_ = port; }
|
||||
uint16_t get_port() const { return port_; }
|
||||
|
||||
protected:
|
||||
friend class OTARequestHandler;
|
||||
|
||||
int initialized_{0};
|
||||
uint16_t port_{80};
|
||||
AsyncWebServer *server_{nullptr};
|
||||
std::vector<AsyncWebHandler *> handlers_;
|
||||
};
|
||||
|
||||
class OTARequestHandler : public AsyncWebHandler {
|
||||
public:
|
||||
OTARequestHandler(WebServerBase *parent) : parent_(parent) {}
|
||||
void handleRequest(AsyncWebServerRequest *request) override;
|
||||
void handleUpload(AsyncWebServerRequest *request, const String &filename, size_t index, uint8_t *data, size_t len,
|
||||
bool final) override;
|
||||
bool canHandle(AsyncWebServerRequest *request) override {
|
||||
return request->url() == "/update" && request->method() == HTTP_POST;
|
||||
}
|
||||
|
||||
bool isRequestHandlerTrivial() override { return false; }
|
||||
|
||||
protected:
|
||||
uint32_t last_ota_progress_{0};
|
||||
uint32_t ota_read_length_{0};
|
||||
WebServerBase *parent_;
|
||||
};
|
||||
|
||||
} // namespace web_server_base
|
||||
} // namespace esphome
|
||||
Reference in New Issue
Block a user