From bbe98079cf925aa8af58f95937dc99645ddfee30 Mon Sep 17 00:00:00 2001 From: Martin Dummer Date: Sat, 22 Oct 2022 22:45:59 +0200 Subject: [PATCH 01/47] add README.md to the docs subdirectory Signed-off-by: Martin Dummer --- docs/README.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 docs/README.md diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 00000000..eac94f93 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,6 @@ +# Documents - Table of content + +More detailed descriptions for some topics can be found here. + +## [MQTT Topic Documentation](MQTT_Topics.md) +## [Web API Documentation](Web-API.md) From af4b47beeb1342a8fc12fadedc4a766743fe010f Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Wed, 2 Nov 2022 20:39:18 +0100 Subject: [PATCH 02/47] webapp: Use scss instead of css Enables easier theming in future --- webapp/package.json | 1 + webapp/src/main.ts | 2 +- webapp/src/scss/styles.scss | 2 ++ webapp/vite.config.ts | 5 ++- webapp/yarn.lock | 71 ++++++++++++++++++++++++++++++++++--- 5 files changed, 74 insertions(+), 7 deletions(-) create mode 100644 webapp/src/scss/styles.scss diff --git a/webapp/package.json b/webapp/package.json index 449fb09b..4cc42ebb 100644 --- a/webapp/package.json +++ b/webapp/package.json @@ -29,6 +29,7 @@ "eslint": "^8.26.0", "eslint-plugin-vue": "^9.7.0", "npm-run-all": "^4.1.5", + "sass": "^1.55.0", "typescript": "^4.8.4", "vite": "^3.2.2", "vite-plugin-compression": "^0.5.1", diff --git a/webapp/src/main.ts b/webapp/src/main.ts index 21996133..4fdafc30 100644 --- a/webapp/src/main.ts +++ b/webapp/src/main.ts @@ -2,7 +2,7 @@ import { createApp } from 'vue' import App from './App.vue' import router from './router' -import "bootstrap/dist/css/bootstrap.min.css" +import './scss/styles.scss' import "bootstrap" const app = createApp(App) diff --git a/webapp/src/scss/styles.scss b/webapp/src/scss/styles.scss new file mode 100644 index 00000000..6c1720cb --- /dev/null +++ b/webapp/src/scss/styles.scss @@ -0,0 +1,2 @@ +// Import all of Bootstrap's CSS +@import "~bootstrap/scss/bootstrap"; diff --git a/webapp/vite.config.ts b/webapp/vite.config.ts index 7e7f3f93..ca362f7b 100644 --- a/webapp/vite.config.ts +++ b/webapp/vite.config.ts @@ -6,6 +6,8 @@ import vue from '@vitejs/plugin-vue' import viteCompression from 'vite-plugin-compression'; import cssInjectedByJsPlugin from 'vite-plugin-css-injected-by-js' +const path = require('path') + // https://vitejs.dev/config/ export default defineConfig({ plugins: [ @@ -14,7 +16,8 @@ export default defineConfig({ cssInjectedByJsPlugin()], resolve: { alias: { - '@': fileURLToPath(new URL('./src', import.meta.url)) + '@': fileURLToPath(new URL('./src', import.meta.url)), + '~bootstrap': path.resolve(__dirname, 'node_modules/bootstrap'), } }, build: { diff --git a/webapp/yarn.lock b/webapp/yarn.lock index fd33b4f2..78e37b1b 100644 --- a/webapp/yarn.lock +++ b/webapp/yarn.lock @@ -421,6 +421,14 @@ ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" +anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + argparse@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" @@ -436,6 +444,11 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + boolbase@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" @@ -466,7 +479,7 @@ brace-expansion@^2.0.1: dependencies: balanced-match "^1.0.0" -braces@^3.0.2: +braces@^3.0.2, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== @@ -503,6 +516,21 @@ chalk@^4.0.0, chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" +"chokidar@>=3.0.0 <4.0.0": + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -1057,7 +1085,7 @@ get-symbol-description@^1.0.0: call-bind "^1.0.2" get-intrinsic "^1.1.1" -glob-parent@^5.1.2: +glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -1168,6 +1196,11 @@ ignore@^5.2.0: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== +immutable@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.1.0.tgz#f795787f0db780183307b9eb2091fcac1f6fafef" + integrity sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ== + import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" @@ -1215,6 +1248,13 @@ is-bigint@^1.0.1: dependencies: has-bigints "^1.0.1" +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + is-boolean-object@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" @@ -1247,7 +1287,7 @@ is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== @@ -1469,6 +1509,11 @@ normalize-package-data@^2.3.2: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + npm-run-all@^4.1.5: version "4.1.5" resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba" @@ -1601,7 +1646,7 @@ picocolors@^1.0.0: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -picomatch@^2.3.1: +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== @@ -1666,6 +1711,13 @@ read-pkg@^3.0.0: normalize-package-data "^2.3.2" path-type "^3.0.0" +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + regexp.prototype.flags@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" @@ -1729,6 +1781,15 @@ safe-regex-test@^1.0.0: get-intrinsic "^1.1.3" is-regex "^1.1.4" +sass@^1.55.0: + version "1.55.0" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.55.0.tgz#0c4d3c293cfe8f8a2e8d3b666e1cf1bff8065d1c" + integrity sha512-Pk+PMy7OGLs9WaxZGJMn7S96dvlyVBwwtToX895WmCpAOr5YiJYEUJfiJidMuKb613z2xNWcXCHEuOvjZbqC6A== + dependencies: + chokidar ">=3.0.0 <4.0.0" + immutable "^4.0.0" + source-map-js ">=0.6.2 <2.0.0" + "semver@2 || 3 || 4 || 5", semver@^5.5.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" @@ -1784,7 +1845,7 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -source-map-js@^1.0.2: +"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== From 8d14dbd367cf297e9bcafe64de252f54c52eafa3 Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Thu, 3 Nov 2022 21:00:13 +0100 Subject: [PATCH 03/47] Password protection for security settings API Also implemented the base functionallity to protect further API endpoints. --- README.md | 2 +- include/WebApi.h | 2 + include/WebApi_security.h | 2 + include/defaults.h | 1 + src/WebApi.cpp | 19 ++++++ src/WebApi_security.cpp | 25 ++++++++ webapp/package.json | 1 + webapp/src/components/NavBar.vue | 22 +++++++ webapp/src/emitter.d.ts | 9 +++ webapp/src/main.ts | 4 ++ webapp/src/router/index.ts | 25 +++++++- webapp/src/utils/authentication.ts | 78 +++++++++++++++++++++++ webapp/src/utils/index.ts | 7 ++ webapp/src/views/LoginView.vue | 88 ++++++++++++++++++++++++++ webapp/src/views/SecurityAdminView.vue | 18 ++---- webapp/yarn.lock | 5 ++ 16 files changed, 295 insertions(+), 13 deletions(-) create mode 100644 webapp/src/emitter.d.ts create mode 100644 webapp/src/utils/authentication.ts create mode 100644 webapp/src/views/LoginView.vue diff --git a/README.md b/README.md index db67387a..7bb876ab 100644 --- a/README.md +++ b/README.md @@ -168,7 +168,7 @@ Users report that [ESP_Flasher](https://github.com/Jason2866/ESP_Flasher/release ## First configuration * After the initial flashing of the microcontroller, an Access Point called "OpenDTU-*" is opened. The default password is "openDTU42". * Use a web browser to open the address [http://192.168.4.1](http://192.168.4.1) -* Navigate to Settings --> Network Settings and enter your WiFi credentials +* Navigate to Settings --> Network Settings and enter your WiFi credentials. The username to access the config menu is "admin" and the password the same as for accessing the Access Point (default: "openDTU42"). * OpenDTU then simultaneously connects to your WiFi AP with this credentials. Navigate to Info --> Network and look into section "Network Interface (Station)" for the IP address received via DHCP. * When OpenDTU is connected to a configured WiFI AP, the "OpenDTU-*" Access Point is closed after 3 minutes. * OpenDTU needs access to a working NTP server to get the current date & time. Both are sent to the inverter with each request. Default NTP server is pool.ntp.org. If your network has different requirements please change accordingly (Settings --> NTP Settings). diff --git a/include/WebApi.h b/include/WebApi.h index cf7805a7..699b9cd1 100644 --- a/include/WebApi.h +++ b/include/WebApi.h @@ -24,6 +24,8 @@ public: void init(); void loop(); + static bool checkCredentials(AsyncWebServerRequest* request); + private: AsyncWebServer _server; AsyncEventSource _events; diff --git a/include/WebApi_security.h b/include/WebApi_security.h index d94a7eeb..ea9dd75c 100644 --- a/include/WebApi_security.h +++ b/include/WebApi_security.h @@ -12,5 +12,7 @@ private: void onPasswordGet(AsyncWebServerRequest* request); void onPasswordPost(AsyncWebServerRequest* request); + void onAuthenticateGet(AsyncWebServerRequest* request); + AsyncWebServer* _server; }; \ No newline at end of file diff --git a/include/defaults.h b/include/defaults.h index 298a87ff..9656901d 100644 --- a/include/defaults.h +++ b/include/defaults.h @@ -9,6 +9,7 @@ #define ACCESS_POINT_NAME "OpenDTU-" #define ACCESS_POINT_PASSWORD "openDTU42" +#define AUTH_USERNAME "admin" #define ADMIN_TIMEOUT 180 #define WIFI_RECONNECT_TIMEOUT 15 diff --git a/src/WebApi.cpp b/src/WebApi.cpp index be8203db..f6a6355d 100644 --- a/src/WebApi.cpp +++ b/src/WebApi.cpp @@ -5,6 +5,7 @@ #include "WebApi.h" #include "ArduinoJson.h" #include "AsyncJson.h" +#include "Configuration.h" #include "defaults.h" WebApiClass::WebApiClass() @@ -55,4 +56,22 @@ void WebApiClass::loop() _webApiWsLive.loop(); } +bool WebApiClass::checkCredentials(AsyncWebServerRequest* request) +{ + CONFIG_T& config = Configuration.get(); + if (request->authenticate(AUTH_USERNAME, config.Security_Password)) { + return true; + } + + AsyncWebServerResponse* r = request->beginResponse(401); + + // WebAPI should set the X-Requested-With to prevent browser internal auth dialogs + if (!request->hasHeader("X-Requested-With")) { + r->addHeader(F("WWW-Authenticate"), F("Basic realm=\"Login Required\"")); + } + request->send(r); + + return false; +} + WebApiClass WebApi; \ No newline at end of file diff --git a/src/WebApi_security.cpp b/src/WebApi_security.cpp index 2009be96..96802fbc 100644 --- a/src/WebApi_security.cpp +++ b/src/WebApi_security.cpp @@ -6,6 +6,7 @@ #include "ArduinoJson.h" #include "AsyncJson.h" #include "Configuration.h" +#include "WebApi.h" #include "helper.h" void WebApiSecurityClass::init(AsyncWebServer* server) @@ -16,6 +17,7 @@ void WebApiSecurityClass::init(AsyncWebServer* server) _server->on("/api/security/password", HTTP_GET, std::bind(&WebApiSecurityClass::onPasswordGet, this, _1)); _server->on("/api/security/password", HTTP_POST, std::bind(&WebApiSecurityClass::onPasswordPost, this, _1)); + _server->on("/api/security/authenticate", HTTP_GET, std::bind(&WebApiSecurityClass::onAuthenticateGet, this, _1)); } void WebApiSecurityClass::loop() @@ -24,6 +26,10 @@ void WebApiSecurityClass::loop() void WebApiSecurityClass::onPasswordGet(AsyncWebServerRequest* request) { + if (!WebApi.checkCredentials(request)) { + return; + } + AsyncJsonResponse* response = new AsyncJsonResponse(); JsonObject root = response->getRoot(); const CONFIG_T& config = Configuration.get(); @@ -36,6 +42,10 @@ void WebApiSecurityClass::onPasswordGet(AsyncWebServerRequest* request) void WebApiSecurityClass::onPasswordPost(AsyncWebServerRequest* request) { + if (!WebApi.checkCredentials(request)) { + return; + } + AsyncJsonResponse* response = new AsyncJsonResponse(); JsonObject retMsg = response->getRoot(); retMsg[F("type")] = F("warning"); @@ -87,6 +97,21 @@ void WebApiSecurityClass::onPasswordPost(AsyncWebServerRequest* request) retMsg[F("type")] = F("success"); retMsg[F("message")] = F("Settings saved!"); + response->setLength(); + request->send(response); +} + +void WebApiSecurityClass::onAuthenticateGet(AsyncWebServerRequest* request) +{ + if (!WebApi.checkCredentials(request)) { + return; + } + + AsyncJsonResponse* response = new AsyncJsonResponse(); + JsonObject retMsg = response->getRoot(); + retMsg[F("type")] = F("success"); + retMsg[F("message")] = F("Authentication successfull!"); + response->setLength(); request->send(response); } \ No newline at end of file diff --git a/webapp/package.json b/webapp/package.json index 4cc42ebb..b57fad83 100644 --- a/webapp/package.json +++ b/webapp/package.json @@ -14,6 +14,7 @@ "@popperjs/core": "^2.11.6", "bootstrap": "^5.2.2", "bootstrap-icons-vue": "^1.8.1", + "mitt": "^3.0.0", "spark-md5": "^3.0.2", "vue": "^3.2.41", "vue-router": "^4.1.6" diff --git a/webapp/src/components/NavBar.vue b/webapp/src/components/NavBar.vue index ee4fa255..e66760ad 100644 --- a/webapp/src/components/NavBar.vue +++ b/webapp/src/components/NavBar.vue @@ -73,19 +73,41 @@ + \ No newline at end of file diff --git a/webapp/src/views/SecurityAdminView.vue b/webapp/src/views/SecurityAdminView.vue index f6878172..d557bd8b 100644 --- a/webapp/src/views/SecurityAdminView.vue +++ b/webapp/src/views/SecurityAdminView.vue @@ -26,8 +26,8 @@ @@ -41,6 +41,7 @@ import { defineComponent } from 'vue'; import BasePage from '@/components/BasePage.vue'; import BootstrapAlert from "@/components/BootstrapAlert.vue"; +import { handleResponse, authHeader } from '@/utils/authentication'; import type { SecurityConfig } from '@/types/SecurityConfig'; export default defineComponent({ @@ -65,8 +66,8 @@ export default defineComponent({ methods: { getPasswordConfig() { this.dataLoading = true; - fetch("/api/security/password") - .then((response) => response.json()) + fetch("/api/security/password", { headers: authHeader() }) + .then(handleResponse) .then( (data) => { this.securityConfigList = data; @@ -90,15 +91,10 @@ export default defineComponent({ fetch("/api/security/password", { method: "POST", + headers: authHeader(), body: formData, }) - .then(function (response) { - if (response.status != 200) { - throw response.status; - } else { - return response.json(); - } - }) + .then(handleResponse) .then( (response) => { this.alertMessage = response.message; diff --git a/webapp/yarn.lock b/webapp/yarn.lock index 78e37b1b..f6ef1d2a 100644 --- a/webapp/yarn.lock +++ b/webapp/yarn.lock @@ -1474,6 +1474,11 @@ minimatch@^5.1.0: dependencies: brace-expansion "^2.0.1" +mitt@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mitt/-/mitt-3.0.0.tgz#69ef9bd5c80ff6f57473e8d89326d01c414be0bd" + integrity sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ== + ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" From b9d2978bf903654dd34e235306a0bcd414d0980d Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Thu, 3 Nov 2022 21:05:51 +0100 Subject: [PATCH 04/47] Password protection for dtu settings --- src/WebApi_dtu.cpp | 9 +++++++++ webapp/src/router/index.ts | 2 +- webapp/src/views/DtuAdminView.vue | 14 +++++--------- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/WebApi_dtu.cpp b/src/WebApi_dtu.cpp index b832c26d..bb61b059 100644 --- a/src/WebApi_dtu.cpp +++ b/src/WebApi_dtu.cpp @@ -7,6 +7,7 @@ #include "AsyncJson.h" #include "Configuration.h" #include "Hoymiles.h" +#include "WebApi.h" void WebApiDtuClass::init(AsyncWebServer* server) { @@ -24,6 +25,10 @@ void WebApiDtuClass::loop() void WebApiDtuClass::onDtuAdminGet(AsyncWebServerRequest* request) { + if (!WebApi.checkCredentials(request)) { + return; + } + AsyncJsonResponse* response = new AsyncJsonResponse(); JsonObject root = response->getRoot(); const CONFIG_T& config = Configuration.get(); @@ -43,6 +48,10 @@ void WebApiDtuClass::onDtuAdminGet(AsyncWebServerRequest* request) void WebApiDtuClass::onDtuAdminPost(AsyncWebServerRequest* request) { + if (!WebApi.checkCredentials(request)) { + return; + } + AsyncJsonResponse* response = new AsyncJsonResponse(); JsonObject retMsg = response->getRoot(); retMsg[F("type")] = F("warning"); diff --git a/webapp/src/router/index.ts b/webapp/src/router/index.ts index 7429f193..6f0b997d 100644 --- a/webapp/src/router/index.ts +++ b/webapp/src/router/index.ts @@ -100,7 +100,7 @@ const router = createRouter({ router.beforeEach((to, from, next) => { // redirect to login page if not logged in and trying to access a restricted page const publicPages = ['/', '/login', '/about', '/info/network', '/info/system', '/info/ntp', '/info/mqtt', - '/settings/network', '/settings/ntp', '/settings/mqtt', '/settings/inverter', '/settings/dtu', '/firmware/upgrade', '/settings/config', ]; + '/settings/network', '/settings/ntp', '/settings/mqtt', '/settings/inverter', '/firmware/upgrade', '/settings/config', ]; const authRequired = !publicPages.includes(to.path); const loggedIn = localStorage.getItem('user'); diff --git a/webapp/src/views/DtuAdminView.vue b/webapp/src/views/DtuAdminView.vue index 2e05ddcc..6d563f06 100644 --- a/webapp/src/views/DtuAdminView.vue +++ b/webapp/src/views/DtuAdminView.vue @@ -49,6 +49,7 @@ import { defineComponent } from 'vue'; import BasePage from '@/components/BasePage.vue'; import BootstrapAlert from "@/components/BootstrapAlert.vue"; +import { handleResponse, authHeader } from '@/utils/authentication'; import type { DtuConfig } from "@/types/DtuConfig"; export default defineComponent({ @@ -77,8 +78,8 @@ export default defineComponent({ methods: { getDtuConfig() { this.dataLoading = true; - fetch("/api/dtu/config") - .then((response) => response.json()) + fetch("/api/dtu/config", { headers: authHeader() }) + .then(handleResponse) .then( (data) => { this.dtuConfigList = data; @@ -94,15 +95,10 @@ export default defineComponent({ fetch("/api/dtu/config", { method: "POST", + headers: authHeader(), body: formData, }) - .then(function (response) { - if (response.status != 200) { - throw response.status; - } else { - return response.json(); - } - }) + .then(handleResponse) .then( (response) => { this.alertMessage = response.message; From e605e42c3e33b23b621446608aa5801539be021c Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Thu, 3 Nov 2022 21:13:42 +0100 Subject: [PATCH 05/47] Password protection for network settings API --- src/WebApi_network.cpp | 9 +++++++++ webapp/src/router/index.ts | 2 +- webapp/src/views/NetworkAdminView.vue | 14 +++++--------- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/WebApi_network.cpp b/src/WebApi_network.cpp index 27760f9d..4c3cf2b4 100644 --- a/src/WebApi_network.cpp +++ b/src/WebApi_network.cpp @@ -7,6 +7,7 @@ #include "AsyncJson.h" #include "Configuration.h" #include "NetworkSettings.h" +#include "WebApi.h" #include "helper.h" void WebApiNetworkClass::init(AsyncWebServer* server) @@ -52,6 +53,10 @@ void WebApiNetworkClass::onNetworkStatus(AsyncWebServerRequest* request) void WebApiNetworkClass::onNetworkAdminGet(AsyncWebServerRequest* request) { + if (!WebApi.checkCredentials(request)) { + return; + } + AsyncJsonResponse* response = new AsyncJsonResponse(); JsonObject root = response->getRoot(); const CONFIG_T& config = Configuration.get(); @@ -72,6 +77,10 @@ void WebApiNetworkClass::onNetworkAdminGet(AsyncWebServerRequest* request) void WebApiNetworkClass::onNetworkAdminPost(AsyncWebServerRequest* request) { + if (!WebApi.checkCredentials(request)) { + return; + } + AsyncJsonResponse* response = new AsyncJsonResponse(); JsonObject retMsg = response->getRoot(); retMsg[F("type")] = F("warning"); diff --git a/webapp/src/router/index.ts b/webapp/src/router/index.ts index 6f0b997d..f4d6c7bb 100644 --- a/webapp/src/router/index.ts +++ b/webapp/src/router/index.ts @@ -100,7 +100,7 @@ const router = createRouter({ router.beforeEach((to, from, next) => { // redirect to login page if not logged in and trying to access a restricted page const publicPages = ['/', '/login', '/about', '/info/network', '/info/system', '/info/ntp', '/info/mqtt', - '/settings/network', '/settings/ntp', '/settings/mqtt', '/settings/inverter', '/firmware/upgrade', '/settings/config', ]; + '/settings/ntp', '/settings/mqtt', '/settings/inverter', '/firmware/upgrade', '/settings/config', ]; const authRequired = !publicPages.includes(to.path); const loggedIn = localStorage.getItem('user'); diff --git a/webapp/src/views/NetworkAdminView.vue b/webapp/src/views/NetworkAdminView.vue index a9c0b537..ea617fdf 100644 --- a/webapp/src/views/NetworkAdminView.vue +++ b/webapp/src/views/NetworkAdminView.vue @@ -104,6 +104,7 @@ import { defineComponent } from 'vue'; import BasePage from '@/components/BasePage.vue'; import BootstrapAlert from "@/components/BootstrapAlert.vue"; +import { handleResponse, authHeader } from '@/utils/authentication'; import type { NetworkConfig } from "@/types/NetworkkConfig"; export default defineComponent({ @@ -126,8 +127,8 @@ export default defineComponent({ methods: { getNetworkConfig() { this.dataLoading = true; - fetch("/api/network/config") - .then((response) => response.json()) + fetch("/api/network/config", { headers: authHeader() }) + .then(handleResponse) .then((data) => { this.networkConfigList = data; this.dataLoading = false; @@ -141,15 +142,10 @@ export default defineComponent({ fetch("/api/network/config", { method: "POST", + headers: authHeader(), body: formData, }) - .then(function (response) { - if (response.status != 200) { - throw response.status; - } else { - return response.json(); - } - }) + .then(handleResponse) .then( (response) => { this.alertMessage = response.message; From 3a2f73a2b3b2d8c074fa32c1a893cf6ab730ddfb Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Thu, 3 Nov 2022 21:20:12 +0100 Subject: [PATCH 06/47] Password protection for ntp settings API --- src/WebApi_ntp.cpp | 17 +++++++++++++++++ webapp/src/router/index.ts | 2 +- webapp/src/views/NtpAdminView.vue | 27 +++++++++------------------ 3 files changed, 27 insertions(+), 19 deletions(-) diff --git a/src/WebApi_ntp.cpp b/src/WebApi_ntp.cpp index 5f2bae71..6b7d04db 100644 --- a/src/WebApi_ntp.cpp +++ b/src/WebApi_ntp.cpp @@ -7,6 +7,7 @@ #include "AsyncJson.h" #include "Configuration.h" #include "NtpSettings.h" +#include "WebApi.h" #include "helper.h" void WebApiNtpClass::init(AsyncWebServer* server) @@ -52,6 +53,10 @@ void WebApiNtpClass::onNtpStatus(AsyncWebServerRequest* request) void WebApiNtpClass::onNtpAdminGet(AsyncWebServerRequest* request) { + if (!WebApi.checkCredentials(request)) { + return; + } + AsyncJsonResponse* response = new AsyncJsonResponse(); JsonObject root = response->getRoot(); const CONFIG_T& config = Configuration.get(); @@ -66,6 +71,10 @@ void WebApiNtpClass::onNtpAdminGet(AsyncWebServerRequest* request) void WebApiNtpClass::onNtpAdminPost(AsyncWebServerRequest* request) { + if (!WebApi.checkCredentials(request)) { + return; + } + AsyncJsonResponse* response = new AsyncJsonResponse(); JsonObject retMsg = response->getRoot(); retMsg[F("type")] = F("warning"); @@ -142,6 +151,10 @@ void WebApiNtpClass::onNtpAdminPost(AsyncWebServerRequest* request) void WebApiNtpClass::onNtpTimeGet(AsyncWebServerRequest* request) { + if (!WebApi.checkCredentials(request)) { + return; + } + AsyncJsonResponse* response = new AsyncJsonResponse(); JsonObject root = response->getRoot(); @@ -165,6 +178,10 @@ void WebApiNtpClass::onNtpTimeGet(AsyncWebServerRequest* request) void WebApiNtpClass::onNtpTimePost(AsyncWebServerRequest* request) { + if (!WebApi.checkCredentials(request)) { + return; + } + AsyncJsonResponse* response = new AsyncJsonResponse(); JsonObject retMsg = response->getRoot(); retMsg[F("type")] = F("warning"); diff --git a/webapp/src/router/index.ts b/webapp/src/router/index.ts index f4d6c7bb..357f5258 100644 --- a/webapp/src/router/index.ts +++ b/webapp/src/router/index.ts @@ -100,7 +100,7 @@ const router = createRouter({ router.beforeEach((to, from, next) => { // redirect to login page if not logged in and trying to access a restricted page const publicPages = ['/', '/login', '/about', '/info/network', '/info/system', '/info/ntp', '/info/mqtt', - '/settings/ntp', '/settings/mqtt', '/settings/inverter', '/firmware/upgrade', '/settings/config', ]; + '/settings/mqtt', '/settings/inverter', '/firmware/upgrade', '/settings/config', ]; const authRequired = !publicPages.includes(to.path); const loggedIn = localStorage.getItem('user'); diff --git a/webapp/src/views/NtpAdminView.vue b/webapp/src/views/NtpAdminView.vue index 138edc9b..3b8315e8 100644 --- a/webapp/src/views/NtpAdminView.vue +++ b/webapp/src/views/NtpAdminView.vue @@ -75,6 +75,7 @@ import { defineComponent } from 'vue'; import BasePage from '@/components/BasePage.vue'; import BootstrapAlert from "@/components/BootstrapAlert.vue"; +import { handleResponse, authHeader } from '@/utils/authentication'; import type { NtpConfig } from "@/types/NtpConfig"; export default defineComponent({ @@ -127,8 +128,8 @@ export default defineComponent({ }, getNtpConfig() { this.dataLoading = true; - fetch("/api/ntp/config") - .then((response) => response.json()) + fetch("/api/ntp/config", { headers: authHeader() }) + .then(handleResponse) .then( (data) => { this.ntpConfigList = data; @@ -142,8 +143,8 @@ export default defineComponent({ }, getCurrentTime() { this.dataLoading = true; - fetch("/api/ntp/time") - .then((response) => response.json()) + fetch("/api/ntp/time", { headers: authHeader() }) + .then(handleResponse) .then( (data) => { this.mcuTime = new Date( @@ -168,15 +169,10 @@ export default defineComponent({ fetch("/api/ntp/time", { method: "POST", + headers: authHeader(), body: formData, }) - .then(function (response) { - if (response.status != 200) { - throw response.status; - } else { - return response.json(); - } - }) + .then(handleResponse) .then( (response) => { this.alertMessage = response.message; @@ -196,15 +192,10 @@ export default defineComponent({ fetch("/api/ntp/config", { method: "POST", + headers: authHeader(), body: formData, }) - .then(function (response) { - if (response.status != 200) { - throw response.status; - } else { - return response.json(); - } - }) + .then(handleResponse) .then( (response) => { this.alertMessage = response.message; From 902e632f5108b915fbd717150110d1c7564d9959 Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Thu, 3 Nov 2022 21:31:50 +0100 Subject: [PATCH 07/47] Password protection for mqtt settings API --- src/WebApi_mqtt.cpp | 9 +++++++++ webapp/src/router/index.ts | 2 +- webapp/src/views/MqttAdminView.vue | 14 +++++--------- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/WebApi_mqtt.cpp b/src/WebApi_mqtt.cpp index 78cbbd0b..3083851e 100644 --- a/src/WebApi_mqtt.cpp +++ b/src/WebApi_mqtt.cpp @@ -8,6 +8,7 @@ #include "Configuration.h" #include "MqttHassPublishing.h" #include "MqttSettings.h" +#include "WebApi.h" #include "helper.h" void WebApiMqttClass::init(AsyncWebServer* server) @@ -54,6 +55,10 @@ void WebApiMqttClass::onMqttStatus(AsyncWebServerRequest* request) void WebApiMqttClass::onMqttAdminGet(AsyncWebServerRequest* request) { + if (!WebApi.checkCredentials(request)) { + return; + } + AsyncJsonResponse* response = new AsyncJsonResponse(false, MQTT_JSON_DOC_SIZE); JsonObject root = response->getRoot(); const CONFIG_T& config = Configuration.get(); @@ -83,6 +88,10 @@ void WebApiMqttClass::onMqttAdminGet(AsyncWebServerRequest* request) void WebApiMqttClass::onMqttAdminPost(AsyncWebServerRequest* request) { + if (!WebApi.checkCredentials(request)) { + return; + } + AsyncJsonResponse* response = new AsyncJsonResponse(false, MQTT_JSON_DOC_SIZE); JsonObject retMsg = response->getRoot(); retMsg[F("type")] = F("warning"); diff --git a/webapp/src/router/index.ts b/webapp/src/router/index.ts index 357f5258..a9bed45c 100644 --- a/webapp/src/router/index.ts +++ b/webapp/src/router/index.ts @@ -100,7 +100,7 @@ const router = createRouter({ router.beforeEach((to, from, next) => { // redirect to login page if not logged in and trying to access a restricted page const publicPages = ['/', '/login', '/about', '/info/network', '/info/system', '/info/ntp', '/info/mqtt', - '/settings/mqtt', '/settings/inverter', '/firmware/upgrade', '/settings/config', ]; + '/settings/inverter', '/firmware/upgrade', '/settings/config', ]; const authRequired = !publicPages.includes(to.path); const loggedIn = localStorage.getItem('user'); diff --git a/webapp/src/views/MqttAdminView.vue b/webapp/src/views/MqttAdminView.vue index 2ada9558..47f33674 100644 --- a/webapp/src/views/MqttAdminView.vue +++ b/webapp/src/views/MqttAdminView.vue @@ -218,6 +218,7 @@ import { defineComponent } from 'vue'; import BasePage from '@/components/BasePage.vue'; import BootstrapAlert from "@/components/BootstrapAlert.vue"; +import { handleResponse, authHeader } from '@/utils/authentication'; import type { MqttConfig } from "@/types/MqttConfig"; export default defineComponent({ @@ -240,8 +241,8 @@ export default defineComponent({ methods: { getMqttConfig() { this.dataLoading = true; - fetch("/api/mqtt/config") - .then((response) => response.json()) + fetch("/api/mqtt/config", { headers: authHeader() }) + .then(handleResponse) .then((data) => { this.mqttConfigList = data; this.dataLoading = false; @@ -255,15 +256,10 @@ export default defineComponent({ fetch("/api/mqtt/config", { method: "POST", + headers: authHeader(), body: formData, }) - .then(function (response) { - if (response.status != 200) { - throw response.status; - } else { - return response.json(); - } - }) + .then(handleResponse) .then( (response) => { this.alertMessage = response.message; From a646eae51a8405ee5f3c4fec72c776ca27ae83b8 Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Thu, 3 Nov 2022 21:44:01 +0100 Subject: [PATCH 08/47] Password protection for inverter settings API --- src/WebApi_inverter.cpp | 17 ++++++++++++++ webapp/src/router/index.ts | 2 +- webapp/src/views/InverterAdminView.vue | 32 ++++++++------------------ 3 files changed, 27 insertions(+), 24 deletions(-) diff --git a/src/WebApi_inverter.cpp b/src/WebApi_inverter.cpp index 12cadaf0..f467fd5d 100644 --- a/src/WebApi_inverter.cpp +++ b/src/WebApi_inverter.cpp @@ -8,6 +8,7 @@ #include "Configuration.h" #include "Hoymiles.h" #include "MqttHassPublishing.h" +#include "WebApi.h" #include "helper.h" void WebApiInverterClass::init(AsyncWebServer* server) @@ -28,6 +29,10 @@ void WebApiInverterClass::loop() void WebApiInverterClass::onInverterList(AsyncWebServerRequest* request) { + if (!WebApi.checkCredentials(request)) { + return; + } + AsyncJsonResponse* response = new AsyncJsonResponse(false, 4096U); JsonObject root = response->getRoot(); JsonArray data = root.createNestedArray(F("inverter")); @@ -66,6 +71,10 @@ void WebApiInverterClass::onInverterList(AsyncWebServerRequest* request) void WebApiInverterClass::onInverterAdd(AsyncWebServerRequest* request) { + if (!WebApi.checkCredentials(request)) { + return; + } + AsyncJsonResponse* response = new AsyncJsonResponse(); JsonObject retMsg = response->getRoot(); retMsg[F("type")] = F("warning"); @@ -151,6 +160,10 @@ void WebApiInverterClass::onInverterAdd(AsyncWebServerRequest* request) void WebApiInverterClass::onInverterEdit(AsyncWebServerRequest* request) { + if (!WebApi.checkCredentials(request)) { + return; + } + AsyncJsonResponse* response = new AsyncJsonResponse(); JsonObject retMsg = response->getRoot(); retMsg[F("type")] = F("warning"); @@ -265,6 +278,10 @@ void WebApiInverterClass::onInverterEdit(AsyncWebServerRequest* request) void WebApiInverterClass::onInverterDelete(AsyncWebServerRequest* request) { + if (!WebApi.checkCredentials(request)) { + return; + } + AsyncJsonResponse* response = new AsyncJsonResponse(); JsonObject retMsg = response->getRoot(); retMsg[F("type")] = F("warning"); diff --git a/webapp/src/router/index.ts b/webapp/src/router/index.ts index a9bed45c..4e343a73 100644 --- a/webapp/src/router/index.ts +++ b/webapp/src/router/index.ts @@ -100,7 +100,7 @@ const router = createRouter({ router.beforeEach((to, from, next) => { // redirect to login page if not logged in and trying to access a restricted page const publicPages = ['/', '/login', '/about', '/info/network', '/info/system', '/info/ntp', '/info/mqtt', - '/settings/inverter', '/firmware/upgrade', '/settings/config', ]; + '/firmware/upgrade', '/settings/config', ]; const authRequired = !publicPages.includes(to.path); const loggedIn = localStorage.getItem('user'); diff --git a/webapp/src/views/InverterAdminView.vue b/webapp/src/views/InverterAdminView.vue index 682e61e8..61441878 100644 --- a/webapp/src/views/InverterAdminView.vue +++ b/webapp/src/views/InverterAdminView.vue @@ -147,6 +147,7 @@ import { } from 'bootstrap-icons-vue'; import * as bootstrap from 'bootstrap'; import BootstrapAlert from "@/components/BootstrapAlert.vue"; +import { handleResponse, authHeader } from '@/utils/authentication'; declare interface Inverter { id: string, @@ -196,8 +197,8 @@ export default defineComponent({ methods: { getInverters() { this.dataLoading = true; - fetch("/api/inverter/list") - .then((response) => response.json()) + fetch("/api/inverter/list", { headers: authHeader() }) + .then(handleResponse) .then((data) => { this.inverters = data.inverter; this.dataLoading = false; @@ -209,15 +210,10 @@ export default defineComponent({ fetch("/api/inverter/add", { method: "POST", + headers: authHeader(), body: formData, }) - .then(function (response) { - if (response.status != 200) { - throw response.status; - } else { - return response.json(); - } - }) + .then(handleResponse) .then( (response) => { this.alertMessage = response.message; @@ -250,15 +246,10 @@ export default defineComponent({ fetch("/api/inverter/del", { method: "POST", + headers: authHeader(), body: formData, }) - .then(function (response) { - if (response.status != 200) { - throw response.status; - } else { - return response.json(); - } - }) + .then(handleResponse) .then( (response) => { this.alertMessage = response.message; @@ -295,15 +286,10 @@ export default defineComponent({ fetch("/api/inverter/edit", { method: "POST", + headers: authHeader(), body: formData, }) - .then(function (response) { - if (response.status != 200) { - throw response.status; - } else { - return response.json(); - } - }) + .then(handleResponse) .then( (response) => { this.alertMessage = response.message; From 7798854b2b7c03619c43f614095e5efd583a2c8e Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Fri, 4 Nov 2022 00:01:34 +0100 Subject: [PATCH 09/47] webapp: Change authHeader to return Headers object instead of Record --- webapp/src/utils/authentication.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/webapp/src/utils/authentication.ts b/webapp/src/utils/authentication.ts index fe145da7..c6590b0a 100644 --- a/webapp/src/utils/authentication.ts +++ b/webapp/src/utils/authentication.ts @@ -1,11 +1,11 @@ -export function authHeader(): HeadersInit { +export function authHeader(): Headers { // return authorization header with basic auth credentials let user = JSON.parse(localStorage.getItem('user') || ""); if (user && user.authdata) { - return { 'Authorization': 'Basic ' + user.authdata }; + return new Headers({ 'Authorization': 'Basic ' + user.authdata }) } else { - return {}; + return new Headers(); } } From 244c94e4561b0116049c855ec075d023812279b1 Mon Sep 17 00:00:00 2001 From: Martin Dummer Date: Sun, 16 Oct 2022 12:20:00 +0200 Subject: [PATCH 10/47] add Web-API documentation Signed-off-by: Martin Dummer --- README.md | 3 + docs/Web-API.md | 448 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 451 insertions(+) create mode 100644 docs/Web-API.md diff --git a/README.md b/README.md index a40bc7cb..104bc9d9 100644 --- a/README.md +++ b/README.md @@ -158,6 +158,9 @@ After the successful upload, the OpenDTU immediately restarts into the new firmw ## MQTT Topic Documentation A documentation of all available MQTT Topics can be found here: [MQTT Documentation](docs/MQTT_Topics.md) +## Web API Documentation +A documentation of the Web API can be found here: [Web-API Documentation](docs/Web-API.md) + ## Available cases * * diff --git a/docs/Web-API.md b/docs/Web-API.md new file mode 100644 index 00000000..5c5b518f --- /dev/null +++ b/docs/Web-API.md @@ -0,0 +1,448 @@ +# Web API + +Information in JSON format can be obtained through the web API + +## List of URLs +may be incomplete + +| GET/POST | URL | +| -- | -- | +| Get | /api/config/get | +| Post | /api/config/delete | +| Post | /api/config/upload | +| Get | /api/devinfo/status | +| Get+Post | /api/dtu/config | +| Get | /api/eventlog/status?inv=inverter-serialnumber | +| Post | /api/firmware/update | +| Get | /api/inverter/list | +| Post | /api/inverter/add | +| Post | /api/inverter/del | +| Post | /api/inverter/edit | +| Post | /api/limit/config | +| Get | /api/limit/status | +| Get | /api/livedata/status | +| Get+Post | /api/mqtt/config | +| Get | /api/mqtt/status | +| Get+Post | /api/network/config | +| Get | /api/network/status | +| Get+Post | /api/ntp/config | +| Get | /api/ntp/status | +| Get+Post | /api/ntp/time | +| Get | /api/power/status | +| Post | /api/power/config | +| Get+Post | /api/security/password | +| Get | /api/system/status | + + +## Examples of Use + +### Important notes: + +- IP addresses and serial numbers in this examples are anonymized. Adjust to your own needs. +- The output from curl is without a linefeed at the end, so please be careful when copying the output - do not accidentally add the shell prompt directly after it. +- When POSTing config data to OpenDTU, always send all settings back, even if only one setting was changed. Sending single settings is not supported and you will receive a response `{"type":"warning","message":"Values are missing!"}` +- When POSTing, always put single quotes around the data part. Do not confuse the single quote `'` with the backtick `` ` ``. You have been warned. +- Some API calls have a single URL for GET and POST - e.g. `/api/ntp/config` +- Other API calls use e.g. `/api/limit/status` to GET data and a different URL `/api/limit/config` to POST data. +- If you want to investigate the web api communication, a good tool is [Postman](https://www.postman.com/) + + +### Get information + +You can "talk" to the OpenDTU with a command line tool like `curl`. The output is in plain JSON, without carriage return/linefeed and is therefore not very human readable. + +``` +~$ curl http://192.168.10.10/api/livedata/status +{"inverters":[{"serial":"11418186xxxx","name":"HM600","data_age":4,"reachable":true,"producing":true,"limit_relative":100,"limit_absolute":600,"0":{"Power":{"v":70.69999695,"u":"W","d":1},"Voltage":{"v":233,"u":"V","d":1},"Current":{"v":0.300000012,"u":"A","d":2},"Power DC":{"v":74,"u":"W","d":2},"YieldDay":{"v":23,"u":"Wh","d":2},"YieldTotal":{"v":150.5050049,"u":"kWh","d":2},"Frequency":{"v":50.02000046,"u":"Hz","d":2},"Temperature":{"v":8.300000191,"u":"°C","d":1},"PowerFactor":{"v":1,"u":"","d":3},"ReactivePower":{"v":0.100000001,"u":"var","d":1},"Efficiency":{"v":95.54053497,"u":"%","d":2}},"1":{"Power":{"v":0,"u":"W","d":1},"Voltage":{"v":1,"u":"V","d":1},"Current":{"v":0.02,"u":"A","d":2},"YieldDay":{"v":0,"u":"Wh","d":0},"YieldTotal":{"v":49.0320015,"u":"kWh","d":3},"Irradiation":{"v":0,"u":"%","d":2}},"2":{"Power":{"v":74,"u":"W","d":1},"Voltage":{"v":42.40000153,"u":"V","d":1},"Current":{"v":1.74000001,"u":"A","d":2},"YieldDay":{"v":23,"u":"Wh","d":0},"YieldTotal":{"v":101.4729996,"u":"kWh","d":3},"Irradiation":{"v":18.04878044,"u":"%","d":2}},"events":3},{"serial":"11418180xxxx","name":"HM800","data_age":11,"reachable":true,"producing":true,"limit_relative":100,"limit_absolute":800,"0":{"Power":{"v":70.09999847,"u":"W","d":1},"Voltage":{"v":233.1000061,"u":"V","d":1},"Current":{"v":0.300000012,"u":"A","d":2},"Power DC":{"v":73.59999847,"u":"W","d":2},"YieldDay":{"v":48,"u":"Wh","d":2},"YieldTotal":{"v":48.5399971,"u":"kWh","d":2},"Frequency":{"v":50.02000046,"u":"Hz","d":2},"Temperature":{"v":11.39999962,"u":"°C","d":1},"PowerFactor":{"v":1,"u":"","d":3},"ReactivePower":{"v":0.100000001,"u":"var","d":1},"Efficiency":{"v":95.24456024,"u":"%","d":2}},"1":{"Power":{"v":36.5,"u":"W","d":1},"Voltage":{"v":39.09999847,"u":"V","d":1},"Current":{"v":0.930000007,"u":"A","d":2},"YieldDay":{"v":31,"u":"Wh","d":0},"YieldTotal":{"v":4.301000118,"u":"kWh","d":3},"Irradiation":{"v":8.902439117,"u":"%","d":2}},"2":{"Power":{"v":37.09999847,"u":"W","d":1},"Voltage":{"v":40.79999924,"u":"V","d":1},"Current":{"v":0.910000026,"u":"A","d":2},"YieldDay":{"v":17,"u":"Wh","d":0},"YieldTotal":{"v":44.23899841,"u":"kWh","d":3},"Irradiation":{"v":9.048780441,"u":"%","d":2}},"events":1}],"total":{"Power":{"v":140.7999878,"u":"W","d":1},"YieldDay":{"v":71,"u":"Wh","d":0},"YieldTotal":{"v":199.0449982,"u":"kWh","d":2}}} +``` + + +To enhance readability (and filter information) use the JSON command line processor `jq`. + +``` +~$ curl --no-progress-meter http://192.168.10.10/api/livedata/status | jq +{ + "inverters": [ + { + "serial": "11418186xxxx", + "name": "HM600", + "data_age": 4, + "reachable": true, + "producing": true, + "limit_relative": 100, + "limit_absolute": 600, + "0": { + "Power": { + "v": 70.69999695, + "u": "W", + "d": 1 + }, + "Voltage": { + "v": 233, + "u": "V", + "d": 1 + }, + "Current": { + "v": 0.300000012, + "u": "A", + "d": 2 + }, + "Power DC": { + "v": 74, + "u": "W", + "d": 2 + }, + "YieldDay": { + "v": 23, + "u": "Wh", + "d": 2 + }, + "YieldTotal": { + "v": 150.5050049, + "u": "kWh", + "d": 2 + }, + "Frequency": { + "v": 50.02000046, + "u": "Hz", + "d": 2 + }, + "Temperature": { + "v": 8.300000191, + "u": "°C", + "d": 1 + }, + "PowerFactor": { + "v": 1, + "u": "", + "d": 3 + }, + "ReactivePower": { + "v": 0.100000001, + "u": "var", + "d": 1 + }, + "Efficiency": { + "v": 95.54053497, + "u": "%", + "d": 2 + } + }, + "1": { + "Power": { + "v": 0, + "u": "W", + "d": 1 + }, + "Voltage": { + "v": 1, + "u": "V", + "d": 1 + }, + "Current": { + "v": 0.02, + "u": "A", + "d": 2 + }, + "YieldDay": { + "v": 0, + "u": "Wh", + "d": 0 + }, + "YieldTotal": { + "v": 49.0320015, + "u": "kWh", + "d": 3 + }, + "Irradiation": { + "v": 0, + "u": "%", + "d": 2 + } + }, + "2": { + "Power": { + "v": 74, + "u": "W", + "d": 1 + }, + "Voltage": { + "v": 42.40000153, + "u": "V", + "d": 1 + }, + "Current": { + "v": 1.74000001, + "u": "A", + "d": 2 + }, + "YieldDay": { + "v": 23, + "u": "Wh", + "d": 0 + }, + "YieldTotal": { + "v": 101.4729996, + "u": "kWh", + "d": 3 + }, + "Irradiation": { + "v": 18.04878044, + "u": "%", + "d": 2 + } + }, + "events": 3 + }, + { + "serial": "11418180xxxx", + "name": "HM800", + "data_age": 11, + "reachable": true, + "producing": true, + "limit_relative": 100, + "limit_absolute": 800, + "0": { + "Power": { + "v": 70.09999847, + "u": "W", + "d": 1 + }, + "Voltage": { + "v": 233.1000061, + "u": "V", + "d": 1 + }, + "Current": { + "v": 0.300000012, + "u": "A", + "d": 2 + }, + "Power DC": { + "v": 73.59999847, + "u": "W", + "d": 2 + }, + "YieldDay": { + "v": 48, + "u": "Wh", + "d": 2 + }, + "YieldTotal": { + "v": 48.5399971, + "u": "kWh", + "d": 2 + }, + "Frequency": { + "v": 50.02000046, + "u": "Hz", + "d": 2 + }, + "Temperature": { + "v": 11.39999962, + "u": "°C", + "d": 1 + }, + "PowerFactor": { + "v": 1, + "u": "", + "d": 3 + }, + "ReactivePower": { + "v": 0.100000001, + "u": "var", + "d": 1 + }, + "Efficiency": { + "v": 95.24456024, + "u": "%", + "d": 2 + } + }, + "1": { + "Power": { + "v": 36.5, + "u": "W", + "d": 1 + }, + "Voltage": { + "v": 39.09999847, + "u": "V", + "d": 1 + }, + "Current": { + "v": 0.930000007, + "u": "A", + "d": 2 + }, + "YieldDay": { + "v": 31, + "u": "Wh", + "d": 0 + }, + "YieldTotal": { + "v": 4.301000118, + "u": "kWh", + "d": 3 + }, + "Irradiation": { + "v": 8.902439117, + "u": "%", + "d": 2 + } + }, + "2": { + "Power": { + "v": 37.09999847, + "u": "W", + "d": 1 + }, + "Voltage": { + "v": 40.79999924, + "u": "V", + "d": 1 + }, + "Current": { + "v": 0.910000026, + "u": "A", + "d": 2 + }, + "YieldDay": { + "v": 17, + "u": "Wh", + "d": 0 + }, + "YieldTotal": { + "v": 44.23899841, + "u": "kWh", + "d": 3 + }, + "Irradiation": { + "v": 9.048780441, + "u": "%", + "d": 2 + } + }, + "events": 1 + } + ], + "total": { + "Power": { + "v": 140.7999878, + "u": "W", + "d": 1 + }, + "YieldDay": { + "v": 71, + "u": "Wh", + "d": 0 + }, + "YieldTotal": { + "v": 199.0449982, + "u": "kWh", + "d": 2 + } + } +} +``` + +The eventlog can be fetched with the inverter serial number as parameter: + +``` +martin@bln9716cm ~/swbuild/OpenDTU $ curl --no-progress-meter http://192.168.10.10/api/eventlog/status?inv=11418186xxxx | jq +{ + "11418186xxxx": { + "count": 4, + "events": [ + { + "message_id": 1, + "message": "Inverter start", + "start_time": 28028, + "end_time": 28028 + }, + { + "message_id": 209, + "message": "PV-1: No input", + "start_time": 28036, + "end_time": 0 + }, + { + "message_id": 2, + "message": "DTU command failed", + "start_time": 28092, + "end_time": 28092 + }, + { + "message_id": 207, + "message": "MPPT-A: Input undervoltage", + "start_time": 28336, + "end_time": 0 + } + ] + } +} +``` + +### combine curl and jq + +`jq` can filter specific fields from json output. + +For example, filter out the current total power: +``` +~$ curl --no-progress-meter http://192.168.10.10/api/livedata/status | jq '.total | .Power.v' +140.7999878 +``` + + +### Post information + +With HTTP POST commands information can be written to the OpenDTU. + +The Web API is designed to allow the web frontend in the web browser to communicate with the OpenDTU software running on the ESP32. It is not designed to be intuitive or user-friendly, so please follow the instructions here. + +#### Example 1: change ntp settings + +If you want to configure the ntp server setting, first fetch the information from the web API: + +``` +~$ curl http://192.168.10.10/api/ntp/config +{"ntp_server":"pool.ntp.org","ntp_timezone":"CET-1CEST,M3.5.0,M10.5.0/3","ntp_timezone_descr":"Europe/Berlin"} +``` + +Then, second step, send your new settings. Use the text output from curl in the first step, add `data=` and enclose the whole data with single quotes. + +``` +~$ curl http://192.168.10.10/api/ntp/config -d 'data={"ntp_server":"my.own.ntp.server.home","ntp_timezone":"CET-1CEST,M3.5.0,M10.5.0/3","ntp_timezone_descr":"Europe/Berlin"}' +{"type":"success","message":"Settings saved!"} +``` +You will receive a json formatted response. + +#### Example 2: change power limit + +In the second example, I want to change the non persistent power limit of an inverter. Again, first fetch current data: + +``` +~$ curl http://192.168.10.10/api/limit/status +{"11418186xxxx":{"limit_relative":100,"max_power":600,"limit_set_status":"Ok"},"11418180xxxx":{"limit_relative":100,"max_power":800,"limit_set_status":"Ok"}} +``` + +I see data from two configured inverters. + +Now I set the relative power limit of inverter with serialnumber `11418180xxxx` to 50%. + +``` +~$ curl http://192.168.10.10/api/limit/config -d 'data={"serial":"11418180xxxx", "limit_type":1, "limit_value":50}' +{"type":"success","message":"Settings saved!"} +``` + +Then I read again the limit status. In the first answer the status is `pending`, some seconds later it changed to `OK`. + +``` +~$ curl http://192.168.10.10/api/limit/status +{"11418186xxxx":{"limit_relative":100,"max_power":600,"limit_set_status":"Ok"},"11418180xxxx":{"limit_relative":100,"max_power":800,"limit_set_status":"Pending"}} + +... + +~$ curl http://192.168.10.10/api/limit/status +{"11418186xxxx":{"limit_relative":100,"max_power":600,"limit_set_status":"Ok"},"11418180xxxx":{"limit_relative":50,"max_power":800,"limit_set_status":"Ok"}} +``` From fe8b68d2bef03b8c62b908b5ca91477bedfca58d Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Mon, 7 Nov 2022 18:48:02 +0100 Subject: [PATCH 11/47] Password protection for config settings API --- src/WebApi_config.cpp | 17 +++++++++++++++++ webapp/src/router/index.ts | 2 +- webapp/src/views/ConfigAdminView.vue | 28 +++++++++++++++++----------- 3 files changed, 35 insertions(+), 12 deletions(-) diff --git a/src/WebApi_config.cpp b/src/WebApi_config.cpp index e4376432..fe522652 100644 --- a/src/WebApi_config.cpp +++ b/src/WebApi_config.cpp @@ -6,6 +6,7 @@ #include "ArduinoJson.h" #include "AsyncJson.h" #include "Configuration.h" +#include "WebApi.h" #include void WebApiConfigClass::init(AsyncWebServer* server) @@ -32,11 +33,19 @@ void WebApiConfigClass::loop() void WebApiConfigClass::onConfigGet(AsyncWebServerRequest* request) { + if (!WebApi.checkCredentials(request)) { + return; + } + request->send(LittleFS, CONFIG_FILENAME_JSON, String(), true); } void WebApiConfigClass::onConfigDelete(AsyncWebServerRequest* request) { + if (!WebApi.checkCredentials(request)) { + return; + } + AsyncJsonResponse* response = new AsyncJsonResponse(); JsonObject retMsg = response->getRoot(); retMsg[F("type")] = F("warning"); @@ -93,6 +102,10 @@ void WebApiConfigClass::onConfigDelete(AsyncWebServerRequest* request) void WebApiConfigClass::onConfigUploadFinish(AsyncWebServerRequest* request) { + if (!WebApi.checkCredentials(request)) { + return; + } + // the request handler is triggered after the upload has finished... // create the response, add header, and send response @@ -108,6 +121,10 @@ void WebApiConfigClass::onConfigUploadFinish(AsyncWebServerRequest* request) void WebApiConfigClass::onConfigUpload(AsyncWebServerRequest* request, String filename, size_t index, uint8_t* data, size_t len, bool final) { + if (!WebApi.checkCredentials(request)) { + return; + } + if (!index) { // open the file on first call and store the file handle in the request object request->_tempFile = LittleFS.open(CONFIG_FILENAME_JSON, "w"); diff --git a/webapp/src/router/index.ts b/webapp/src/router/index.ts index 4e343a73..166172f6 100644 --- a/webapp/src/router/index.ts +++ b/webapp/src/router/index.ts @@ -100,7 +100,7 @@ const router = createRouter({ router.beforeEach((to, from, next) => { // redirect to login page if not logged in and trying to access a restricted page const publicPages = ['/', '/login', '/about', '/info/network', '/info/system', '/info/ntp', '/info/mqtt', - '/firmware/upgrade', '/settings/config', ]; + '/firmware/upgrade', ]; const authRequired = !publicPages.includes(to.path); const loggedIn = localStorage.getItem('user'); diff --git a/webapp/src/views/ConfigAdminView.vue b/webapp/src/views/ConfigAdminView.vue index 6d6f1df1..7802ddf5 100644 --- a/webapp/src/views/ConfigAdminView.vue +++ b/webapp/src/views/ConfigAdminView.vue @@ -112,6 +112,7 @@ import { } from 'bootstrap-icons-vue'; import * as bootstrap from 'bootstrap'; import BootstrapAlert from "@/components/BootstrapAlert.vue"; +import { handleResponse, authHeader } from '@/utils/authentication'; export default defineComponent({ components: { @@ -152,15 +153,10 @@ export default defineComponent({ fetch("/api/config/delete", { method: "POST", + headers: authHeader(), body: formData, }) - .then(function (response) { - if (response.status != 200) { - throw response.status; - } else { - return response.json(); - } - }) + .then(handleResponse) .then( (response) => { this.alertMessage = response.message; @@ -171,10 +167,17 @@ export default defineComponent({ this.modalFactoryReset.hide(); }, downloadConfig() { - const link = document.createElement('a') - link.href = "/api/config/get" - link.download = 'config.json' - link.click() + fetch("/api/config/get", { headers: authHeader() }) + .then(res => res.blob()) + .then(blob => { + var file = window.URL.createObjectURL(blob); + var a = document.createElement('a'); + a.href = file; + a.download = "config.json"; + document.body.appendChild(a); + a.click(); + a.remove(); + }); }, uploadConfig(event: Event | null) { this.uploading = true; @@ -206,6 +209,9 @@ export default defineComponent({ formData.append("config", this.file, "config"); request.open("post", "/api/config/upload"); + authHeader().forEach((value, key) => { + request.setRequestHeader(key, value); + }); request.send(formData); }, clear() { From c2de7dbdb84fca75b6cd2fddd44b9dab64e70871 Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Mon, 7 Nov 2022 18:49:36 +0100 Subject: [PATCH 12/47] webapp: Send X-Requested-With header for all requests This prevents browser password dialogs in all cases --- webapp/src/utils/authentication.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/webapp/src/utils/authentication.ts b/webapp/src/utils/authentication.ts index c6590b0a..aef44c37 100644 --- a/webapp/src/utils/authentication.ts +++ b/webapp/src/utils/authentication.ts @@ -3,7 +3,10 @@ export function authHeader(): Headers { let user = JSON.parse(localStorage.getItem('user') || ""); if (user && user.authdata) { - return new Headers({ 'Authorization': 'Basic ' + user.authdata }) + const headers = new Headers(); + headers.append('Authorization', 'Basic ' + user.authdata); + headers.append('X-Requested-With', 'XMLHttpRequest') + return new Headers(headers); } else { return new Headers(); } From d63476c70e1f9f719839d1722490df8684bbbfea Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Mon, 7 Nov 2022 18:52:22 +0100 Subject: [PATCH 13/47] webapp: Update dependencies --- webapp/package.json | 6 +++--- webapp/yarn.lock | 24 ++++++++++++------------ 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/webapp/package.json b/webapp/package.json index b57fad83..d58b300e 100644 --- a/webapp/package.json +++ b/webapp/package.json @@ -22,17 +22,17 @@ "devDependencies": { "@rushstack/eslint-patch": "^1.2.0", "@types/bootstrap": "^5.2.5", - "@types/node": "^18.11.8", + "@types/node": "^18.11.9", "@types/spark-md5": "^3.0.2", "@vitejs/plugin-vue": "^3.2.0", "@vue/eslint-config-typescript": "^11.0.2", "@vue/tsconfig": "^0.1.3", - "eslint": "^8.26.0", + "eslint": "^8.27.0", "eslint-plugin-vue": "^9.7.0", "npm-run-all": "^4.1.5", "sass": "^1.55.0", "typescript": "^4.8.4", - "vite": "^3.2.2", + "vite": "^3.2.3", "vite-plugin-compression": "^0.5.1", "vite-plugin-css-injected-by-js": "^2.1.1", "vue-tsc": "^1.0.9" diff --git a/webapp/yarn.lock b/webapp/yarn.lock index f6ef1d2a..291419ed 100644 --- a/webapp/yarn.lock +++ b/webapp/yarn.lock @@ -99,10 +99,10 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== -"@types/node@^18.11.8": - version "18.11.8" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.8.tgz#16d222a58d4363a2a359656dd20b28414de5d265" - integrity sha512-uGwPWlE0Hj972KkHtCDVwZ8O39GmyjfMane1Z3GUBGGnkZ2USDq7SxLpVIiIHpweY9DS0QTDH0Nw7RNBsAAZ5A== +"@types/node@^18.11.9": + version "18.11.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.9.tgz#02d013de7058cea16d36168ef2fc653464cfbad4" + integrity sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg== "@types/spark-md5@^3.0.2": version "3.0.2" @@ -859,10 +859,10 @@ eslint-visitor-keys@^3.3.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== -eslint@^8.26.0: - version "8.26.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.26.0.tgz#2bcc8836e6c424c4ac26a5674a70d44d84f2181d" - integrity sha512-kzJkpaw1Bfwheq4VXUezFriD1GxszX6dUekM7Z3aC2o4hju+tsR/XyTC3RcoSD7jmy9VkPU3+N6YjVU2e96Oyg== +eslint@^8.27.0: + version "8.27.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.27.0.tgz#d547e2f7239994ad1faa4bb5d84e5d809db7cf64" + integrity sha512-0y1bfG2ho7mty+SiILVf9PfuRA49ek4Nc60Wmmu62QlobNR+CeXa4xXIJgcuwSQgZiWaPH+5BDsctpIW0PR/wQ== dependencies: "@eslint/eslintrc" "^1.3.3" "@humanwhocodes/config-array" "^0.11.6" @@ -2049,10 +2049,10 @@ vite-plugin-css-injected-by-js@^2.1.1: resolved "https://registry.yarnpkg.com/vite-plugin-css-injected-by-js/-/vite-plugin-css-injected-by-js-2.1.1.tgz#a79275241c61f1c8d55d228f5b2dded450a580e4" integrity sha512-gjIG6iFWde32oRr/bK9CsfN+jdbura2y4GlDzeOiEm6py38ud8dXzFl9zwmHjOjZdr8XEgQ9TovzVGNzp47esw== -vite@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/vite/-/vite-3.2.2.tgz#280762bfaf47bcea1d12698427331c0009ac7c1f" - integrity sha512-pLrhatFFOWO9kS19bQ658CnRYzv0WLbsPih6R+iFeEEhDOuYgYCX2rztUViMz/uy/V8cLCJvLFeiOK7RJEzHcw== +vite@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/vite/-/vite-3.2.3.tgz#7a68d9ef73eff7ee6dc0718ad3507adfc86944a7" + integrity sha512-h8jl1TZ76eGs3o2dIBSsvXDLb1m/Ec1iej8ZMdz+PsaFUsftZeWe2CZOI3qogEsMNaywc17gu0q6cQDzh/weCQ== dependencies: esbuild "^0.15.9" postcss "^8.4.18" From 233efe3a5061a2a06001e8405ce3ad5f3944ade1 Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Mon, 7 Nov 2022 19:02:07 +0100 Subject: [PATCH 14/47] Password protection for firmware update API --- src/WebApi_firmware.cpp | 9 +++++++++ webapp/src/router/index.ts | 3 +-- webapp/src/views/FirmwareUpgradeView.vue | 4 ++++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/WebApi_firmware.cpp b/src/WebApi_firmware.cpp index 9b33dc77..48984f42 100644 --- a/src/WebApi_firmware.cpp +++ b/src/WebApi_firmware.cpp @@ -7,6 +7,7 @@ #include "AsyncJson.h" #include "Configuration.h" #include "Update.h" +#include "WebApi.h" #include "helper.h" void WebApiFirmwareClass::init(AsyncWebServer* server) @@ -31,6 +32,10 @@ void WebApiFirmwareClass::loop() void WebApiFirmwareClass::onFirmwareUpdateFinish(AsyncWebServerRequest* request) { + if (!WebApi.checkCredentials(request)) { + return; + } + // the request handler is triggered after the upload has finished... // create the response, add header, and send response @@ -46,6 +51,10 @@ void WebApiFirmwareClass::onFirmwareUpdateFinish(AsyncWebServerRequest* request) void WebApiFirmwareClass::onFirmwareUpdateUpload(AsyncWebServerRequest* request, String filename, size_t index, uint8_t* data, size_t len, bool final) { + if (!WebApi.checkCredentials(request)) { + return; + } + // Upload handler chunks in data if (!index) { if (!request->hasParam("MD5", true)) { diff --git a/webapp/src/router/index.ts b/webapp/src/router/index.ts index 166172f6..74a7d123 100644 --- a/webapp/src/router/index.ts +++ b/webapp/src/router/index.ts @@ -99,8 +99,7 @@ const router = createRouter({ router.beforeEach((to, from, next) => { // redirect to login page if not logged in and trying to access a restricted page - const publicPages = ['/', '/login', '/about', '/info/network', '/info/system', '/info/ntp', '/info/mqtt', - '/firmware/upgrade', ]; + const publicPages = ['/', '/login', '/about', '/info/network', '/info/system', '/info/ntp', '/info/mqtt', ]; const authRequired = !publicPages.includes(to.path); const loggedIn = localStorage.getItem('user'); diff --git a/webapp/src/views/FirmwareUpgradeView.vue b/webapp/src/views/FirmwareUpgradeView.vue index 7e4958ec..f9a7b42f 100644 --- a/webapp/src/views/FirmwareUpgradeView.vue +++ b/webapp/src/views/FirmwareUpgradeView.vue @@ -77,6 +77,7 @@ import { BIconArrowRepeat, BIconCheckCircle } from 'bootstrap-icons-vue'; +import { authHeader } from '@/utils/authentication'; export default defineComponent({ components: { @@ -160,6 +161,9 @@ export default defineComponent({ formData.append("MD5", (md5 as string)); formData.append("firmware", this.file, "firmware"); request.open("post", "/api/firmware/update"); + authHeader().forEach((value, key) => { + request.setRequestHeader(key, value); + }); request.send(formData); }) .catch(() => { From f163e239d2242fbae4821a21f94ff9c2bbeb1086 Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Mon, 7 Nov 2022 19:35:29 +0100 Subject: [PATCH 15/47] Fix #303: Add inverter name as prefix to HASS auto discovery --- src/MqttHassPublishing.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/MqttHassPublishing.cpp b/src/MqttHassPublishing.cpp index 60705b4a..d103281e 100644 --- a/src/MqttHassPublishing.cpp +++ b/src/MqttHassPublishing.cpp @@ -152,7 +152,7 @@ void MqttHassPublishingClass::publishInverterButton(std::shared_ptrname()) + " " + caption; root[F("uniq_id")] = serial + "_" + buttonId; if (strcmp(icon, "")) { root[F("ic")] = icon; @@ -191,7 +191,7 @@ void MqttHassPublishingClass::publishInverterNumber( String statTopic = MqttSettings.getPrefix() + serial + "/" + stateTopic; DynamicJsonDocument root(1024); - root[F("name")] = caption; + root[F("name")] = String(inv->name()) + " " + caption; root[F("uniq_id")] = serial + "_" + buttonId; if (strcmp(icon, "")) { root[F("ic")] = icon; @@ -226,7 +226,7 @@ void MqttHassPublishingClass::publishInverterBinarySensor(std::shared_ptrname()) + " " + caption; root[F("uniq_id")] = serial + "_" + sensorId; root[F("stat_t")] = statTopic; root[F("pl_on")] = payload_on; From 107330c70cd0861a7e57e8ab0913cf63a85c4507 Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Mon, 7 Nov 2022 20:51:09 +0100 Subject: [PATCH 16/47] webapp: Fix location of Logout button --- webapp/src/components/NavBar.vue | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/webapp/src/components/NavBar.vue b/webapp/src/components/NavBar.vue index e66760ad..4cda7032 100644 --- a/webapp/src/components/NavBar.vue +++ b/webapp/src/components/NavBar.vue @@ -7,7 +7,7 @@ - From 11c272b1fbc7b5616cc464318fbe32ba9f401d08 Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Mon, 7 Nov 2022 21:02:35 +0100 Subject: [PATCH 17/47] webapp: add app.js.gz --- webapp_dist/js/app.js.gz | Bin 113456 -> 114744 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/webapp_dist/js/app.js.gz b/webapp_dist/js/app.js.gz index 4cdb77b967fff3383e9a86dbf1a445d885b6e60c..02b4d1088be48e484d32ef92246350c28df4f05a 100644 GIT binary patch literal 114744 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�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 z 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 $b7uOF+I`$ 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

~JW$W48G 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 From ab0029d9fd1e4cf6ecd807654d240b791b55aa35 Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Mon, 7 Nov 2022 22:38:53 +0100 Subject: [PATCH 18/47] Show the correct amount of string input fields in inverter config --- src/WebApi_inverter.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/WebApi_inverter.cpp b/src/WebApi_inverter.cpp index f467fd5d..2fb254f9 100644 --- a/src/WebApi_inverter.cpp +++ b/src/WebApi_inverter.cpp @@ -53,13 +53,16 @@ void WebApiInverterClass::onInverterList(AsyncWebServerRequest* request) obj[F("serial")] = buffer; auto inv = Hoymiles.getInverterBySerial(config.Inverter[i].Serial); + uint8_t max_channels; if (inv == nullptr) { obj[F("type")] = F("Unknown"); + max_channels = INV_MAX_CHAN_COUNT; } else { obj[F("type")] = inv->typeName(); + max_channels = inv->Statistics()->getChannelCount(); } - for (uint8_t c = 0; c < INV_MAX_CHAN_COUNT; c++) { + for (uint8_t c = 0; c < max_channels; c++) { obj[F("max_power")][c] = config.Inverter[i].MaxChannelPower[c]; } } @@ -223,7 +226,7 @@ void WebApiInverterClass::onInverterEdit(AsyncWebServerRequest* request) } JsonArray maxPowerArray = root[F("max_power")].as(); - if (maxPowerArray.size() != INV_MAX_CHAN_COUNT) { + if (maxPowerArray.size() == 0 || maxPowerArray.size() > INV_MAX_CHAN_COUNT) { retMsg[F("message")] = F("Invalid amount of max channel setting given!"); response->setLength(); request->send(response); From 0a6965c0157e95d596ed73cd4c7024f5c1e114b7 Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Mon, 7 Nov 2022 23:34:54 +0100 Subject: [PATCH 19/47] webapp: Implemented logged-out event --- webapp/src/components/NavBar.vue | 14 +++++++++++--- webapp/src/utils/authentication.ts | 5 ++++- webapp/src/views/ConfigAdminView.vue | 2 +- webapp/src/views/DtuAdminView.vue | 4 ++-- webapp/src/views/InverterAdminView.vue | 8 ++++---- webapp/src/views/LoginView.vue | 1 + webapp/src/views/MqttAdminView.vue | 4 ++-- webapp/src/views/NetworkAdminView.vue | 4 ++-- webapp/src/views/NtpAdminView.vue | 8 ++++---- webapp/src/views/SecurityAdminView.vue | 4 ++-- 10 files changed, 33 insertions(+), 21 deletions(-) diff --git a/webapp/src/components/NavBar.vue b/webapp/src/components/NavBar.vue index 4cda7032..f86f587d 100644 --- a/webapp/src/components/NavBar.vue +++ b/webapp/src/components/NavBar.vue @@ -72,8 +72,9 @@ About -