From 6e82e8ad0d4c8c50f7b7d3a9b6aca4b5c1148e37 Mon Sep 17 00:00:00 2001 From: Francois Date: Wed, 19 Apr 2023 14:09:28 -0400 Subject: [PATCH] Added extra details to weblog webserver. Display libsodium and MbedTLS version. Allow specifying a custom stylesheet to start customizing the output. --- src/HAP.cpp | 19 ++++++++++++------- src/HomeSpan.cpp | 3 ++- src/HomeSpan.h | 7 ++++--- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/src/HAP.cpp b/src/HAP.cpp index 3db9f4a..bcd05b0 100644 --- a/src/HAP.cpp +++ b/src/HAP.cpp @@ -27,6 +27,7 @@ #include #include +#include #include #include "HAP.h" @@ -1239,18 +1240,20 @@ int HAPClient::getStatusURL(){ int mins=(seconds/=60)%60; int hours=(seconds/=60)%24; int days=(seconds/=24); + + char mbtlsv[32]; + mbedtls_version_get_string_full(mbtlsv); sprintf(uptime,"%d:%02d:%02d:%02d",days,hours,mins,secs); - String response="HTTP/1.1 200 OK\r\nContent-type: text/html\r\n\r\n"; + String response="HTTP/1.1 200 OK\r\nContent-type: text/html; charset=utf-8\r\n\r\n"; response+="" + String(homeSpan.displayName) + "\n"; - response+="\n"; - response+="\n"; + response+= String(homeSpan.webLog.cssStyle); + response+="\n"; + response+="\n"; response+="

" + String(homeSpan.displayName) + "

\n"; - - response+="\n"; + response+="
\n"; response+="\n"; response+="\n"; response+="\n"; @@ -1262,13 +1265,15 @@ int HAPClient::getStatusURL(){ response+="\n"; response+="\n"; response+="\n"; + response+="\n"; + response+="\n"; response+="\n"; response+="\n"; response+="
Up Time:" + String(uptime) + "
Current Time:" + String(clocktime) + "
Boot Time:" + String(homeSpan.webLog.bootTime) + "
Arduino-ESP Version:" + String(ARDUINO_ESP_VERSION) + "
ESP-IDF Version:" + String(ESP_IDF_VERSION_MAJOR) + "." + String(ESP_IDF_VERSION_MINOR) + "." + String(ESP_IDF_VERSION_PATCH) + "
HomeSpan Version:" + String(HOMESPAN_VERSION) + "
Sodium Version:" + String(sodium_version_string()) + " Lib " + String(sodium_library_version_major()) + "." + String(sodium_library_version_minor()) + "
MbedTLS:" + String(mbtlsv) + "
Sketch Version:" + String(homeSpan.getSketchVersion()) + "
Max Log Entries:" + String(homeSpan.webLog.maxEntries) + "
\n"; response+="

"; if(homeSpan.webLog.maxEntries>0){ - response+="\n"; + response+="
EntryUp TimeLog TimeClientMessage
\n"; int lastIndex=homeSpan.webLog.nEntries-homeSpan.webLog.maxEntries; if(lastIndex<0) lastIndex=0; diff --git a/src/HomeSpan.cpp b/src/HomeSpan.cpp index d5119eb..ffe14cc 100644 --- a/src/HomeSpan.cpp +++ b/src/HomeSpan.cpp @@ -2169,12 +2169,13 @@ SpanUserCommand::SpanUserCommand(char c, const char *s, void (*f)(const char *, // SpanWebLog // /////////////////////////////// -void SpanWebLog::init(uint16_t maxEntries, const char *serv, const char *tz, const char *url){ +void SpanWebLog::init(uint16_t maxEntries, const char *serv, const char *tz, const char *url, String css){ isEnabled=true; this->maxEntries=maxEntries; timeServer=serv; timeZone=tz; statusURL="GET /" + String(url) + " "; + cssStyle=css; log = (log_t *)calloc(maxEntries,sizeof(log_t)); if(timeServer) homeSpan.reserveSocketConnections(1); diff --git a/src/HomeSpan.h b/src/HomeSpan.h index 3b4a20d..d16ebef 100644 --- a/src/HomeSpan.h +++ b/src/HomeSpan.h @@ -151,6 +151,7 @@ struct SpanWebLog{ // optional web status/log data char bootTime[33]="Unknown"; // boot time String statusURL; // URL of status log uint32_t waitTime=10000; // number of milliseconds to wait for initial connection to time server + String cssStyle; // Default CSS style. struct log_t { // log entry type uint64_t upTime; // number of seconds since booting @@ -159,7 +160,7 @@ struct SpanWebLog{ // optional web status/log data String clientIP; // IP address of client making request (or "0.0.0.0" if not applicable) } *log=NULL; // array of log entries - void init(uint16_t maxEntries, const char *serv, const char *tz, const char *url); + void init(uint16_t maxEntries, const char *serv, const char *tz, const char *url, String css); void initTime(); void vLog(boolean sysMsg, const char *fmr, va_list ap); }; @@ -330,8 +331,8 @@ class Span{ int enableOTA(boolean auth=true, boolean safeLoad=true){return(spanOTA.init(auth, safeLoad, NULL));} // enables Over-the-Air updates, with (auth=true) or without (auth=false) authorization password int enableOTA(const char *pwd, boolean safeLoad=true){return(spanOTA.init(true, safeLoad, pwd));} // enables Over-the-Air updates, with custom authorization password (overrides any password stored with the 'O' command) - void enableWebLog(uint16_t maxEntries=0, const char *serv=NULL, const char *tz="UTC", const char *url=DEFAULT_WEBLOG_URL){ // enable Web Logging - webLog.init(maxEntries, serv, tz, url); + void enableWebLog(uint16_t maxEntries=0, const char *serv=NULL, const char *tz="UTC", const char *url=DEFAULT_WEBLOG_URL, String css="\n"){ // enable Web Logging + webLog.init(maxEntries, serv, tz, url, css); } void addWebLog(boolean sysMsg, const char *fmt, ...){ // add Web Log entry
EntryUp TimeLog TimeClientMessage