diff options
| Commit | 1e958b6c995e1b8def17fa3f8ee508de8b99118e (patch) | |
|---|---|---|
| Author | 2024-05-27 14:47:34 +0300 | |
| Committer | 2024-05-27 14:47:34 +0300 | |
| Files | f2a6eed7fce9d3cfcac18457ad1400950401e7f7 | |
| uni-projects-1e958b6c995e1b8def17fa3f8ee508de8b99118e.tar uni-projects-1e958b6c995e1b8def17fa3f8ee508de8b99118e.tar.gz uni-projects-1e958b6c995e1b8def17fa3f8ee508de8b99118e.zip | ||
| Parent | 7c9c68eaba5ed7c75495eb6607a8155110c2df43 (diff) | |
[iot/goam] Updated server to HTTPS
7 files changed, 101 insertions, 73 deletions
| -rw-r--r-- | Year 3/Internet of things/goam/main/CMakeLists.txt | 4 | ||||
| -rw-r--r-- | Year 3/Internet of things/goam/main/webserver.c | 72 | ||||
| -rw-r--r-- | Year 3/Internet of things/goam/sdkconfig | 13 | ||||
| -rw-r--r-- | Year 3/Internet of things/goam/sdkconfig.old | 17 | ||||
| -rw-r--r-- | Year 3/Internet of things/goam/webserver/cacert.pem | 19 | ||||
| -rw-r--r-- | Year 3/Internet of things/goam/webserver/index.html (renamed from Year 3/Internet of things/goam/webserver-src/index.html) | 21 | ||||
| -rw-r--r-- | Year 3/Internet of things/goam/webserver/prvtkey.pem | 28 |
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----- |
