From e449c1b3f0d108f4aaa8f40ac1ae32fd97d6f7e2 Mon Sep 17 00:00:00 2001 From: cpq Date: Fri, 15 May 2026 14:13:19 +0100 Subject: [PATCH] Disable login --- mongoose.c | 7 +++--- src/dash.c | 7 +++--- tutorials/device-dashboard/full/dashboard.c | 25 ++++++++++--------- .../device-dashboard/full/dashboard.html | 8 ++++-- 4 files changed, 25 insertions(+), 22 deletions(-) diff --git a/mongoose.c b/mongoose.c index 1f89851c..20a37233 100644 --- a/mongoose.c +++ b/mongoose.c @@ -508,9 +508,10 @@ static struct mg_dash_user *mg_dash_authenticate(struct mg_http_message *hm, struct mg_dash *dash) { static struct mg_dash_user *s_users; // List of authenticated users char user[100], pass[100]; + static struct mg_dash_user admin = {NULL, "admin", "admin", 9, (uint64_t) -1}; struct mg_dash_user *u, *tmp, *result = NULL; - if (dash->authenticate == NULL) return NULL; + if (dash->authenticate == NULL) return &admin; mg_http_creds(hm, user, sizeof(user), pass, sizeof(pass)); // MG_DEBUG(("user [%s], pass: [%s], h: %.*s", user, pass, hm->head.len, // hm->head.buf)); @@ -599,9 +600,7 @@ void mg_dash_ev_handler(struct mg_connection *c, int ev, void *ev_data) { if (mg_match(hm->uri, mg_str("/api/hi"), NULL) || mg_match(hm->uri, mg_str("/api/logout"), NULL)) { // Do nothing, handle them MG_EV_HTTP_MSG. We bypass auth for those - } else if (dash->authenticate && u == NULL && - mg_match(hm->uri, mg_str("/api/#"), NULL)) { - // Auth check fail + } else if (u == NULL && mg_match(hm->uri, mg_str("/api/#"), NULL)) { mg_http_reply(c, 403, MG_JSON_HEADERS, "Not Authorised\n"); c->data[0] = CONN_HANDLED; } else if (mg_match(hm->uri, mg_str("/api/login"), NULL) && u != NULL) { diff --git a/src/dash.c b/src/dash.c index 2da84cee..b607c583 100644 --- a/src/dash.c +++ b/src/dash.c @@ -387,9 +387,10 @@ static struct mg_dash_user *mg_dash_authenticate(struct mg_http_message *hm, struct mg_dash *dash) { static struct mg_dash_user *s_users; // List of authenticated users char user[100], pass[100]; + static struct mg_dash_user admin = {NULL, "admin", "admin", 9, (uint64_t) -1}; struct mg_dash_user *u, *tmp, *result = NULL; - if (dash->authenticate == NULL) return NULL; + if (dash->authenticate == NULL) return &admin; mg_http_creds(hm, user, sizeof(user), pass, sizeof(pass)); // MG_DEBUG(("user [%s], pass: [%s], h: %.*s", user, pass, hm->head.len, // hm->head.buf)); @@ -478,9 +479,7 @@ void mg_dash_ev_handler(struct mg_connection *c, int ev, void *ev_data) { if (mg_match(hm->uri, mg_str("/api/hi"), NULL) || mg_match(hm->uri, mg_str("/api/logout"), NULL)) { // Do nothing, handle them MG_EV_HTTP_MSG. We bypass auth for those - } else if (dash->authenticate && u == NULL && - mg_match(hm->uri, mg_str("/api/#"), NULL)) { - // Auth check fail + } else if (u == NULL && mg_match(hm->uri, mg_str("/api/#"), NULL)) { mg_http_reply(c, 403, MG_JSON_HEADERS, "Not Authorised\n"); c->data[0] = CONN_HANDLED; } else if (mg_match(hm->uri, mg_str("/api/login"), NULL) && u != NULL) { diff --git a/tutorials/device-dashboard/full/dashboard.c b/tutorials/device-dashboard/full/dashboard.c index 20ed46d3..eda37a8c 100644 --- a/tutorials/device-dashboard/full/dashboard.c +++ b/tutorials/device-dashboard/full/dashboard.c @@ -3,6 +3,9 @@ #include "mongoose.h" +static struct mg_dash s_dash; +static int authenticate(const char *user, const char *pass); + // Action buttons static bool s_action1, s_action2; static uint64_t s_action2_timeout; @@ -66,6 +69,7 @@ static struct mg_field_set set_metrics = { }; // Read-write device settings +static bool s_enable_login = false; static double s_volume = 17.2; static int s_log_level = MG_LL_DEBUG; static char s_name[20] = "Dublin"; @@ -76,6 +80,7 @@ static char s_ota_url[100] = "https://my-product.com/ota.json"; static void write_settings(void) { mg_log_level = s_log_level; + s_dash.authenticate = s_enable_login ? authenticate : NULL; } static void read_settings(void) { @@ -86,6 +91,7 @@ static struct mg_field fields_settings[] = { {"volume", MG_VAL_DBL, &s_volume, sizeof(s_volume)}, {"name", MG_VAL_STR, &s_name, sizeof(s_name)}, {"log_level", MG_VAL_INT, &s_log_level, sizeof(s_log_level)}, + {"enable_login", MG_VAL_BOOL, &s_enable_login, sizeof(s_enable_login)}, {"ota_version", MG_VAL_STR, &s_ota_version, sizeof(s_ota_version)}, {"ota_status", MG_VAL_STR, &s_ota_status, sizeof(s_ota_status)}, {"ota_url", MG_VAL_STR, &s_ota_url, sizeof(s_ota_url)}, @@ -182,24 +188,19 @@ static int authenticate(const char *user, const char *pass) { } void mg_dash_init(struct mg_mgr *mgr) { - static struct mg_dash dash; // Important: keep it static! - - MG_DASH_ADD_FIELD_SET(&dash, &set_leds); - MG_DASH_ADD_FIELD_SET(&dash, &set_metrics); - MG_DASH_ADD_FIELD_SET(&dash, &set_settings); - MG_DASH_ADD_FIELD_SET(&dash, &set_graph1); - MG_DASH_ADD_FIELD_SET(&dash, &set_graph2); - MG_DASH_ADD_FIELD_SET(&dash, &set_actions); + MG_DASH_ADD_FIELD_SET(&s_dash, &set_leds); + MG_DASH_ADD_FIELD_SET(&s_dash, &set_metrics); + MG_DASH_ADD_FIELD_SET(&s_dash, &set_settings); + MG_DASH_ADD_FIELD_SET(&s_dash, &set_graph1); + MG_DASH_ADD_FIELD_SET(&s_dash, &set_graph2); + MG_DASH_ADD_FIELD_SET(&s_dash, &set_actions); // Add two fake files - for demonstration mg_dash_file_add(mg_str("device-config.json"), 1234); mg_dash_file_add(mg_str("device-log-2026-04-25.txt"), 1327854); - // Require authentication - dash.authenticate = authenticate; - mg_mem_files = mg_packed_files; - mg_http_listen(mgr, MG_HTTP_ADDR, mg_dash_ev_handler, &dash); + mg_http_listen(mgr, MG_HTTP_ADDR, mg_dash_ev_handler, &s_dash); } void mg_dash_poll(struct mg_mgr *mgr) { diff --git a/tutorials/device-dashboard/full/dashboard.html b/tutorials/device-dashboard/full/dashboard.html index 78330942..0618e90b 100644 --- a/tutorials/device-dashboard/full/dashboard.html +++ b/tutorials/device-dashboard/full/dashboard.html @@ -4,7 +4,7 @@ My Dashboard - +