mirror of
https://github.com/Laxilef/OTGateway.git
synced 2025-12-10 18:24:27 +05:00
101
src/PortalTask.h
101
src/PortalTask.h
@@ -108,8 +108,8 @@ protected:
|
||||
// dashboard page
|
||||
auto dashboardPage = (new StaticPage("/dashboard.html", &LittleFS, F("/pages/dashboard.html"), PORTAL_CACHE))
|
||||
->setBeforeSendCallback([this]() {
|
||||
if (this->isAuthRequired() && !this->webServer->authenticate(settings.portal.login, settings.portal.password)) {
|
||||
this->webServer->requestAuthentication(DIGEST_AUTH);
|
||||
if (this->isAuthRequired() && !this->isValidCredentials()) {
|
||||
this->webServer->requestAuthentication(BASIC_AUTH);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -119,11 +119,9 @@ protected:
|
||||
|
||||
// restart
|
||||
this->webServer->on(F("/restart.html"), HTTP_GET, [this]() {
|
||||
if (this->isAuthRequired()) {
|
||||
if (!this->webServer->authenticate(settings.portal.login, settings.portal.password)) {
|
||||
this->webServer->send(401);
|
||||
return;
|
||||
}
|
||||
if (this->isAuthRequired() && !this->isValidCredentials()) {
|
||||
this->webServer->requestAuthentication(BASIC_AUTH);
|
||||
return;
|
||||
}
|
||||
|
||||
vars.actions.restart = true;
|
||||
@@ -134,8 +132,8 @@ protected:
|
||||
// network settings page
|
||||
auto networkPage = (new StaticPage("/network.html", &LittleFS, F("/pages/network.html"), PORTAL_CACHE))
|
||||
->setBeforeSendCallback([this]() {
|
||||
if (this->isAuthRequired() && !this->webServer->authenticate(settings.portal.login, settings.portal.password)) {
|
||||
this->webServer->requestAuthentication(DIGEST_AUTH);
|
||||
if (this->isAuthRequired() && !this->isValidCredentials()) {
|
||||
this->webServer->requestAuthentication(BASIC_AUTH);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -146,8 +144,8 @@ protected:
|
||||
// settings page
|
||||
auto settingsPage = (new StaticPage("/settings.html", &LittleFS, F("/pages/settings.html"), PORTAL_CACHE))
|
||||
->setBeforeSendCallback([this]() {
|
||||
if (this->isAuthRequired() && !this->webServer->authenticate(settings.portal.login, settings.portal.password)) {
|
||||
this->webServer->requestAuthentication(DIGEST_AUTH);
|
||||
if (this->isAuthRequired() && !this->isValidCredentials()) {
|
||||
this->webServer->requestAuthentication(BASIC_AUTH);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -158,8 +156,8 @@ protected:
|
||||
// sensors page
|
||||
auto sensorsPage = (new StaticPage("/sensors.html", &LittleFS, F("/pages/sensors.html"), PORTAL_CACHE))
|
||||
->setBeforeSendCallback([this]() {
|
||||
if (this->isAuthRequired() && !this->webServer->authenticate(settings.portal.login, settings.portal.password)) {
|
||||
this->webServer->requestAuthentication(DIGEST_AUTH);
|
||||
if (this->isAuthRequired() && !this->isValidCredentials()) {
|
||||
this->webServer->requestAuthentication(BASIC_AUTH);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -170,8 +168,8 @@ protected:
|
||||
// upgrade page
|
||||
auto upgradePage = (new StaticPage("/upgrade.html", &LittleFS, F("/pages/upgrade.html"), PORTAL_CACHE))
|
||||
->setBeforeSendCallback([this]() {
|
||||
if (this->isAuthRequired() && !this->webServer->authenticate(settings.portal.login, settings.portal.password)) {
|
||||
this->webServer->requestAuthentication(DIGEST_AUTH);
|
||||
if (this->isAuthRequired() && !this->isValidCredentials()) {
|
||||
this->webServer->requestAuthentication(BASIC_AUTH);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -181,7 +179,7 @@ protected:
|
||||
|
||||
// OTA
|
||||
auto upgradeHandler = (new UpgradeHandler("/api/upgrade"))->setCanUploadCallback([this](const String& uri) {
|
||||
if (this->isAuthRequired() && !this->webServer->authenticate(settings.portal.login, settings.portal.password)) {
|
||||
if (this->isAuthRequired() && !this->isValidCredentials()) {
|
||||
this->webServer->sendHeader(F("Connection"), F("close"));
|
||||
this->webServer->send(401);
|
||||
return false;
|
||||
@@ -222,10 +220,8 @@ protected:
|
||||
|
||||
// backup
|
||||
this->webServer->on(F("/api/backup/save"), HTTP_GET, [this]() {
|
||||
if (this->isAuthRequired()) {
|
||||
if (!this->webServer->authenticate(settings.portal.login, settings.portal.password)) {
|
||||
return this->webServer->send(401);
|
||||
}
|
||||
if (this->isAuthRequired() && !this->isValidCredentials()) {
|
||||
return this->webServer->send(401);
|
||||
}
|
||||
|
||||
JsonDocument doc;
|
||||
@@ -248,10 +244,8 @@ protected:
|
||||
});
|
||||
|
||||
this->webServer->on(F("/api/backup/restore"), HTTP_POST, [this]() {
|
||||
if (this->isAuthRequired()) {
|
||||
if (!this->webServer->authenticate(settings.portal.login, settings.portal.password)) {
|
||||
return this->webServer->send(401);
|
||||
}
|
||||
if (this->isAuthRequired() && !this->isValidCredentials()) {
|
||||
return this->webServer->send(401);
|
||||
}
|
||||
|
||||
if (vars.states.restarting) {
|
||||
@@ -329,10 +323,8 @@ protected:
|
||||
|
||||
// network
|
||||
this->webServer->on(F("/api/network/settings"), HTTP_GET, [this]() {
|
||||
if (this->isAuthRequired()) {
|
||||
if (!this->webServer->authenticate(settings.portal.login, settings.portal.password)) {
|
||||
return this->webServer->send(401);
|
||||
}
|
||||
if (this->isAuthRequired() && !this->isValidCredentials()) {
|
||||
return this->webServer->send(401);
|
||||
}
|
||||
|
||||
JsonDocument doc;
|
||||
@@ -343,10 +335,8 @@ protected:
|
||||
});
|
||||
|
||||
this->webServer->on(F("/api/network/settings"), HTTP_POST, [this]() {
|
||||
if (this->isAuthRequired()) {
|
||||
if (!this->webServer->authenticate(settings.portal.login, settings.portal.password)) {
|
||||
return this->webServer->send(401);
|
||||
}
|
||||
if (this->isAuthRequired() && !this->isValidCredentials()) {
|
||||
return this->webServer->send(401);
|
||||
}
|
||||
|
||||
if (vars.states.restarting) {
|
||||
@@ -402,11 +392,8 @@ protected:
|
||||
});
|
||||
|
||||
this->webServer->on(F("/api/network/scan"), HTTP_GET, [this]() {
|
||||
if (this->isAuthRequired()) {
|
||||
if (!this->webServer->authenticate(settings.portal.login, settings.portal.password)) {
|
||||
this->webServer->send(401);
|
||||
return;
|
||||
}
|
||||
if (this->isAuthRequired() && !this->isValidCredentials()) {
|
||||
return this->webServer->send(401);
|
||||
}
|
||||
|
||||
auto apCount = WiFi.scanComplete();
|
||||
@@ -448,10 +435,8 @@ protected:
|
||||
|
||||
// settings
|
||||
this->webServer->on(F("/api/settings"), HTTP_GET, [this]() {
|
||||
if (this->isAuthRequired()) {
|
||||
if (!this->webServer->authenticate(settings.portal.login, settings.portal.password)) {
|
||||
return this->webServer->send(401);
|
||||
}
|
||||
if (this->isAuthRequired() && !this->isValidCredentials()) {
|
||||
return this->webServer->send(401);
|
||||
}
|
||||
|
||||
JsonDocument doc;
|
||||
@@ -462,10 +447,8 @@ protected:
|
||||
});
|
||||
|
||||
this->webServer->on(F("/api/settings"), HTTP_POST, [this]() {
|
||||
if (this->isAuthRequired()) {
|
||||
if (!this->webServer->authenticate(settings.portal.login, settings.portal.password)) {
|
||||
return this->webServer->send(401);
|
||||
}
|
||||
if (this->isAuthRequired() && !this->isValidCredentials()) {
|
||||
return this->webServer->send(401);
|
||||
}
|
||||
|
||||
if (vars.states.restarting) {
|
||||
@@ -513,10 +496,8 @@ protected:
|
||||
|
||||
// sensors list
|
||||
this->webServer->on(F("/api/sensors"), HTTP_GET, [this]() {
|
||||
if (this->isAuthRequired()) {
|
||||
if (!this->webServer->authenticate(settings.portal.login, settings.portal.password)) {
|
||||
return this->webServer->send(401);
|
||||
}
|
||||
if (this->isAuthRequired() && !this->isValidCredentials()) {
|
||||
return this->webServer->send(401);
|
||||
}
|
||||
|
||||
bool detailed = false;
|
||||
@@ -543,10 +524,8 @@ protected:
|
||||
|
||||
// sensor settings
|
||||
this->webServer->on(F("/api/sensor"), HTTP_GET, [this]() {
|
||||
if (this->isAuthRequired()) {
|
||||
if (!this->webServer->authenticate(settings.portal.login, settings.portal.password)) {
|
||||
return this->webServer->send(401);
|
||||
}
|
||||
if (this->isAuthRequired() && !this->isValidCredentials()) {
|
||||
return this->webServer->send(401);
|
||||
}
|
||||
|
||||
if (!this->webServer->hasArg(F("id"))) {
|
||||
@@ -571,10 +550,8 @@ protected:
|
||||
});
|
||||
|
||||
this->webServer->on(F("/api/sensor"), HTTP_POST, [this]() {
|
||||
if (this->isAuthRequired()) {
|
||||
if (!this->webServer->authenticate(settings.portal.login, settings.portal.password)) {
|
||||
return this->webServer->send(401);
|
||||
}
|
||||
if (this->isAuthRequired() && !this->isValidCredentials()) {
|
||||
return this->webServer->send(401);
|
||||
}
|
||||
|
||||
if (vars.states.restarting) {
|
||||
@@ -654,10 +631,8 @@ protected:
|
||||
});
|
||||
|
||||
this->webServer->on(F("/api/vars"), HTTP_POST, [this]() {
|
||||
if (this->isAuthRequired()) {
|
||||
if (!this->webServer->authenticate(settings.portal.login, settings.portal.password)) {
|
||||
return this->webServer->send(401);
|
||||
}
|
||||
if (this->isAuthRequired() && !this->isValidCredentials()) {
|
||||
return this->webServer->send(401);
|
||||
}
|
||||
|
||||
const String& plain = this->webServer->arg(0);
|
||||
@@ -956,6 +931,10 @@ protected:
|
||||
return !network->isApEnabled() && settings.portal.auth && strlen(settings.portal.password);
|
||||
}
|
||||
|
||||
bool isValidCredentials() {
|
||||
return this->webServer->authenticate(settings.portal.login, settings.portal.password);
|
||||
}
|
||||
|
||||
void onCaptivePortal() {
|
||||
const String& uri = this->webServer->uri();
|
||||
|
||||
|
||||
@@ -380,13 +380,18 @@
|
||||
console.log(newSettings);
|
||||
}
|
||||
|
||||
let parameters = { cache: 'no-cache' };
|
||||
let parameters = {
|
||||
method: "GET",
|
||||
cache: "no-cache",
|
||||
credentials: "include"
|
||||
};
|
||||
|
||||
if (modified) {
|
||||
parameters.method = "POST";
|
||||
parameters.body = JSON.stringify(newSettings);
|
||||
}
|
||||
|
||||
const response = await fetch('/api/settings', parameters);
|
||||
const response = await fetch("/api/settings", parameters);
|
||||
if (!response.ok) {
|
||||
throw new Error('Response not valid');
|
||||
}
|
||||
@@ -424,7 +429,11 @@
|
||||
|
||||
// vars
|
||||
try {
|
||||
const response = await fetch('/api/vars', { cache: 'no-cache' });
|
||||
const response = await fetch("/api/vars", {
|
||||
cache: "no-cache",
|
||||
credentials: "include"
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error('Response not valid');
|
||||
}
|
||||
@@ -540,7 +549,11 @@
|
||||
|
||||
// sensors
|
||||
try {
|
||||
const response = await fetch("/api/sensors?detailed=1", { cache: "no-cache" });
|
||||
const response = await fetch("/api/sensors?detailed=1", {
|
||||
cache: "no-cache",
|
||||
credentials: "include"
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error("Response not valid");
|
||||
}
|
||||
|
||||
@@ -170,7 +170,11 @@
|
||||
|
||||
setTimeout(async function onLoadPage() {
|
||||
try {
|
||||
const response = await fetch('/api/info', { cache: 'no-cache' });
|
||||
const response = await fetch("/api/info", {
|
||||
cache: "no-cache",
|
||||
credentials: "include"
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error('Response not valid');
|
||||
}
|
||||
|
||||
@@ -199,7 +199,11 @@
|
||||
};
|
||||
|
||||
try {
|
||||
const response = await fetch('/api/network/settings', { cache: 'no-cache' });
|
||||
const response = await fetch("/api/network/settings", {
|
||||
cache: "no-cache",
|
||||
credentials: "include"
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error('Response not valid');
|
||||
}
|
||||
|
||||
@@ -194,7 +194,11 @@
|
||||
const templateNode = container.querySelector("#template");
|
||||
|
||||
try {
|
||||
const response = await fetch("/api/sensors", { cache: "no-cache" });
|
||||
const response = await fetch("/api/sensors", {
|
||||
cache: "no-cache",
|
||||
credentials: "include"
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error("Response not valid");
|
||||
}
|
||||
@@ -287,7 +291,11 @@
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await fetch(sensorForm.action, { cache: "no-cache" });
|
||||
const response = await fetch(sensorForm.action, {
|
||||
cache: "no-cache",
|
||||
credentials: "include"
|
||||
});
|
||||
|
||||
if (response.status != 200) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -808,7 +808,11 @@
|
||||
};
|
||||
|
||||
try {
|
||||
const response = await fetch('/api/settings', { cache: 'no-cache' });
|
||||
const response = await fetch("/api/settings", {
|
||||
cache: "no-cache",
|
||||
credentials: "include"
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error('Response not valid');
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@ class Lang {
|
||||
}
|
||||
|
||||
if (!this.localeIsSupported(this.defaultLocale)) {
|
||||
const selected = this.switcher.selectedIndex ?? 0;
|
||||
const selected = this.switcher.selectedIndex ? this.switcher.selectedIndex : 0;
|
||||
this.defaultLocale = this.switcher.options[selected].value;
|
||||
}
|
||||
|
||||
|
||||
@@ -60,10 +60,11 @@ const setupForm = (formSelector, onResultCallback = null, noCastItems = []) => {
|
||||
}
|
||||
|
||||
let response = await fetch(url, {
|
||||
method: 'POST',
|
||||
cache: 'no-cache',
|
||||
method: "POST",
|
||||
cache: "no-cache",
|
||||
credentials: "include",
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
"Content-Type": "application/json"
|
||||
},
|
||||
body: form2json(fd, noCastItems)
|
||||
});
|
||||
@@ -218,7 +219,10 @@ const setupNetworkScanForm = (formSelector, tableSelector) => {
|
||||
attempts--;
|
||||
|
||||
try {
|
||||
let response = await fetch(url, { cache: 'no-cache' });
|
||||
let response = await fetch(url, {
|
||||
cache: "no-cache",
|
||||
credentials: "include"
|
||||
});
|
||||
|
||||
if (response.status == 200) {
|
||||
await onSuccess(response);
|
||||
@@ -309,10 +313,11 @@ const setupRestoreBackupForm = (formSelector) => {
|
||||
|
||||
if (data.settings != undefined) {
|
||||
let response = await fetch(url, {
|
||||
method: 'POST',
|
||||
cache: 'no-cache',
|
||||
method: "POST",
|
||||
cache: "no-cache",
|
||||
credentials: "include",
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
"Content-Type": "application/json"
|
||||
},
|
||||
body: JSON.stringify({"settings": data.settings})
|
||||
});
|
||||
@@ -331,10 +336,11 @@ const setupRestoreBackupForm = (formSelector) => {
|
||||
payload["sensors"][sensorId] = data.sensors[sensorId];
|
||||
|
||||
const response = await fetch(url, {
|
||||
method: 'POST',
|
||||
cache: 'no-cache',
|
||||
method: "POST",
|
||||
cache: "no-cache",
|
||||
credentials: "include",
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
"Content-Type": "application/json"
|
||||
},
|
||||
body: JSON.stringify(payload)
|
||||
});
|
||||
@@ -348,10 +354,11 @@ const setupRestoreBackupForm = (formSelector) => {
|
||||
|
||||
if (data.network != undefined) {
|
||||
let response = await fetch(url, {
|
||||
method: 'POST',
|
||||
cache: 'no-cache',
|
||||
method: "POST",
|
||||
cache: "no-cache",
|
||||
credentials: "include",
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
"Content-Type": "application/json"
|
||||
},
|
||||
body: JSON.stringify({"network": data.network})
|
||||
});
|
||||
@@ -496,8 +503,9 @@ const setupUpgradeForm = (formSelector) => {
|
||||
try {
|
||||
let fd = new FormData(form);
|
||||
let response = await fetch(url, {
|
||||
method: 'POST',
|
||||
cache: 'no-cache',
|
||||
method: "POST",
|
||||
cache: "no-cache",
|
||||
credentials: "include",
|
||||
body: fd
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user