|
|
@ -126,8 +126,19 @@ class Web { |
|
|
|
mProtected = protect; |
|
|
|
} |
|
|
|
|
|
|
|
bool getProtection() { |
|
|
|
return mProtected; |
|
|
|
bool isProtected(AsyncWebServerRequest *request) { |
|
|
|
bool prot; |
|
|
|
prot = mProtected; |
|
|
|
if(!prot) { |
|
|
|
uint8_t ip[4]; |
|
|
|
ah::ip2Arr(ip, request->client()->remoteIP().toString().c_str()); |
|
|
|
for(uint8_t i = 0; i < 4; i++) { |
|
|
|
if(mLoginIp[i] != ip[i]) |
|
|
|
prot = true; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return prot; |
|
|
|
} |
|
|
|
|
|
|
|
void showUpdate2(AsyncWebServerRequest *request, String filename, size_t index, uint8_t *data, size_t len, bool final) { |
|
|
@ -216,7 +227,7 @@ class Web { |
|
|
|
} |
|
|
|
|
|
|
|
private: |
|
|
|
void checkRedirect(AsyncWebServerRequest *request) { |
|
|
|
inline void checkRedirect(AsyncWebServerRequest *request) { |
|
|
|
if ((mConfig->sys.protectionMask & PROT_MASK_INDEX) != PROT_MASK_INDEX) |
|
|
|
request->redirect(F("/index")); |
|
|
|
else if ((mConfig->sys.protectionMask & PROT_MASK_LIVE) != PROT_MASK_LIVE) |
|
|
@ -229,15 +240,18 @@ class Web { |
|
|
|
request->redirect(F("/login")); |
|
|
|
} |
|
|
|
|
|
|
|
void checkProtection(AsyncWebServerRequest *request) { |
|
|
|
if(isProtected(request)) { |
|
|
|
checkRedirect(request); |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void onUpdate(AsyncWebServerRequest *request) { |
|
|
|
DPRINTLN(DBG_VERBOSE, F("onUpdate")); |
|
|
|
|
|
|
|
if (CHECK_MASK(mConfig->sys.protectionMask, PROT_MASK_UPDATE)) { |
|
|
|
if (mProtected) { |
|
|
|
checkRedirect(request); |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
if (CHECK_MASK(mConfig->sys.protectionMask, PROT_MASK_UPDATE)) |
|
|
|
checkProtection(request); |
|
|
|
|
|
|
|
AsyncWebServerResponse *response = request->beginResponse_P(200, F("text/html; charset=UTF-8"), update_html, update_html_len); |
|
|
|
response->addHeader(F("Content-Encoding"), "gzip"); |
|
|
@ -290,12 +304,8 @@ class Web { |
|
|
|
void onIndex(AsyncWebServerRequest *request) { |
|
|
|
DPRINTLN(DBG_VERBOSE, F("onIndex")); |
|
|
|
|
|
|
|
if (CHECK_MASK(mConfig->sys.protectionMask, PROT_MASK_INDEX)) { |
|
|
|
if (mProtected) { |
|
|
|
checkRedirect(request); |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
if (CHECK_MASK(mConfig->sys.protectionMask, PROT_MASK_INDEX)) |
|
|
|
checkProtection(request); |
|
|
|
|
|
|
|
AsyncWebServerResponse *response = request->beginResponse_P(200, F("text/html; charset=UTF-8"), index_html, index_html_len); |
|
|
|
response->addHeader(F("Content-Encoding"), "gzip"); |
|
|
@ -308,6 +318,7 @@ class Web { |
|
|
|
if (request->args() > 0) { |
|
|
|
if (String(request->arg("pwd")) == String(mConfig->sys.adminPwd)) { |
|
|
|
mProtected = false; |
|
|
|
ah::ip2Arr(mLoginIp, request->client()->remoteIP().toString().c_str()); |
|
|
|
request->redirect("/"); |
|
|
|
} |
|
|
|
} |
|
|
@ -320,10 +331,7 @@ class Web { |
|
|
|
void onLogout(AsyncWebServerRequest *request) { |
|
|
|
DPRINTLN(DBG_VERBOSE, F("onLogout")); |
|
|
|
|
|
|
|
if (mProtected) { |
|
|
|
checkRedirect(request); |
|
|
|
return; |
|
|
|
} |
|
|
|
checkProtection(request); |
|
|
|
|
|
|
|
mProtected = true; |
|
|
|
|
|
|
@ -367,10 +375,8 @@ class Web { |
|
|
|
} |
|
|
|
|
|
|
|
void showNotFound(AsyncWebServerRequest *request) { |
|
|
|
if (mProtected) |
|
|
|
checkRedirect(request); |
|
|
|
else |
|
|
|
request->redirect("/setup"); |
|
|
|
checkProtection(request); |
|
|
|
request->redirect("/setup"); |
|
|
|
} |
|
|
|
|
|
|
|
void onReboot(AsyncWebServerRequest *request) { |
|
|
@ -381,10 +387,7 @@ class Web { |
|
|
|
} |
|
|
|
|
|
|
|
void showErase(AsyncWebServerRequest *request) { |
|
|
|
if (mProtected) { |
|
|
|
checkRedirect(request); |
|
|
|
return; |
|
|
|
} |
|
|
|
checkProtection(request); |
|
|
|
|
|
|
|
DPRINTLN(DBG_VERBOSE, F("showErase")); |
|
|
|
mApp->eraseSettings(false); |
|
|
@ -392,10 +395,7 @@ class Web { |
|
|
|
} |
|
|
|
|
|
|
|
void showFactoryRst(AsyncWebServerRequest *request) { |
|
|
|
if (mProtected) { |
|
|
|
checkRedirect(request); |
|
|
|
return; |
|
|
|
} |
|
|
|
checkProtection(request); |
|
|
|
|
|
|
|
DPRINTLN(DBG_VERBOSE, F("showFactoryRst")); |
|
|
|
String content = ""; |
|
|
@ -424,12 +424,8 @@ class Web { |
|
|
|
void onSetup(AsyncWebServerRequest *request) { |
|
|
|
DPRINTLN(DBG_VERBOSE, F("onSetup")); |
|
|
|
|
|
|
|
if (CHECK_MASK(mConfig->sys.protectionMask, PROT_MASK_SETUP)) { |
|
|
|
if (mProtected) { |
|
|
|
checkRedirect(request); |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
if (CHECK_MASK(mConfig->sys.protectionMask, PROT_MASK_SETUP)) |
|
|
|
checkProtection(request); |
|
|
|
|
|
|
|
AsyncWebServerResponse *response = request->beginResponse_P(200, F("text/html; charset=UTF-8"), setup_html, setup_html_len); |
|
|
|
response->addHeader(F("Content-Encoding"), "gzip"); |
|
|
@ -439,10 +435,7 @@ class Web { |
|
|
|
void showSave(AsyncWebServerRequest *request) { |
|
|
|
DPRINTLN(DBG_VERBOSE, F("showSave")); |
|
|
|
|
|
|
|
if (mProtected) { |
|
|
|
checkRedirect(request); |
|
|
|
return; |
|
|
|
} |
|
|
|
checkProtection(request); |
|
|
|
|
|
|
|
if (request->args() == 0) |
|
|
|
return; |
|
|
@ -605,12 +598,8 @@ class Web { |
|
|
|
void onLive(AsyncWebServerRequest *request) { |
|
|
|
DPRINTLN(DBG_VERBOSE, F("onLive")); |
|
|
|
|
|
|
|
if (CHECK_MASK(mConfig->sys.protectionMask, PROT_MASK_LIVE)) { |
|
|
|
if (mProtected) { |
|
|
|
checkRedirect(request); |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
if (CHECK_MASK(mConfig->sys.protectionMask, PROT_MASK_LIVE)) |
|
|
|
checkProtection(request); |
|
|
|
|
|
|
|
AsyncWebServerResponse *response = request->beginResponse_P(200, F("text/html; charset=UTF-8"), visualization_html, visualization_html_len); |
|
|
|
response->addHeader(F("Content-Encoding"), "gzip"); |
|
|
@ -620,13 +609,6 @@ class Web { |
|
|
|
} |
|
|
|
|
|
|
|
void onAbout(AsyncWebServerRequest *request) { |
|
|
|
if (CHECK_MASK(mConfig->sys.protectionMask, PROT_MASK_LIVE)) { |
|
|
|
if (mProtected) { |
|
|
|
checkRedirect(request); |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
AsyncWebServerResponse *response = request->beginResponse_P(200, F("text/html; charset=UTF-8"), about_html, about_html_len); |
|
|
|
response->addHeader(F("Content-Encoding"), "gzip"); |
|
|
|
response->addHeader(F("content-type"), "text/html; charset=UTF-8"); |
|
|
@ -643,12 +625,8 @@ class Web { |
|
|
|
void onSerial(AsyncWebServerRequest *request) { |
|
|
|
DPRINTLN(DBG_VERBOSE, F("onSerial")); |
|
|
|
|
|
|
|
if (CHECK_MASK(mConfig->sys.protectionMask, PROT_MASK_SERIAL)) { |
|
|
|
if (mProtected) { |
|
|
|
checkRedirect(request); |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
if (CHECK_MASK(mConfig->sys.protectionMask, PROT_MASK_SERIAL)) |
|
|
|
checkProtection(request); |
|
|
|
|
|
|
|
AsyncWebServerResponse *response = request->beginResponse_P(200, F("text/html; charset=UTF-8"), serial_html, serial_html_len); |
|
|
|
response->addHeader(F("Content-Encoding"), "gzip"); |
|
|
@ -658,12 +636,8 @@ class Web { |
|
|
|
void onSystem(AsyncWebServerRequest *request) { |
|
|
|
DPRINTLN(DBG_VERBOSE, F("onSystem")); |
|
|
|
|
|
|
|
if (CHECK_MASK(mConfig->sys.protectionMask, PROT_MASK_SYSTEM)) { |
|
|
|
if (mProtected) { |
|
|
|
checkRedirect(request); |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
if (CHECK_MASK(mConfig->sys.protectionMask, PROT_MASK_SYSTEM)) |
|
|
|
checkProtection(request); |
|
|
|
|
|
|
|
AsyncWebServerResponse *response = request->beginResponse_P(200, F("text/html; charset=UTF-8"), system_html, system_html_len); |
|
|
|
response->addHeader(F("Content-Encoding"), "gzip"); |
|
|
@ -840,6 +814,7 @@ class Web { |
|
|
|
AsyncEventSource mEvts; |
|
|
|
bool mProtected; |
|
|
|
uint32_t mLogoutTimeout; |
|
|
|
uint8_t mLoginIp[4]; |
|
|
|
IApp *mApp; |
|
|
|
HMSYSTEM *mSys; |
|
|
|
|
|
|
|