Skip to content

Commit

Permalink
Merge branch 'refs/heads/main' into obspro
Browse files Browse the repository at this point in the history
# Conflicts:
#	.gitignore
#	platformio.ini
  • Loading branch information
amandel committed May 22, 2024
2 parents c3052b0 + e9cfaaa commit 37f75a0
Show file tree
Hide file tree
Showing 13 changed files with 111 additions and 63 deletions.
10 changes: 5 additions & 5 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ jobs:
# could use a container with sq tools already installed
image: infinitecoding/platformio-for-ci:latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
with:
fetch-depth: 0

Expand Down Expand Up @@ -67,7 +67,7 @@ jobs:
- name: Cache SonarCloud packages
id: cache-sonar
uses: actions/cache@v3
uses: actions/cache@v4
with:
path: |
~/.sonar/cache
Expand Down Expand Up @@ -182,7 +182,7 @@ jobs:
-Dsonar.projectVersion=${{ env.OBS_MAJOR_VERSION }}
- name: Upload Build Asset
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: obs-${{ env.OBS_VERSION }}
path: |
Expand All @@ -194,7 +194,7 @@ jobs:
if-no-files-found: error

- name: Upload Build Asset Initial Flash
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: obs-${{ env.OBS_VERSION }}-initial-flash
path: |
Expand All @@ -209,7 +209,7 @@ jobs:
- name: Generate changelog
id: changelog
if: ${{ env.OBS_PREPARE_RELEASE == 'true' }}
uses: metcalfc/changelog-generator@v4.2.0
uses: metcalfc/changelog-generator@v4.3.1
with:
myToken: ${{ secrets.GITHUB_TOKEN }}

Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/codeql-analysis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,11 @@ jobs:

steps:
- name: Checkout repository
uses: actions/checkout@v3
uses: actions/checkout@v4

# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
Expand All @@ -55,4 +55,4 @@ jobs:
platformio ci --build-dir="./bin" --keep-build-dir --project-conf=platformio.ini ./src/
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2
uses: github/codeql-action/analyze@v3
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,9 @@ docs/vendor

.DS_Store
.vscode

# for people installing pio venv style
venv

# jetbrains
.idea
8 changes: 0 additions & 8 deletions .idea/.gitignore

This file was deleted.

21 changes: 13 additions & 8 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 5 additions & 3 deletions platformio.ini
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@ src_dir = src
extra_configs = custom_config.ini

[env:esp32dev]
platform = espressif32 @ 5.4.0
platform = espressif32 @ 6.6.0
; 5.4.0
board = esp32dev
framework = arduino
monitor_speed = 115200
Expand All @@ -49,10 +50,11 @@ board_build.partitions = src/sd-partition-table.csv
lib_deps =
adafruit/Adafruit BusIO @ ^1.13.1
; https://arduinojson.org/v6/api/
bblanchon/ArduinoJson @ ^6.21.2
rlogiacco/CircularBuffer @ ^1.3.3
bblanchon/ArduinoJson @ ^6.21.5
rlogiacco/CircularBuffer @ ^1.4.0
; olikraus/U8g2 @ ^2.35.9
https://codeberg.org/j000bs/U8g2_Arduino.git#jhd-fix
; replaced by U8g2 thingpulse/ESP8266 and ESP32 OLED driver for SSD1306 displays @ ^4.5.0
adafruit/Adafruit BMP280 Library@^2.6.8
pololu/VL53L0X@^1.3.1
; https://github.com/fhessel/esp32_https_server
Expand Down
11 changes: 7 additions & 4 deletions src/Firmware.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,10 @@ static const size_t APP_PARTITION_SIZE = 0x380000; // read from part?
static const int SHA256_HASH_LEN = 32;

// todo: error handling
void Firmware::downloadToSd(String url, String filename) {
void Firmware::downloadToSd(String url, String filename, bool unsafe) {
WiFiClientSecure client;
client.setCACert(trustedRootCACertificates);
if (!unsafe) client.setCACert(trustedRootCACertificates);
else client.setInsecure();
HTTPClient http;
http.setUserAgent(mUserAgent);
http.setFollowRedirects(HTTPC_STRICT_FOLLOW_REDIRECTS);
Expand All @@ -58,10 +59,12 @@ void Firmware::downloadToSd(String url, String filename) {
}

bool Firmware::downloadToFlash(String url,
std::function<void(uint32_t pos, uint32_t size)> progress) {
std::function<void(uint32_t pos, uint32_t size)> progress,
bool unsafe) {
bool success = false;
WiFiClientSecure client;
client.setCACert(trustedRootCACertificates);
if (!unsafe) client.setCACert(trustedRootCACertificates);
if (unsafe) client.setInsecure();
HTTPClient http;
http.setUserAgent(mUserAgent);
http.setFollowRedirects(HTTPC_STRICT_FOLLOW_REDIRECTS);
Expand Down
4 changes: 2 additions & 2 deletions src/Firmware.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@
class Firmware {
public:
explicit Firmware(String userAgent) : mUserAgent(userAgent) {};
void downloadToSd(String url, String filename);
bool downloadToFlash(String url, std::function<void(uint32_t, uint32_t)> progress);
void downloadToSd(String url, String filename, bool unsafe);
bool downloadToFlash(String url, std::function<void(uint32_t, uint32_t)> progress, bool unsafe);
String getLastMessage();

static String getFlashAppVersion();
Expand Down
2 changes: 1 addition & 1 deletion src/OpenBikeSensorFirmware.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@

// --- Global variables ---
// Version only change the "vN.M" part if needed.
const char *OBSVersion = "v0.19" BUILD_NUMBER;
const char *OBSVersion = "v0.20" BUILD_NUMBER;

const uint8_t LEFT_SENSOR_ID = 1;
const uint8_t RIGHT_SENSOR_ID = 0;
Expand Down
21 changes: 19 additions & 2 deletions src/configServer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,7 @@ static const char* const updateSdIndex = R""""(
<p>{description}</p>
<h3>From Github (preferred)</h3>
List also pre-releases<br><input type='checkbox' id='preReleases' onchange='selectFirmware()'>
Ignore TLS Errors (see documentation)<br><input type='checkbox' id='ignoreSSL' onchange='selectFirmware()'>
<script>
let availableReleases;
async function updateFirmwareList() {
Expand All @@ -259,6 +260,7 @@ async function updateFirmwareList() {
}
function selectFirmware() {
const displayPreReleases = (document.getElementById('preReleases').checked == true);
const ignoreSSL = (document.getElementById('ignoreSSL').checked == true);
url = "";
version = "";
availableReleases.filter(r => displayPreReleases || !r.prerelease).forEach(release => {
Expand All @@ -276,16 +278,25 @@ function selectFirmware() {
document.getElementById('version').value = "Update to " + version;
document.getElementById('version').disabled = false;
document.getElementById('downloadUrl').value = url;
document.getElementById('directlink').href = url;
} else {
document.getElementById('version').value = "No version found";
document.getElementById('version').disabled = true;
document.getElementById('downloadUrl').value = "";
document.getElementById('directlink').href = "";
}
if (ignoreSSL) {
document.getElementById('unsafe').value = "1";
} else {
document.getElementById('unsafe').value = "0";
}
}
updateFirmwareList();
</script>
<input type='hidden' name='downloadUrl' id='downloadUrl' value=''/>
<input type='hidden' name='unsafe' id='unsafe' value='0'/>
<input type='submit' name='version' id='version' class=btn value='Update' />
If the upgrade via the button above does not work<br/><a id="directlink" href="">download firmware.bin</a><br/> and upload manually below.
<h3>File Upload</h3>
)"""";

Expand Down Expand Up @@ -1676,11 +1687,13 @@ void updateProgress(size_t pos, size_t all) {
static void handleFlashUpdateUrlAction(HTTPRequest * req, HTTPResponse * res) {
const auto params = extractParameters(req);
const auto url = getParameter(params, "downloadUrl");
const auto unsafe = getParameter(params,"unsafe");

log_i("Flash App Url is '%s'", url.c_str());

Firmware f(String("OBS/") + String(OBSVersion));
sensorManager->detachInterrupts();
if (f.downloadToFlash(url, updateProgress)) {
if (f.downloadToFlash(url, updateProgress, unsafe[0] == '1')) {
obsDisplay->showTextOnGrid(0, 3, "Success!");
sendRedirect(res, "/updatesd");
} else {
Expand Down Expand Up @@ -2112,6 +2125,8 @@ static bool mkSdFlashDir() {
static void handleFirmwareUpdateSdUrlAction(HTTPRequest * req, HTTPResponse * res) {
const auto params = extractParameters(req);
const auto url = getParameter(params, "downloadUrl");
const auto unsafe = getParameter(params, "unsafe");

log_i("OBS Firmware URL is '%s'", url.c_str());

if (!mkSdFlashDir()) {
Expand All @@ -2122,7 +2137,9 @@ static void handleFirmwareUpdateSdUrlAction(HTTPRequest * req, HTTPResponse * re
}
// TODO: Progress bar display && http!
Firmware f(String("OBS/") + String(OBSVersion));
f.downloadToSd(url, "/sdflash/app.bin");
f.downloadToSd(url, "/sdflash/app.bin", unsafe[0] == '1');
obsDisplay->showTextOnGrid(0, 3, unsafe);


String firmwareError = Firmware::checkSdFirmware();
if (Firmware::getFlashAppVersion().isEmpty()) {
Expand Down
2 changes: 1 addition & 1 deletion src/utils/alpdata.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ void AlpData::update(DisplayDevice *display) {
if (!f || f.size() < ALP_DATA_MIN_FILE_SIZE ) {
lastModified = "";
} else if (lastWrite > TimeUtils::PAST_TIME &&
time(nullptr) - lastWrite > 4 * 24 * 60 * 60) {
time(nullptr) - lastWrite < 4 * 24 * 60 * 60) {
log_d("File still current %s",
TimeUtils::dateTimeToString(lastWrite).c_str());
log_d("Now: %s",
Expand Down
73 changes: 48 additions & 25 deletions src/utils/cacerts.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -147,30 +147,6 @@ const char *const trustedRootCACertificates =
"MldlTTKB3zhThV1+XWYp6rjd5JW1zbVWEkLNxE7GJThEUG3szgBVGP7pSWTUTsqX\n"
"nLRbwHOoq7hHwg==\n"
"-----END CERTIFICATE-----\n"
// GITHUB_ROOT_CA
"-----BEGIN CERTIFICATE-----\n"
"MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs\n"
"MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n"
"d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j\n"
"ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL\n"
"MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3\n"
"LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug\n"
"RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm\n"
"+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW\n"
"PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM\n"
"xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB\n"
"Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3\n"
"hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg\n"
"EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF\n"
"MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA\n"
"FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec\n"
"nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z\n"
"eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF\n"
"hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2\n"
"Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe\n"
"vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep\n"
"+OkuE6N36B9K\n"
"-----END CERTIFICATE-----\n"
// DigiCert Global Root CA (new github root CA 2022-03-15)
"-----BEGIN CERTIFICATE-----\n"
"MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh\n"
Expand All @@ -193,4 +169,51 @@ const char *const trustedRootCACertificates =
"PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls\n"
"YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk\n"
"CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=\n"
"-----END CERTIFICATE-----\n";
"-----END CERTIFICATE-----\n"
// USERTRUST ECC Certification Authority (new github root CA 2024-05-11)
"-----BEGIN CERTIFICATE-----\n"
"MIID0zCCArugAwIBAgIQVmcdBOpPmUxvEIFHWdJ1lDANBgkqhkiG9w0BAQwFADB7\n"
"MQswCQYDVQQGEwJHQjEbMBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYD\n"
"VQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UE\n"
"AwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTE5MDMxMjAwMDAwMFoXDTI4\n"
"MTIzMTIzNTk1OVowgYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpOZXcgSmVyc2V5\n"
"MRQwEgYDVQQHEwtKZXJzZXkgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBO\n"
"ZXR3b3JrMS4wLAYDVQQDEyVVU0VSVHJ1c3QgRUNDIENlcnRpZmljYXRpb24gQXV0\n"
"aG9yaXR5MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEGqxUWqn5aCPnetUkb1PGWthL\n"
"q8bVttHmc3Gu3ZzWDGH926CJA7gFFOxXzu5dP+Ihs8731Ip54KODfi2X0GHE8Znc\n"
"JZFjq38wo7Rw4sehM5zzvy5cU7Ffs30yf4o043l5o4HyMIHvMB8GA1UdIwQYMBaA\n"
"FKARCiM+lvEH7OKvKe+CpX/QMKS0MB0GA1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1\n"
"xmNjmjAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zARBgNVHSAECjAI\n"
"MAYGBFUdIAAwQwYDVR0fBDwwOjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5j\n"
"b20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNAYIKwYBBQUHAQEEKDAmMCQG\n"
"CCsGAQUFBzABhhhodHRwOi8vb2NzcC5jb21vZG9jYS5jb20wDQYJKoZIhvcNAQEM\n"
"BQADggEBABns652JLCALBIAdGN5CmXKZFjK9Dpx1WywV4ilAbe7/ctvbq5AfjJXy\n"
"ij0IckKJUAfiORVsAYfZFhr1wHUrxeZWEQff2Ji8fJ8ZOd+LygBkc7xGEJuTI42+\n"
"FsMuCIKchjN0djsoTI0DQoWz4rIjQtUfenVqGtF8qmchxDM6OW1TyaLtYiKou+JV\n"
"bJlsQ2uRl9EMC5MCHdK8aXdJ5htN978UeAOwproLtOGFfy/cQjutdAFI3tZs4RmY\n"
"CV4Ks2dH/hzg1cEo70qLRDEmBDeNiXQ2Lu+lIg+DdEmSx/cQwgwp+7e9un/jX9Wf\n"
"8qn0dNW44bOwgeThpWOjzOoEeJBuv/c=\n"
"-----END CERTIFICATE-----\n"
"-----BEGIN CERTIFICATE-----\n"
"MIIDqDCCAy6gAwIBAgIRAPNkTmtuAFAjfglGvXvh9R0wCgYIKoZIzj0EAwMwgYgx\n"
"CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpOZXcgSmVyc2V5MRQwEgYDVQQHEwtKZXJz\n"
"ZXkgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMS4wLAYDVQQD\n"
"EyVVU0VSVHJ1c3QgRUNDIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTE4MTEw\n"
"MjAwMDAwMFoXDTMwMTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAkdCMRswGQYDVQQI\n"
"ExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcTB1NhbGZvcmQxGDAWBgNVBAoT\n"
"D1NlY3RpZ28gTGltaXRlZDE3MDUGA1UEAxMuU2VjdGlnbyBFQ0MgRG9tYWluIFZh\n"
"bGlkYXRpb24gU2VjdXJlIFNlcnZlciBDQTBZMBMGByqGSM49AgEGCCqGSM49AwEH\n"
"A0IABHkYk8qfbZ5sVwAjBTcLXw9YWsTef1Wj6R7W2SUKiKAgSh16TwUwimNJE4xk\n"
"IQeV/To14UrOkPAY9z2vaKb71EijggFuMIIBajAfBgNVHSMEGDAWgBQ64QmG1M8Z\n"
"wpZ2dEl23OA1xmNjmjAdBgNVHQ4EFgQU9oUKOxGG4QR9DqoLLNLuzGR7e64wDgYD\n"
"VR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0lBBYwFAYIKwYB\n"
"BQUHAwEGCCsGAQUFBwMCMBsGA1UdIAQUMBIwBgYEVR0gADAIBgZngQwBAgEwUAYD\n"
"VR0fBEkwRzBFoEOgQYY/aHR0cDovL2NybC51c2VydHJ1c3QuY29tL1VTRVJUcnVz\n"
"dEVDQ0NlcnRpZmljYXRpb25BdXRob3JpdHkuY3JsMHYGCCsGAQUFBwEBBGowaDA/\n"
"BggrBgEFBQcwAoYzaHR0cDovL2NydC51c2VydHJ1c3QuY29tL1VTRVJUcnVzdEVD\n"
"Q0FkZFRydXN0Q0EuY3J0MCUGCCsGAQUFBzABhhlodHRwOi8vb2NzcC51c2VydHJ1\n"
"c3QuY29tMAoGCCqGSM49BAMDA2gAMGUCMEvnx3FcsVwJbZpCYF9z6fDWJtS1UVRs\n"
"cS0chWBNKPFNpvDKdrdKRe+oAkr2jU+ubgIxAODheSr2XhcA7oz9HmedGdMhlrd9\n"
"4ToKFbZl+/OnFFzqnvOhcjHvClECEQcKmc8fmA==\n"
"-----END CERTIFICATE-----\n"
;

0 comments on commit 37f75a0

Please sign in to comment.