diff --git a/.gitignore b/.gitignore index a550dfbd..7250de71 100644 --- a/.gitignore +++ b/.gitignore @@ -5,7 +5,7 @@ .git .pio bin/* -#data/* +data/* !data/edit.htm !data/edit.htm.gz !data/vars.css @@ -13,6 +13,7 @@ bin/* !data/style.css.gz !data/script.js !data/script.js.gz +!data/cert/ !data/cert/x509_crt_bundle.bin src/user_setups/active/* include/user_config_override.h @@ -32,7 +33,6 @@ src/custom/* ## Test result files *.xml -*.bin ## Visual Studio Code specific ###### !.vscode diff --git a/data/x509_crt_bundle b/data/cert/x509_crt_bundle.bin similarity index 100% rename from data/x509_crt_bundle rename to data/cert/x509_crt_bundle.bin diff --git a/src/sys/svc/hasp_ota.cpp b/src/sys/svc/hasp_ota.cpp index c123e413..c4d14c5a 100644 --- a/src/sys/svc/hasp_ota.cpp +++ b/src/sys/svc/hasp_ota.cpp @@ -30,33 +30,35 @@ /** * This is lets-encrypt-x3-cross-signed.pem */ -// const char* rootCACertificate = "-----BEGIN CERTIFICATE-----\n" -// "MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/\n" -// "MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT\n" -// "DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow\n" -// "SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT\n" -// "GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC\n" -// "AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF\n" -// "q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8\n" -// "SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0\n" -// "Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA\n" -// "a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj\n" -// "/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T\n" -// "AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG\n" -// "CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv\n" -// "bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k\n" -// "c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw\n" -// "VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC\n" -// "ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz\n" -// "MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu\n" -// "Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF\n" -// "AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo\n" -// "uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/\n" -// "wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu\n" -// "X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG\n" -// "PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6\n" -// "KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg==\n" -// "-----END CERTIFICATE-----\n"; +/* +const char* rootCACertificate = "-----BEGIN CERTIFICATE-----\n" + "MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/\n" + "MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT\n" + "DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow\n" + "SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT\n" + "GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC\n" + "AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF\n" + "q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8\n" + "SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0\n" + "Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA\n" + "a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj\n" + "/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T\n" + "AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG\n" + "CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv\n" + "bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k\n" + "c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw\n" + "VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC\n" + "ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz\n" + "MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu\n" + "Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF\n" + "AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo\n" + "uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/\n" + "wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu\n" + "X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG\n" + "PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6\n" + "KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg==\n" + "-----END CERTIFICATE-----\n"; + */ extern const uint8_t rootca_crt_bundle_start[] asm("_binary_data_cert_x509_crt_bundle_bin_start"); #endif // ARDUINO_ARCH_ESP32 @@ -106,7 +108,7 @@ bool otaUpdateCheck() static inline void otaProgress(void) { - LOG_VERBOSE(TAG_OTA, F("%s %3u%"), + LOG_VERBOSE(TAG_OTA, F("%s %d%%"), (ArduinoOTA.getCommand() == U_FLASH ? F(D_OTA_UPDATING_FIRMWARE) : F(D_OTA_UPDATING_FILESYSTEM)), otaPrecentageComplete); } @@ -124,6 +126,7 @@ static void ota_on_start(void) otaPrecentageComplete = 0; } +#if HASP_USE_OTA > 0 static void ota_on_end(void) { otaPrecentageComplete = 100; @@ -171,32 +174,6 @@ static void ota_on_error(ota_error_t error) // delay(5000); } -static void ota_on_http_progress(unsigned int progress, unsigned int total) -{ - if(total == 0) return; - otaPrecentageComplete = progress * 100 / total; - haspProgressVal(otaPrecentageComplete); - LOG_VERBOSE(TAG_OTA, F("%s %3u%"), F(D_OTA_UPDATING_FIRMWARE), otaPrecentageComplete); -} - -static void ota_on_http_end(void) -{ - otaPrecentageComplete = 100; - LOG_TRACE(TAG_OTA, F(D_OTA_UPDATE_COMPLETE)); - haspProgressVal(100); - haspProgressMsg(F(D_OTA_UPDATE_APPLY)); - otaPrecentageComplete = -1; - dispatch_reboot(true); -} - -static void ota_on_http_error(int error) -{ - otaPrecentageComplete = -1; - LOG_ERROR(TAG_OTA, F("%s (%d)"), "HTTP Update error", error); - haspProgressMsg(F(D_OTA_UPDATE_FAILED)); -} - -#if HASP_USE_OTA > 0 void otaSetup(void) { if(strlen(otaUrl.c_str())) { @@ -245,6 +222,30 @@ void otaEverySecond(void) #endif // HASP_USE_OTA #if HASP_USE_HTTP_UPDATE > 0 +static void ota_on_http_progress(unsigned int progress, unsigned int total) +{ + if(total == 0) return; + otaPrecentageComplete = progress * 100 / total; + haspProgressVal(otaPrecentageComplete); + LOG_VERBOSE(TAG_OTA, F(D_OTA_UPDATING_FIRMWARE " %d%%"), otaPrecentageComplete); +} + +static void ota_on_http_end(void) +{ + otaPrecentageComplete = 100; + LOG_TRACE(TAG_OTA, F(D_OTA_UPDATE_COMPLETE)); + haspProgressVal(100); + haspProgressMsg(F(D_OTA_UPDATE_APPLY)); + otaPrecentageComplete = -1; +} + +static void ota_on_http_error(int error) +{ + otaPrecentageComplete = -1; + LOG_ERROR(TAG_OTA, F("%s (%d)"), "HTTP Update error", error); + haspProgressMsg(F(D_OTA_UPDATE_FAILED)); +} + void ota_http_update(const char* espOtaUrl) { // Update ESP firmware from HTTP t_httpUpdate_return returnCode; @@ -267,7 +268,7 @@ void ota_http_update(const char* espOtaUrl) httpUpdate.onStart(ota_on_start); httpUpdate.onEnd(ota_on_http_end); - httpUpdate.onProgress(ota_on_progress); + httpUpdate.onProgress(ota_on_http_progress); httpUpdate.onError(ota_on_http_error); httpUpdate.rebootOnUpdate(false); // We do that ourselves @@ -301,6 +302,7 @@ void ota_http_update(const char* espOtaUrl) case HTTP_UPDATE_OK: LOG_TRACE(TAG_FWUP, F("HTTP_UPDATE_OK")); dispatch_reboot(true); + delay(5000); } #if HASP_USE_MDNS > 0