1
0
镜像自地址 https://github.com/s00500/ESPUI.git 已同步 2025-09-17 17:12:09 +00:00

#44 Adding Basic Auth

- Also authing websockets
- Implemented on begin and beginSpiffs
- Added notes to Gui example
这个提交包含在:
2018-12-26 13:38:38 +01:00
父节点 f31575b50c
当前提交 7a10457f99
共有 3 个文件被更改,包括 90 次插入10 次删除

查看文件

@@ -157,11 +157,19 @@ void setup(void) {
/*
.begin loads and serves all files from PROGMEM directly.
If you want to serve the files from SPIFFS use .beginSPIFFS
If you want to serve the files from SPIFFS use ESPUI.beginSPIFFS
(.prepareFileSystem has to be run in an empty sketch before)
*/
dnsServer.start(DNS_PORT, "*", apIP);
/*
* Optionally you can use HTTP BasicAuth. Keep in mind that this is NOT a
SECURE way of limiting access.
* Anyone who is able to sniff traffic will be able to intercept your password
since it is transmitted in cleartext ESPUI.begin("ESPUI Control", "myuser",
"mypassword");
*/
ESPUI.begin("ESPUI Control");
}

查看文件

@@ -649,6 +649,12 @@ void ESPUIClass::jsonDom(AsyncWebSocketClient *client) {
}
void ESPUIClass::beginSPIFFS(const char *_title) {
begin(_title, NULL, NULL);
basicAuth = false;
}
void ESPUIClass::beginSPIFFS(const char *_title, const char *username,
const char *password) {
ui_title = _title;
server = new AsyncWebServer(80);
ws = new AsyncWebSocket("/ws");
@@ -670,10 +676,28 @@ void ESPUIClass::beginSPIFFS(const char *_title) {
ws->onEvent(onWsEvent);
server->addHandler(ws);
server->serveStatic("/", SPIFFS, "/").setDefaultFile("index.htm");
if (basicAuth && username != NULL && password != NULL) {
basicAuthPassword = password;
basicAuthUsername = username;
basicAuth = true;
ws->setAuthentication(this->basicAuthUsername, this->basicAuthPassword);
server->serveStatic("/", SPIFFS, "/")
.setDefaultFile("index.htm")
.setAuthentication(ESPUI.basicAuthUsername, ESPUI.basicAuthPassword);
} else if (basicAuth) {
Serial.println(
"Could not enable BasicAuth: Username or password are not set");
} else {
server->serveStatic("/", SPIFFS, "/").setDefaultFile("index.htm");
}
// Heap for general Servertest
server->on("/heap", HTTP_GET, [](AsyncWebServerRequest *request) {
if (ESPUI.basicAuth && !request->authenticate(ESPUI.basicAuthUsername,
ESPUI.basicAuthPassword))
return request->requestAuthentication();
request->send(200, "text/plain",
String(ESP.getFreeHeap()) + " In SPIFFSmode");
});
@@ -681,26 +705,49 @@ void ESPUIClass::beginSPIFFS(const char *_title) {
server->onNotFound(
[](AsyncWebServerRequest *request) { request->send(404); });
server->on("/zepto.js", HTTP_GET, [](AsyncWebServerRequest *request) {
AsyncWebServerResponse *response = request->beginResponse_P(
200, "application/javascript", JS_ZEPTO_GZIP, sizeof(JS_ZEPTO_GZIP));
response->addHeader("Content-Encoding", "gzip");
request->send(response);
});
server->begin();
if (DEBUG_ESPUI) Serial.println("UI Initialized");
}
void ESPUIClass::begin(const char *_title) {
begin(_title, NULL, NULL);
basicAuth = false;
}
void ESPUIClass::begin(const char *_title, const char *username,
const char *password) {
if (basicAuth && username != NULL && password != NULL) {
basicAuthPassword = password;
basicAuthUsername = username;
basicAuth = true;
} else if (basicAuth) {
Serial.println(
"Could not enable BasicAuth: Username or password are not set");
}
ui_title = _title;
server = new AsyncWebServer(80);
ws = new AsyncWebSocket("/ws");
ws->onEvent(onWsEvent);
server->addHandler(ws);
if (basicAuth && username != NULL && password != NULL) {
basicAuthPassword = password;
basicAuthUsername = username;
basicAuth = true;
ws->setAuthentication(this->basicAuthUsername, this->basicAuthPassword);
} else if (basicAuth) {
Serial.println(
"Could not enable BasicAuth: Username or password are not set");
}
server->on("/", HTTP_GET, [](AsyncWebServerRequest *request) {
if (ESPUI.basicAuth && !request->authenticate(ESPUI.basicAuthUsername,
ESPUI.basicAuthPassword))
return request->requestAuthentication();
AsyncWebServerResponse *response =
request->beginResponse_P(200, "text/html", HTML_INDEX);
request->send(response);
@@ -709,6 +756,9 @@ void ESPUIClass::begin(const char *_title) {
// Javascript files
server->on("/js/zepto.min.js", HTTP_GET, [](AsyncWebServerRequest *request) {
if (ESPUI.basicAuth && !request->authenticate(ESPUI.basicAuthUsername,
ESPUI.basicAuthPassword))
return request->requestAuthentication();
AsyncWebServerResponse *response = request->beginResponse_P(
200, "application/javascript", JS_ZEPTO_GZIP, sizeof(JS_ZEPTO_GZIP));
response->addHeader("Content-Encoding", "gzip");
@@ -716,6 +766,9 @@ void ESPUIClass::begin(const char *_title) {
});
server->on("/js/controls.js", HTTP_GET, [](AsyncWebServerRequest *request) {
if (ESPUI.basicAuth && !request->authenticate(ESPUI.basicAuthUsername,
ESPUI.basicAuthPassword))
return request->requestAuthentication();
AsyncWebServerResponse *response =
request->beginResponse_P(200, "application/javascript",
JS_CONTROLS_GZIP, sizeof(JS_CONTROLS_GZIP));
@@ -724,6 +777,9 @@ void ESPUIClass::begin(const char *_title) {
});
server->on("/js/slider.js", HTTP_GET, [](AsyncWebServerRequest *request) {
if (ESPUI.basicAuth && !request->authenticate(ESPUI.basicAuthUsername,
ESPUI.basicAuthPassword))
return request->requestAuthentication();
AsyncWebServerResponse *response = request->beginResponse_P(
200, "application/javascript", JS_SLIDER_GZIP, sizeof(JS_SLIDER_GZIP));
response->addHeader("Content-Encoding", "gzip");
@@ -733,6 +789,9 @@ void ESPUIClass::begin(const char *_title) {
// Stylesheets
server->on("/css/style.css", HTTP_GET, [](AsyncWebServerRequest *request) {
if (ESPUI.basicAuth && !request->authenticate(ESPUI.basicAuthUsername,
ESPUI.basicAuthPassword))
return request->requestAuthentication();
AsyncWebServerResponse *response = request->beginResponse_P(
200, "text/css", CSS_STYLE_GZIP, sizeof(CSS_STYLE_GZIP));
response->addHeader("Content-Encoding", "gzip");
@@ -741,6 +800,9 @@ void ESPUIClass::begin(const char *_title) {
server->on(
"/css/normalize.css", HTTP_GET, [](AsyncWebServerRequest *request) {
if (ESPUI.basicAuth && !request->authenticate(ESPUI.basicAuthUsername,
ESPUI.basicAuthPassword))
return request->requestAuthentication();
AsyncWebServerResponse *response = request->beginResponse_P(
200, "text/css", CSS_NORMALIZE_GZIP, sizeof(CSS_NORMALIZE_GZIP));
response->addHeader("Content-Encoding", "gzip");
@@ -749,6 +811,9 @@ void ESPUIClass::begin(const char *_title) {
// Heap for general Servertest
server->on("/heap", HTTP_GET, [](AsyncWebServerRequest *request) {
if (ESPUI.basicAuth && !request->authenticate(ESPUI.basicAuthUsername,
ESPUI.basicAuthPassword))
return request->requestAuthentication();
request->send(200, "text/plain",
String(ESP.getFreeHeap()) + " In Memorymode");
});

查看文件

@@ -101,8 +101,12 @@ typedef struct Control {
class ESPUIClass {
public:
void begin(const char *_title); // Setup servers and page in Memorymode
void begin(const char *_title); // Setup servers and page in Memorymode
void begin(const char *_title, const char *username, const char *password);
void beginSPIFFS(const char *_title); // Setup servers and page in SPIFFSmode
void beginSPIFFS(const char *_title, const char *username,
const char *password);
void prepareFileSystem(); // Initially preps the filesystem and loads a lot
// of stuff into SPIFFS
@@ -160,6 +164,9 @@ class ESPUIClass {
bool labelExists(String label);
private:
const char *basicAuthUsername;
const char *basicAuthPassword;
bool basicAuth = true;
AsyncWebServer *server;
AsyncWebSocket *ws;
};