Files
auth_service_c/src/get_user.c
T
2025-08-22 17:46:38 +07:00

38 lines
1.3 KiB
C

#include "jwt.h"
#include "user.h"
#include "utils.h"
void get_user(struct mg_connection *c, struct mg_http_message *hm) {
request_with_token *requestdata = check_body(hm);
if (!jwt_verifyJWT(requestdata->token, JWT_DEFAULT_SECRET)) {
free_request_with_token(requestdata);
mg_http_reply(c, 403, "", "{%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, "", "{%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);
}