Change dash auth signature

This commit is contained in:
cpq committed 2026-06-02 14:17:49 +01:00
1 parent e923b413ae
commit 73037880e6
7 files changed
+19 -12

No files matched your search

+9 -3
View File
@@ -267,11 +267,17 @@ To enable user authentication, set `authenticate` function for the dashboard des
```c
static struct mg_dash s_dash;
static int authenticate(const char *user, const char *pass) {
// Signature: (char *user, size_t userlen, const char *pass)
// `user` is both input (username from the login form) and output: the function
// may overwrite it with the canonical username. Return access level > 0 on
// success, 0 on failure.
static int authenticate(char *user, size_t userlen, const char *pass) {
int level = 0; // Authentication failure
if (strcmp(pass, "admin") == 0 && strcmp(user, "admin") == 0) {
if (strcmp(pass, "admin") == 0) {
mg_snprintf(user, userlen, "%s", "admin");
level = 7; // Administrator
} else if (strcmp(pass, "user") == 0 && strcmp(user, "user") == 0) {
} else if (strcmp(pass, "user") == 0) {
mg_snprintf(user, userlen, "%s", "user");
level = 3; // Ordinary dude
}
return level;
+1 -1
View File
@@ -1013,7 +1013,7 @@ static struct mg_dash_user *mg_dash_authenticate(struct mg_http_message *hm,
struct mg_str *ah = mg_http_get_header(hm, "Authorization");
if (ah != NULL) {
// Auth header and password are set, auth by user/password via glue API
int num_users = 0, level = dash->authenticate(user, pass);
int num_users = 0, level = dash->authenticate(user, sizeof(user), pass);
MG_DEBUG(("user %s, level: %d", user, level));
if (level > 0) { // Proceed only if the firmware authenticated us
for (u = s_users; u != NULL && result == NULL;
+1 -1
View File
@@ -3318,7 +3318,7 @@ struct mg_dash_file {
struct mg_dash {
struct mg_field_set *sets;
struct mg_dash_custom_handler *custom_handlers;
int (*authenticate)(const char *user, const char *pass);
int (*authenticate)(char *user, size_t userlen, const char *pass);
int session_auto_expiration_seconds;
//struct mg_dash_file *files;
};
+1 -1
View File
@@ -354,7 +354,7 @@ static struct mg_dash_user *mg_dash_authenticate(struct mg_http_message *hm,
struct mg_str *ah = mg_http_get_header(hm, "Authorization");
if (ah != NULL) {
// Auth header and password are set, auth by user/password via glue API
int num_users = 0, level = dash->authenticate(user, pass);
int num_users = 0, level = dash->authenticate(user, sizeof(user), pass);
MG_DEBUG(("user %s, level: %d", user, level));
if (level > 0) { // Proceed only if the firmware authenticated us
for (u = s_users; u != NULL && result == NULL;
+1 -1
View File
@@ -48,7 +48,7 @@ struct mg_dash_file {
struct mg_dash {
struct mg_field_set *sets;
struct mg_dash_custom_handler *custom_handlers;
int (*authenticate)(const char *user, const char *pass);
int (*authenticate)(char *user, size_t userlen, const char *pass);
int session_auto_expiration_seconds;
//struct mg_dash_file *files;
};
+2 -2
View File
@@ -4190,14 +4190,14 @@ static void dash_custom(struct mg_connection *c, int ev, void *ev_data) {
(void) c, (void) ev, (void) ev_data;
}
static int dash_authenticate(const char *user, const char *pass) {
static int dash_authenticate(char *user, size_t userlen, const char *pass) {
int level = 0;
if (strcmp(pass, "admin") == 0) {
level = 7;
} else if (strcmp(pass, "user") == 0) {
level = 3;
}
(void) user;
(void) user, (void) userlen;
return level;
}
+4 -3
View File
@@ -4,7 +4,7 @@
#include "mongoose.h"
static struct mg_dash s_dash;
static int authenticate(const char *user, const char *pass);
static int authenticate(char *user, size_t userlen, const char *pass);
// Action buttons
static bool s_action1, s_action2;
@@ -176,14 +176,15 @@ static struct mg_field_set set_graph2 = {
"graph2", fields_graph2, read_graph2, NULL, 0, 0, NULL,
};
static int authenticate(const char *user, const char *pass) {
static int authenticate(char *user, size_t userlen, const char *pass) {
int level = 0; // Authentication failure
if (strcmp(pass, "admin") == 0) {
mg_snprintf(user, userlen, "%s", "admin");
level = 7; // Administrator
} else if (strcmp(pass, "user") == 0) {
mg_snprintf(user, userlen, "%s", "user");
level = 3; // Ordinary dude
}
(void) user;
return level;
}