Summary Files Commits Branches @commit @diff @stats
diff options
context:
space:
mode:
Commit1e958b6c995e1b8def17fa3f8ee508de8b99118e (patch)
Author
 Syndamia <kamen@syndamia.com>
2024-05-27 14:47:34 +0300
Committer
 Syndamia <kamen@syndamia.com>
2024-05-27 14:47:34 +0300
Filesf2a6eed7fce9d3cfcac18457ad1400950401e7f7
uni-projects-1e958b6c995e1b8def17fa3f8ee508de8b99118e.tar
uni-projects-1e958b6c995e1b8def17fa3f8ee508de8b99118e.tar.gz
uni-projects-1e958b6c995e1b8def17fa3f8ee508de8b99118e.zip
Parent7c9c68eaba5ed7c75495eb6607a8155110c2df43 (diff)
[iot/goam] Updated server to HTTPS
diff --git a/Year 3/Internet of things/goam/main/CMakeLists.txt b/Year 3/Internet of things/goam/main/CMakeLists.txt
index 5c20816..36a0201 100644
--- a/Year 3/Internet of things/goam/main/CMakeLists.txt
+++ b/Year 3/Internet of things/goam/main/CMakeLists.txt
@@ -7,5 +7,7 @@ idf_component_register(SRCS "main.c"
"spiffs.c"
"nvs.c"
"ibm-vga-8x16.c"
- EMBED_FILES "../webserver-src/index.html"
+ EMBED_TXTFILES "../webserver/index.html"
+ "../webserver/cacert.pem"
+ "../webserver/prvtkey.pem"
INCLUDE_DIRS "")
diff --git a/Year 3/Internet of things/goam/main/webserver.c b/Year 3/Internet of things/goam/main/webserver.c
index 948d394..4f4f94e 100644
--- a/Year 3/Internet of things/goam/main/webserver.c
+++ b/Year 3/Internet of things/goam/main/webserver.c
@@ -6,7 +6,7 @@
#include <sys/param.h>
#include "esp_netif.h"
#include "esp_tls_crypto.h"
-#include <esp_http_server.h>
+#include <esp_https_server.h>
#include "esp_event.h"
#include "esp_netif.h"
#include "esp_tls.h"
@@ -18,57 +18,9 @@
static const char *TAG = "webserver";
-#define EXAMPLE_HTTP_QUERY_KEY_MAX_LEN (64)
-
static httpd_handle_t server = NULL;
/*
- * Request parsers
- */
-
-static bool request_get_header(httpd_req_t *req, const char* header_name, char* buf, size_t* buf_len) {
- /* char* buf; */
- /* size_t buf_len; */
- /* request_get_header(req, "Host", buf, &buf_len); */
- /* free(buf); */
-
- /* Get header value string length and allocate memory for length + 1,
- * extra byte for null termination */
- *buf_len = httpd_req_get_hdr_value_len(req, header_name) + 1;
- if (*buf_len > 1) {
- buf = malloc(*buf_len);
- /* Copy null terminated value string into buffer */
- if (httpd_req_get_hdr_value_str(req, header_name, buf, *buf_len) == ESP_OK) {
- ESP_LOGI(TAG, "Found header => %s: %s", header_name, buf);
- return true;
- }
-
- free(buf);
- return false;
- }
-}
-
-static bool request_get_query(httpd_req_t *req, const char* query_name, char* buf, size_t* buf_len) {
- /* Read URL query string length and allocate memory for length + 1,
- * extra byte for null termination */
- *buf_len = httpd_req_get_url_query_len(req) + 1;
- if (*buf_len > 1) {
- buf = malloc(*buf_len);
- if (httpd_req_get_url_query_str(req, buf, *buf_len) == ESP_OK) {
- ESP_LOGI(TAG, "Found URL query => %s", buf);
- char param[EXAMPLE_HTTP_QUERY_KEY_MAX_LEN];
- /* Get value of expected key from query string */
- if (httpd_query_key_value(buf, "query1", param, sizeof(param)) == ESP_OK) {
- ESP_LOGI(TAG, "Found URL query parameter => query1=%s", param);
- return true;
- }
- }
- free(buf);
- return false;
- }
-}
-
-/*
* Page handlers
*/
@@ -98,7 +50,6 @@ static const httpd_uri_t get_index = {
.uri = "/",
.method = HTTP_GET,
.handler = get_handler,
- .user_ctx = NULL
};
static esp_err_t get_image_handler(httpd_req_t *req)
@@ -118,7 +69,6 @@ static const httpd_uri_t get_image = {
.uri = SPIFFS_PREFIX "/*",
.method = HTTP_GET,
.handler = get_image_handler,
- .user_ctx = NULL
};
static void logi_post(httpd_req_t *req) {
@@ -157,7 +107,6 @@ static const httpd_uri_t post_network = {
.uri = "/network",
.method = HTTP_POST,
.handler = post_network_handler,
- .user_ctx = NULL
};
/*
@@ -189,16 +138,16 @@ static void disconnect_handler(void* arg, esp_event_base_t event_base,
* Public interface
*/
-#define SET_EMBEDDED_PTR(var, var_size, conv_filename) \
+#define SET_EMBEDDED_PTR(var_store, var_size, var, conv_filename) \
extern const unsigned char var ## _start[] asm("_binary_" conv_filename "_start"); \
extern const unsigned char var ## _end[] asm("_binary_" conv_filename "_end"); \
- var = (char*)(var ## _start); var_size = (var ## _end - var ## _start);
+ var_store = (var ## _start); var_size = (var ## _end - var ## _start);
void webserver_init() {
ESP_ERROR_CHECK(esp_event_handler_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &connect_handler, NULL));
/* ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT, WIFI_EVENT_STA_DISCONNECTED, &disconnect_handler, &server)); */
- SET_EMBEDDED_PTR(index_page, index_page_len, "index_html");
+ SET_EMBEDDED_PTR(index_page, index_page_len, index_page, "index_html");
}
void webserver_start()
@@ -208,11 +157,14 @@ void webserver_start()
return;
}
- httpd_config_t config = HTTPD_DEFAULT_CONFIG();
- config.lru_purge_enable = true;
- config.uri_match_fn = httpd_uri_match_wildcard;
+ httpd_ssl_config_t config = HTTPD_SSL_CONFIG_DEFAULT();
+ config.httpd.lru_purge_enable = true;
+ config.httpd.uri_match_fn = httpd_uri_match_wildcard;
+
+ SET_EMBEDDED_PTR(config.servercert, config.servercert_len, cacert, "cacert_pem");
+ SET_EMBEDDED_PTR(config.prvtkey_pem, config.prvtkey_len, prvtkey, "prvtkey_pem");
- if (httpd_start(&server, &config) != ESP_OK) {
+ if (httpd_ssl_start(&server, &config) != ESP_OK) {
ESP_LOGE(TAG, "Couldn't start server");
server = NULL;
return;
@@ -222,5 +174,5 @@ void webserver_start()
httpd_register_uri_handler(server, &get_image);
httpd_register_uri_handler(server, &post_network);
- ESP_LOGI(TAG, "Started server on port %d", config.server_port);
+ ESP_LOGI(TAG, "Started server on port %d", config.httpd.server_port);
}
diff --git a/Year 3/Internet of things/goam/sdkconfig b/Year 3/Internet of things/goam/sdkconfig
index 9e28650..4b44199 100644
--- a/Year 3/Internet of things/goam/sdkconfig
+++ b/Year 3/Internet of things/goam/sdkconfig
@@ -341,6 +341,10 @@ CONFIG_PARTITION_TABLE_MD5=y
# end of Partition Table
#
+# GoAm configurations
+#
+
+#
# Compiler options
#
# CONFIG_COMPILER_OPTIMIZATION_DEFAULT is not set
@@ -520,7 +524,10 @@ CONFIG_EFUSE_MAX_BLK_LEN=192
CONFIG_ESP_TLS_USING_MBEDTLS=y
# CONFIG_ESP_TLS_USE_SECURE_ELEMENT is not set
# CONFIG_ESP_TLS_CLIENT_SESSION_TICKETS is not set
-# CONFIG_ESP_TLS_SERVER is not set
+CONFIG_ESP_TLS_SERVER=y
+# CONFIG_ESP_TLS_SERVER_SESSION_TICKETS is not set
+CONFIG_ESP_TLS_SERVER_CERT_SELECT_HOOK=y
+# CONFIG_ESP_TLS_SERVER_MIN_AUTH_MODE_OPTIONAL is not set
# CONFIG_ESP_TLS_PSK_VERIFICATION is not set
# CONFIG_ESP_TLS_INSECURE is not set
# end of ESP-TLS
@@ -598,7 +605,7 @@ CONFIG_ESP_HTTP_CLIENT_ENABLE_HTTPS=y
#
# HTTP Server
#
-CONFIG_HTTPD_MAX_REQ_HDR_LEN=512
+CONFIG_HTTPD_MAX_REQ_HDR_LEN=1024
CONFIG_HTTPD_MAX_URI_LEN=512
CONFIG_HTTPD_ERR_RESP_NO_DELAY=y
CONFIG_HTTPD_PURGE_BUF_LEN=32
@@ -617,7 +624,7 @@ CONFIG_HTTPD_PURGE_BUF_LEN=32
#
# ESP HTTPS server
#
-# CONFIG_ESP_HTTPS_SERVER_ENABLE is not set
+CONFIG_ESP_HTTPS_SERVER_ENABLE=y
# end of ESP HTTPS server
#
diff --git a/Year 3/Internet of things/goam/sdkconfig.old b/Year 3/Internet of things/goam/sdkconfig.old
index efb6559..001ab44 100644
--- a/Year 3/Internet of things/goam/sdkconfig.old
+++ b/Year 3/Internet of things/goam/sdkconfig.old
@@ -341,6 +341,10 @@ CONFIG_PARTITION_TABLE_MD5=y
# end of Partition Table
#
+# GoAm configurations
+#
+
+#
# Compiler options
#
# CONFIG_COMPILER_OPTIMIZATION_DEFAULT is not set
@@ -520,7 +524,10 @@ CONFIG_EFUSE_MAX_BLK_LEN=192
CONFIG_ESP_TLS_USING_MBEDTLS=y
# CONFIG_ESP_TLS_USE_SECURE_ELEMENT is not set
# CONFIG_ESP_TLS_CLIENT_SESSION_TICKETS is not set
-# CONFIG_ESP_TLS_SERVER is not set
+CONFIG_ESP_TLS_SERVER=y
+# CONFIG_ESP_TLS_SERVER_SESSION_TICKETS is not set
+CONFIG_ESP_TLS_SERVER_CERT_SELECT_HOOK=y
+# CONFIG_ESP_TLS_SERVER_MIN_AUTH_MODE_OPTIONAL is not set
# CONFIG_ESP_TLS_PSK_VERIFICATION is not set
# CONFIG_ESP_TLS_INSECURE is not set
# end of ESP-TLS
@@ -617,7 +624,7 @@ CONFIG_HTTPD_PURGE_BUF_LEN=32
#
# ESP HTTPS server
#
-# CONFIG_ESP_HTTPS_SERVER_ENABLE is not set
+CONFIG_ESP_HTTPS_SERVER_ENABLE=y
# end of ESP HTTPS server
#
@@ -767,9 +774,9 @@ CONFIG_ESP_PHY_CALIBRATION_MODE=0
# ESP System Settings
#
# CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_80 is not set
-CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_160=y
-# CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_240 is not set
-CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=160
+# CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_160 is not set
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_240=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=240
#
# Memory
diff --git a/Year 3/Internet of things/goam/webserver/cacert.pem b/Year 3/Internet of things/goam/webserver/cacert.pem
new file mode 100644
index 0000000..ec4b51e
--- /dev/null
+++ b/Year 3/Internet of things/goam/webserver/cacert.pem
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDHzCCAgegAwIBAgIUDgXKGJhhDECD8uqcL7hhl2lLvQcwDQYJKoZIhvcNAQEL
+BQAwHzEdMBsGA1UEAwwURVNQMzIgR29BbSB3ZWJzZXJ2ZXIwHhcNMjQwNTI3MTAy
+NjQyWhcNMzQwNTI1MTAyNjQyWjAfMR0wGwYDVQQDDBRFU1AzMiBHb0FtIHdlYnNl
+cnZlcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALH3tGIrBgcFtGn2
+OWSEUY8P/xKVMLAXSrWgef4mNU9tK1UOIJyq5UmFzPAGi6X0jcmTGqWEFSXyVad8
+KeILm42spuQaLdb+NRvJEddz5v9brJHbenQhuzLPEA47u/PxkcXbax4WJH9aTWNe
+LCemuFNRuO9k/mWrt037JeEefEGM5/x1d1l947HGe5XV9MrZfb3bsGnFwQ2JKiYW
+BAD3yX8junZ4IpQWYRAnwH82EPqN29TiED6lR8kJnKosPrMFN3Et1U+4/vK1iyim
+Unp59Dgtt3g2W/N2eh5gksmDhq/YwJQj0K3WznHFBsfaIa3rGjIkjTW3FT5gaVNU
+UIu3t7UCAwEAAaNTMFEwHQYDVR0OBBYEFMyKvJ3AP3IzJ6ZiHgtivVoVrAzMMB8G
+A1UdIwQYMBaAFMyKvJ3AP3IzJ6ZiHgtivVoVrAzMMA8GA1UdEwEB/wQFMAMBAf8w
+DQYJKoZIhvcNAQELBQADggEBAJbe48eYiXKwoSSbAGLg2knmKckaWbLadMOeFmkw
+Fu51/dLkUhk+g0DPVRw7FCA5apGPU5E/ac2GUWLDt6EsjekWfWfNNqxZVfqBcMNi
+RZ+CygKAX4YwvafPgJu5d7gcrDDpmTQP3J5fAyuBSuo99U4psOWa+SUsy/cDEcRe
+dFC7aymgoObCZRvp6Np6JI6i58CjmdPbI4uJTr4urmbNjKw53GD+aHmF8vVP9GJf
+GUCMHQWOJLn9dmlcGIACrstg7JotiZddZjwfB3/UqdaGQGWtuWFtm1FVEfnqzEeq
+c/XnAtARUNSfHIN09JSynSJZtUlZZjXaS/YGJocoYVohCPk=
+-----END CERTIFICATE-----
diff --git a/Year 3/Internet of things/goam/webserver-src/index.html b/Year 3/Internet of things/goam/webserver/index.html
index fad90a9..13a2bbc 100644
--- a/Year 3/Internet of things/goam/webserver-src/index.html
+++ b/Year 3/Internet of things/goam/webserver/index.html
@@ -41,6 +41,9 @@ a.button {
.full-width {
width: 100%;
}
+iframe {
+ display: none;
+}
</style>
</head>
<body>
@@ -50,11 +53,21 @@ a.button {
<a class="button full-width" href="/spiffs/capture.jpeg" download="capture.jpeg">Click to Download</a>
<h1>Configure static network</h1>
- <form action="/network" method="POST">
- <input name="ssid" type="text" placeholder="Name (SSID)">
- <input name="pass" type="text" placeholder="Password">
- <input class="button" type="submit" value="Save">
+ <iframe id="dummyframe" name="dummyframe" hidden></iframe>
+ <form action="/network" target="dummyframe" method="POST">
+ <input id="network-ssid" name="ssid" type="text" placeholder="Name (SSID)">
+ <input id="network-pass" name="pass" type="text" placeholder="Password">
+ <input id="network-submit" class="button" type="submit" value="Save">
</form>
</article>
+ <script>
+ const dummyframe = document.getElementById("dummyframe");
+ const network_ssid = document.getElementById("network-ssid");
+ const network_pass = document.getElementById("network-pass");
+ // Thanks https://stackoverflow.com/a/12483061/12036073
+ dummyframe.addEventListener("load", function () {
+ network_ssid.value = network_pass.value = '';
+ });
+ </script>
</body>
</html>
diff --git a/Year 3/Internet of things/goam/webserver/prvtkey.pem b/Year 3/Internet of things/goam/webserver/prvtkey.pem
new file mode 100644
index 0000000..a18c1ea
--- /dev/null
+++ b/Year 3/Internet of things/goam/webserver/prvtkey.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCx97RiKwYHBbRp
+9jlkhFGPD/8SlTCwF0q1oHn+JjVPbStVDiCcquVJhczwBoul9I3JkxqlhBUl8lWn
+fCniC5uNrKbkGi3W/jUbyRHXc+b/W6yR23p0IbsyzxAOO7vz8ZHF22seFiR/Wk1j
+XiwnprhTUbjvZP5lq7dN+yXhHnxBjOf8dXdZfeOxxnuV1fTK2X2927BpxcENiSom
+FgQA98l/I7p2eCKUFmEQJ8B/NhD6jdvU4hA+pUfJCZyqLD6zBTdxLdVPuP7ytYso
+plJ6efQ4Lbd4NlvzdnoeYJLJg4av2MCUI9Ct1s5xxQbH2iGt6xoyJI01txU+YGlT
+VFCLt7e1AgMBAAECggEADaA3R6ffIYUCi/Vd7hACdZdmMmxJSsYxwme7x2VyAfeM
+EIpRHWWpQgCUURFTOlzXyUXxzZfoDZx5CeaEB2pXmdiM+5x0g4g5lTvHGa2mU0lX
+1GAPR1p4zHpVkp1otdP6UwGKeUZ9O2H02GWSsGN/q+NvKycaojqsQXR38T1GCreo
+GJl0yOXVrnCmBSUTuGJo+fVLAYm94qLhEOtfg9+/Bo/vrdup2FKIUx0lVzLcZu4y
+mcj1HXbQD5rO6/9Uphs2Y8RKXIRxrj9Ur/gg/0aEoAOHHPWLZie0UYZZNlLEmLAL
+BTAE3BGvo4Cr6SAcSme8pb/S8iJZ8pxxGp+HPe770QKBgQDmZHnMdv+LCbsQ/Xvv
+KvV66olkzvyPNxyIf725QdVitQt9G6lRazGIex1hDSbwpHJec9oM3ogt4ya3Qvzr
+7HNoFYmyw7VjKBa2XyFmoHGA67SXHywCx3/yNMtjyGA5/2QLz8iPFjc+n0S66XYS
+J/h90bPFmOh0nnqPiI3a/QxQRQKBgQDFv4upVguTRp61vmTe0F1d1k4Z0Z5bANiG
+q8tUhFJgjKT2g0LZX99+igWeHg8YfXae4vXunWDXF81dYkYvYnB4J66WWBY4aOFj
+f0iKywuhoo9Jn2z5na3Hgi85GPBwFf01k/NG/uvjYa69oCwY4me/XRZnD7mKKlsh
+1xbsQTLYsQKBgCezNp25/6zYv2hdFacP0v8cPRKm7DRNfdgzkuDCbF+27MThKFsE
+SqPG+zgHCSe8XozSD8fZ7MNjef9oRqbstrI/y9uHB9GPTeKdH+dMTGK3uwWzdGUC
+NZTp7gZCt/omfPngEyI85MYgsbo3koXsZ1Be+0hYYe3+hQYItNEAe8e1AoGAJU8/
+fYKTioT/etDiXTu48fR2Jd7r3sWpFLejFF4m4LqIgU5AtZymIUzPRIbtWDSLxeyS
+dCPTWqHOCHl7PoN3LuRlx031W01GgSxJto4asrNmD4D54ZrDZ+oDGOXAr5Umgg5Z
+DyMXxH3wpyxqRYOqCWv5xxYrbosRSLA5Tff7LPECgYAYn9tQhTldNGSiy4j7vgb3
+CHB/JD1+uiwKtmFohdvIw8I1wuHzWSfb9aPF/u03v+q5IGeCpVtZ+TqnAhXpRRjn
+xMxpcyZSAywb4dRGsKhblsjAE+sDb35037qYqhkd382G8c8KQHwe5m0kf06P7uwR
+yDX4RDsCwp5gMxjkuV/KvA==
+-----END PRIVATE KEY-----