From 1d616c3841fce35fe57b3df38648a73a53052eba Mon Sep 17 00:00:00 2001 From: TolaMironcenko Date: Tue, 2 Sep 2025 09:32:28 +0700 Subject: [PATCH] updated verifying token process --- src/verify_token.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/verify_token.c b/src/verify_token.c index d34aa63..0579312 100644 --- a/src/verify_token.c +++ b/src/verify_token.c @@ -5,14 +5,37 @@ void verify_token(struct mg_connection *c, struct mg_http_message *hm) { const request_with_token *data = check_body(hm); if (data->error != nullptr) { - mg_http_reply(c, 403, HTTP_HEADERS, "{%m:%m}", MG_ESC("error"), MG_ESC(data->error)); + mg_http_reply(c, 403, HTTP_HEADERS, "{%m:%m}", MG_ESC("error"), + MG_ESC(data->error)); + free_request_with_token((request_with_token *) data); return; } const bool valid = jwt_verifyJWT(data->token, JWT_DEFAULT_SECRET); if (!valid) { mg_http_reply(c, 403, HTTP_HEADERS, "{%m:%m}", MG_ESC("error"), MG_ESC("invalid token")); + free_request_with_token((request_with_token *) data); + return; + } + cJSON *payload = jwt_get_payload(data->token); + char *username = + strdup(cJSON_GetObjectItem(payload, "username")->valuestring); + if (!username) { + free_request_with_token((request_with_token *) data); + cJSON_Delete(payload); + mg_http_reply(c, 500, HTTP_HEADERS, "{%m:false}", MG_ESC("valid")); + return; + } + User *user = db_get_user_by_username(username); + if (!user) { + free_request_with_token((request_with_token *) data); + cJSON_Delete(payload); + free(username); + mg_http_reply(c, 404, HTTP_HEADERS, "{%m:false}", MG_ESC("valid")); return; } mg_http_reply(c, 200, HTTP_HEADERS, "{%m:true}", MG_ESC("valid")); + free_request_with_token((request_with_token *) data); + free(username); + free_user(user); }