Skip to content

Commit 0ef36be

Browse files
committed
Use per device self signed cert #163
- cleanup (SonarQube hints) - removed unused
1 parent 7ea7d2b commit 0ef36be

File tree

2 files changed

+24
-59
lines changed

2 files changed

+24
-59
lines changed

src/utils/https.cpp

Lines changed: 23 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828

2929
using namespace httpsserver;
3030

31-
static volatile bool isCertReady = 0;
31+
static volatile bool isCertReady = false;
3232

3333
// "20190101000000"
3434
static std::string toCertDate(time_t theTime) {
@@ -78,11 +78,9 @@ static void createCert(void *param) {
7878
createDn(),
7979
fromDate,
8080
toDate);
81-
log_i("PK Length %d, Key Length %d", newCert.getPKLength(), newCert.getCertLength());
82-
8381
if (res != 0) {
8482
// Certificate generation failed. Inform the user.
85-
log_e("An error occured during certificate generation.");
83+
log_e("An error occurred during certificate generation.");
8684
log_e("Error code is 0x%04x", res);
8785
log_e("You may have a look at SSLCert.h to find the reason for this error.");
8886
} else {
@@ -91,17 +89,11 @@ static void createCert(void *param) {
9189
cert->setPK(newCert.getPKData(), newCert.getPKLength());
9290
log_i("Created new cert.");
9391
};
94-
9592
// Can this be done more elegant?
96-
isCertReady = 1;
93+
isCertReady = true;
9794
vTaskDelete(nullptr);
9895
}
9996

100-
/* Just ensure there is a cert! */
101-
void Https::ensureCertificate() {
102-
delete getCertificate();
103-
}
104-
10597
bool Https::existsCertificate() {
10698
return SPIFFS.exists("/key.der") && SPIFFS.exists("/cert.der");
10799
}
@@ -117,61 +109,42 @@ SSLCert *Https::getCertificate(std::function<void()> progress) {
117109

118110
// If now, create them
119111
if (!keyFile || !certFile || keyFile.size()==0 || certFile.size()==0) {
120-
log_i("No certificate found in SPIFFS, generating a new one for you.");
121-
log_i("If you face a Guru Meditation, give the script another try (or two...).");
112+
log_i("No certificate found in SPIFFS, generating a new one.");
122113
log_i("This may take up to a minute, so please stand by :)");
123114

124115
SSLCert * newCert = new SSLCert();
125-
126-
TaskHandle_t xHandle;
127116
xTaskCreate(reinterpret_cast<TaskFunction_t>(createCert), "createCert",
128-
16 * 1024, newCert, 1, &xHandle);
117+
16 * 1024, newCert, 1, nullptr);
129118

130119
while (!isCertReady) {
131120
if (progress) {
132121
progress();
133122
}
134123
delay(100);
135-
yield();
136124
esp_task_wdt_reset();
137125
}
138126

139-
log_i("PK Length %d, Key Length %d", newCert->getPKLength(), newCert->getCertLength());
140-
int res = 0;
141-
if (res == 0) {
142-
// We now have a certificate. We store it on the SPIFFS to restore it on next boot.
143-
144-
bool failure = false;
145-
// Private key
146-
keyFile = SPIFFS.open("/key.der", FILE_WRITE);
147-
if (!keyFile || !keyFile.write(newCert->getPKData(), newCert->getPKLength())) {
148-
log_e("Could not write /key.der");
149-
failure = true;
150-
}
151-
if (keyFile) keyFile.close();
152-
153-
// Certificate
154-
certFile = SPIFFS.open("/cert.der", FILE_WRITE);
155-
if (!certFile || !certFile.write(newCert->getCertData(), newCert->getCertLength())) {
156-
log_e("Could not write /cert.der");
157-
failure = true;
158-
}
159-
if (certFile) certFile.close();
160-
161-
if (failure) {
162-
log_e("Certificate could not be stored permanently, generating new certificate on reboot...");
163-
}
164-
165-
return newCert;
127+
bool failure = false;
128+
// Private key
129+
keyFile = SPIFFS.open("/key.der", FILE_WRITE);
130+
if (!keyFile || !keyFile.write(newCert->getPKData(), newCert->getPKLength())) {
131+
log_e("Could not write /key.der");
132+
failure = true;
133+
}
134+
if (keyFile) keyFile.close();
166135

167-
} else {
168-
// Certificate generation failed. Inform the user.
169-
log_e("An error occured during certificate generation.");
170-
log_e("Error code is 0x%04x", res);
171-
log_e("You may have a look at SSLCert.h to find the reason for this error.");
172-
return nullptr;
136+
// Certificate
137+
certFile = SPIFFS.open("/cert.der", FILE_WRITE);
138+
if (!certFile || !certFile.write(newCert->getCertData(), newCert->getCertLength())) {
139+
log_e("Could not write /cert.der");
140+
failure = true;
173141
}
142+
if (certFile) certFile.close();
174143

144+
if (failure) {
145+
log_e("Certificate could not be stored permanently, generating new certificate on reboot...");
146+
}
147+
return newCert;
175148
} else {
176149
log_i("Reading certificate from SPIFFS.");
177150

@@ -193,7 +166,6 @@ SSLCert *Https::getCertificate(std::function<void()> progress) {
193166
keyFile.read(keyBuffer, keySize);
194167
certFile.read(certBuffer, certSize);
195168

196-
// Close the files
197169
keyFile.close();
198170
certFile.close();
199171
log_i("Read %u bytes of certificate and %u bytes of key from SPIFFS", certSize, keySize);

src/utils/https.h

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,18 +27,11 @@
2727
#include <SSLCert.hpp>
2828
#include <functional>
2929

30-
using namespace httpsserver;
31-
3230
class Https {
3331
public:
34-
static SSLCert * getCertificate(std::function<void()> progress = nullptr);
32+
static httpsserver::SSLCert * getCertificate(std::function<void()> progress = nullptr);
3533
static bool removeCertificate();
36-
static void ensureCertificate();
3734
static bool existsCertificate();
38-
39-
private:
40-
static SSLCert *getCertificateInternal();
4135
};
4236

43-
4437
#endif //OPENBIKESENSORFIRMWARE_HTTPS_H

0 commit comments

Comments
 (0)