From 82dd70a38ddf9a8337d4f9c33b079fe2754989eb Mon Sep 17 00:00:00 2001 From: Djuri Baars Date: Mon, 25 Nov 2024 23:54:02 +0100 Subject: [PATCH] Use CA bundle instead of single certificates, make auto update URL configurable --- .gitignore | 3 +- .gitmodules | 2 +- ci/Dockerfile | 15 ++++++ partition.csv | 4 +- platformio.ini | 1 + src/lib/block_notify.cpp | 2 +- src/lib/config.cpp | 4 ++ src/lib/defaults.hpp | 4 +- src/lib/ota.cpp | 13 +++-- src/lib/price_notify.cpp | 47 +++------------- src/lib/shared.cpp | 113 +++++++++++++++++++++++++-------------- src/lib/shared.hpp | 7 ++- src/lib/webserver.cpp | 3 +- x509_crt_bundle | Bin 0 -> 63694 bytes 14 files changed, 126 insertions(+), 92 deletions(-) create mode 100644 ci/Dockerfile create mode 100644 x509_crt_bundle diff --git a/.gitignore b/.gitignore index e5f0444..b6395ed 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,5 @@ data/.yarn data/node_modules node_modules .DS_Store -*.bin \ No newline at end of file +*.bin +ci/cache \ No newline at end of file diff --git a/.gitmodules b/.gitmodules index f921d34..d8b183a 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ [submodule "data"] path = data - url = https://github.com/btclock/webui.git + url = https://git.btclock.dev/btclock/webui.git diff --git a/ci/Dockerfile b/ci/Dockerfile new file mode 100644 index 0000000..795d695 --- /dev/null +++ b/ci/Dockerfile @@ -0,0 +1,15 @@ +# Use the official Python 3.9 image as the base +FROM python:3.9-slim + +# Set the working directory +WORKDIR /workspace + +RUN apt-get update && apt-get install -y git + +# Install PlatformIO +RUN pip install platformio + +WORKDIR /usr/src + +CMD ["platformio", "run"] + diff --git a/partition.csv b/partition.csv index 4ca1357..318b4f0 100644 --- a/partition.csv +++ b/partition.csv @@ -1,7 +1,7 @@ # Name, Type, SubType, Offset, Size, Flags nvs, data, nvs, 36K, 20K, otadata, data, ota, 56K, 8K, -app0, app, ota_0, 64K, 1700K, -app1, app, ota_1, , 1700K, +app0, app, ota_0, 64K, 1740K, +app1, app, ota_1, , 1740K, spiffs, data, spiffs, , 400K, coredump, data, coredump,, 64K, diff --git a/platformio.ini b/platformio.ini index 59f20fb..25e7d9c 100644 --- a/platformio.ini +++ b/platformio.ini @@ -21,6 +21,7 @@ monitor_speed = 115200 monitor_filters = esp32_exception_decoder, colorize board_build.filesystem = littlefs extra_scripts = post:scripts/extra_script.py +board_build.embed_files = x509_crt_bundle build_flags = !python scripts/git_rev.py -DLAST_BUILD_TIME=$UNIX_TIME diff --git a/src/lib/block_notify.cpp b/src/lib/block_notify.cpp index bf5d337..b86d497 100644 --- a/src/lib/block_notify.cpp +++ b/src/lib/block_notify.cpp @@ -302,7 +302,7 @@ int getBlockFetch() WiFiClientSecure client; if (preferences.getBool("mempoolSecure", DEFAULT_MEMPOOL_SECURE)) { - client.setCACert(mempoolWsCert); + client.setCACertBundle(rootca_crt_bundle_start); } String mempoolInstance = diff --git a/src/lib/config.cpp b/src/lib/config.cpp index d20a9d3..8f954b2 100644 --- a/src/lib/config.cpp +++ b/src/lib/config.cpp @@ -284,6 +284,10 @@ void setupPreferences() preferences.putBool("flDisable", isWhiteVersion() ? false : true); } + if (!preferences.isKey("gitReleaseUrl")) { + preferences.putString("gitReleaseUrl", DEFAULT_GIT_RELEASE_URL); + } + if (!preferences.isKey("fgColor")) { preferences.putUInt("fgColor", isWhiteVersion() ? GxEPD_BLACK : GxEPD_WHITE); preferences.putUInt("bgColor", isWhiteVersion() ? GxEPD_WHITE : GxEPD_BLACK); diff --git a/src/lib/defaults.hpp b/src/lib/defaults.hpp index 39e7406..dd222a5 100644 --- a/src/lib/defaults.hpp +++ b/src/lib/defaults.hpp @@ -60,4 +60,6 @@ #define DEFAULT_HTTP_AUTH_USERNAME "btclock" #define DEFAULT_HTTP_AUTH_PASSWORD "satoshi" -#define DEFAULT_ACTIVE_CURRENCIES "USD,EUR,JPY" \ No newline at end of file +#define DEFAULT_ACTIVE_CURRENCIES "USD,EUR,JPY" + +#define DEFAULT_GIT_RELEASE_URL "https://git.btclock.dev/api/v1/repos/btclock/btclock_v3/releases/latest" diff --git a/src/lib/ota.cpp b/src/lib/ota.cpp index d4b11a6..1800f76 100644 --- a/src/lib/ota.cpp +++ b/src/lib/ota.cpp @@ -106,9 +106,12 @@ void handleOTATask(void *parameter) ReleaseInfo getLatestRelease(const String &fileToDownload) { - String releaseUrl = "https://api.github.com/repos/btclock/btclock_v3/releases/latest"; + String releaseUrl = preferences.getString("gitReleaseUrl"); WiFiClientSecure client; - client.setCACert(github_root_ca); +// client.setCACert(isrg_root_x1cert); + client.setCACertBundle(rootca_crt_bundle_start); + + HTTPClient http; http.begin(client, releaseUrl); http.setUserAgent(USER_AGENT); @@ -153,7 +156,7 @@ ReleaseInfo getLatestRelease(const String &fileToDownload) int downloadUpdateHandler(char updateType) { WiFiClientSecure client; - client.setCACert(github_root_ca); + client.setCACertBundle(rootca_crt_bundle_start); HTTPClient http; http.setFollowRedirects(HTTPC_STRICT_FOLLOW_REDIRECTS); @@ -303,7 +306,7 @@ int downloadUpdateHandler(char updateType) void updateWebUi(String latestRelease, int command) { WiFiClientSecure client; - client.setCACert(github_root_ca); + client.setCACertBundle(rootca_crt_bundle_start); HTTPClient http; http.setFollowRedirects(HTTPC_STRICT_FOLLOW_REDIRECTS); http.begin(client, latestRelease); @@ -421,7 +424,7 @@ String downloadSHA256(const String &sha256Url) } WiFiClientSecure client; - client.setCACert(github_root_ca); + client.setCACertBundle(rootca_crt_bundle_start); HTTPClient http; http.setFollowRedirects(HTTPC_STRICT_FOLLOW_REDIRECTS); http.begin(client, sha256Url); diff --git a/src/lib/price_notify.cpp b/src/lib/price_notify.cpp index d6a1e71..f995de8 100644 --- a/src/lib/price_notify.cpp +++ b/src/lib/price_notify.cpp @@ -5,40 +5,6 @@ const char *wsOwnServerV2 = "wss://ws-staging.btclock.dev/api/v2/ws"; const char *wsServerPrice = "wss://ws.coincap.io/prices?assets=bitcoin"; -const char* coincapWsCert = R"EOF( ------BEGIN CERTIFICATE----- -MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw -TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh -cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 -WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu -ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY -MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc -h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ -0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U -A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW -T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH -B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC -B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv -KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn -OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn -jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw -qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI -rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq -hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL -ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ -3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK -NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 -ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur -TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC -jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc -oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq -4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA -mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d -emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= ------END CERTIFICATE----- -)EOF"; - // WebsocketsClient client; esp_websocket_client_handle_t clientPrice = NULL; esp_websocket_client_config_t config; @@ -60,7 +26,8 @@ void setupPriceNotify() { config = {.uri = wsServerPrice, .user_agent = USER_AGENT}; - config.cert_pem = coincapWsCert; + config.cert_pem = isrg_root_x1cert; + config.task_stack = (6*1024); } @@ -159,11 +126,11 @@ void processNewPrice(uint newPrice, char currency) { // const unsigned long oldPrice = currentPrice; currencyMap[currency] = newPrice; - // if (lastUpdateMap[currency] == 0 || - // (currentTime - lastUpdateMap[currency]) > 120) - // { - // preferences.putUInt("lastPrice", currentPrice); - // } + if (currency == CURRENCY_USD && ( lastUpdateMap[currency] == 0 || + (currentTime - lastUpdateMap[currency]) > 120)) + { + preferences.putUInt("lastPrice", currentPrice); + } lastUpdateMap[currency] = currentTime; // if (abs((int)(oldPrice-currentPrice)) > round(0.0015*oldPrice)) { if (workQueue != nullptr && (getCurrentScreen() == SCREEN_BTC_TICKER || diff --git a/src/lib/shared.cpp b/src/lib/shared.cpp index 597d803..20bf6d4 100644 --- a/src/lib/shared.cpp +++ b/src/lib/shared.cpp @@ -1,44 +1,79 @@ #include "shared.hpp" -const char *github_root_ca = - "-----BEGIN CERTIFICATE-----\n" - "MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDEL\n" - "MAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNl\n" - "eSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMT\n" - "JVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMjAx\n" - "MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgT\n" - "Ck5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVUaGUg\n" - "VVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlm\n" - "aWNhdGlvbiBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqflo\n" - "I+d61SRvU8Za2EurxtW20eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinng\n" - "o4N+LZfQYcTxmdwlkWOrfzCjtHDix6EznPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0G\n" - "A1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNVHQ8BAf8EBAMCAQYwDwYD\n" - "VR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBBHU6+4WMB\n" - "zzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbW\n" - "RNZu9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg=\n" - "-----END CERTIFICATE-----\n" - "-----BEGIN CERTIFICATE-----\n" - "MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh\n" - "MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n" - "d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH\n" - "MjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVT\n" - "MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\n" - "b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG\n" - "9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI\n" - "2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx\n" - "1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ\n" - "q2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz\n" - "tCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ\n" - "vIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAP\n" - "BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV\n" - "5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY\n" - "1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4\n" - "NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NG\n" - "Fdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ91\n" - "8rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe\n" - "pLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl\n" - "MrY=\n" - "-----END CERTIFICATE-----\n"; +// const char *github_root_ca = +// "-----BEGIN CERTIFICATE-----\n" +// "MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDEL\n" +// "MAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNl\n" +// "eSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMT\n" +// "JVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMjAx\n" +// "MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgT\n" +// "Ck5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVUaGUg\n" +// "VVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlm\n" +// "aWNhdGlvbiBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqflo\n" +// "I+d61SRvU8Za2EurxtW20eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinng\n" +// "o4N+LZfQYcTxmdwlkWOrfzCjtHDix6EznPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0G\n" +// "A1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNVHQ8BAf8EBAMCAQYwDwYD\n" +// "VR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBBHU6+4WMB\n" +// "zzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbW\n" +// "RNZu9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg=\n" +// "-----END CERTIFICATE-----\n" +// "-----BEGIN CERTIFICATE-----\n" +// "MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh\n" +// "MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n" +// "d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH\n" +// "MjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVT\n" +// "MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\n" +// "b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG\n" +// "9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI\n" +// "2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx\n" +// "1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ\n" +// "q2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz\n" +// "tCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ\n" +// "vIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAP\n" +// "BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV\n" +// "5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY\n" +// "1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4\n" +// "NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NG\n" +// "Fdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ91\n" +// "8rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe\n" +// "pLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl\n" +// "MrY=\n" +// "-----END CERTIFICATE-----\n"; + +const char* isrg_root_x1cert = R"EOF( +-----BEGIN CERTIFICATE----- +MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw +TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh +cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 +WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu +ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY +MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc +h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ +0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U +A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW +T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH +B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC +B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv +KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn +OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn +jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw +qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI +rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq +hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL +ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ +3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK +NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 +ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur +TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC +jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc +oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq +4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA +mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d +emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= +-----END CERTIFICATE----- +)EOF"; + #ifdef TEST_SCREENS uint8_t input_buffer[3 * input_buffer_pixels]; // up to depth 24 diff --git a/src/lib/shared.hpp b/src/lib/shared.hpp index a381c7f..19d1df0 100644 --- a/src/lib/shared.hpp +++ b/src/lib/shared.hpp @@ -9,6 +9,7 @@ #include #include #include +#include "esp_crt_bundle.h" #include #include @@ -68,7 +69,11 @@ const PROGMEM int screens[SCREEN_COUNT] = { const int usPerSecond = 1000000; const int usPerMinute = 60 * usPerSecond; -extern const char *github_root_ca; +// extern const char *github_root_ca; +extern const char *isrg_root_x1cert; + +extern const uint8_t rootca_crt_bundle_start[] asm("_binary_x509_crt_bundle_start"); + const PROGMEM char UPDATE_FIRMWARE = U_FLASH; const PROGMEM char UPDATE_WEBUI = U_SPIFFS; diff --git a/src/lib/webserver.cpp b/src/lib/webserver.cpp index d5dba86..7a6d28d 100644 --- a/src/lib/webserver.cpp +++ b/src/lib/webserver.cpp @@ -510,7 +510,7 @@ void onApiSettingsPatch(AsyncWebServerRequest *request, JsonVariant &json) settings["timePerScreen"].as() * 60); } - String strSettings[] = {"hostnamePrefix", "mempoolInstance", "nostrPubKey", "nostrRelay", "bitaxeHostname", "nostrZapPubkey", "httpAuthUser", "httpAuthPass"}; + String strSettings[] = {"hostnamePrefix", "mempoolInstance", "nostrPubKey", "nostrRelay", "bitaxeHostname", "nostrZapPubkey", "httpAuthUser", "httpAuthPass", "gitReleaseUrl"}; for (String setting : strSettings) { @@ -701,6 +701,7 @@ void onApiSettingsGet(AsyncWebServerRequest *request) root["nostrZapNotify"] = preferences.getBool("nostrZapNotify", DEFAULT_ZAP_NOTIFY_ENABLED); root["nostrZapPubkey"] = preferences.getString("nostrZapPubkey", DEFAULT_ZAP_NOTIFY_PUBKEY); + root["gitReleaseUrl"] = preferences.getString("gitReleaseUrl", DEFAULT_GIT_RELEASE_URL); root["bitaxeEnabled"] = preferences.getBool("bitaxeEnabled", DEFAULT_BITAXE_ENABLED); root["bitaxeHostname"] = preferences.getString("bitaxeHostname", DEFAULT_BITAXE_HOSTNAME); diff --git a/x509_crt_bundle b/x509_crt_bundle new file mode 100644 index 0000000000000000000000000000000000000000..77d8ea3e85b3c2b257ffe256f6231d116a0cc7b8 GIT binary patch literal 63694 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 literal 0 HcmV?d00001