#include "jwt.h" #include "user.h" #include "utils.h" void get_user(struct mg_connection *c, struct mg_http_message *hm) { if (hm->body.len == 0) { mg_http_reply(c, 400, "Content-Type: application/json\r\n", "{%m:%m}", MG_ESC("error"), MG_ESC("must have token")); return; } request_with_token *requestdata = check_body(hm); if (requestdata->error != NULL) { mg_http_reply(c, 403, "Content-Type: application/json\r\n", "{%m:%m}", MG_ESC("error"), MG_ESC(requestdata->error)); return; } if (!jwt_verifyJWT(requestdata->token, JWT_DEFAULT_SECRET)) { free_request_with_token(requestdata); mg_http_reply(c, 403, "Content-Type: application/json\r\n", "{%m:%m}", MG_ESC("error"), MG_ESC("invalid token")); return; } cJSON *payload = jwt_get_payload(requestdata->token); char *username = strdup(cJSON_GetObjectItem(payload, "username")->valuestring); User *user = db_get_user_by_username(username); if (!user) { free_request_with_token(requestdata); cJSON_Delete(payload); free(username); mg_http_reply(c, 404, "Content-Type: application/json\r\n", "{%m:%m}", MG_ESC("error"), MG_ESC("user not found")); return; } char responsedata[2048] = {0}; snprintf(responsedata, sizeof(responsedata), "{\"id\": %d, \"username\": \"%s\", \"email\": \"%s\", \"group\": " "\"%s\", \"is_superuser\": %s}", user->id, user->username, user->email, user->group, user->is_superuser ? "true" : "false"); mg_http_reply(c, 200, "Content-Type: application/json\r\n", responsedata); free_request_with_token(requestdata); free(username); free_user(user); cJSON_Delete(payload); }