#include "server/auth.h" #include "server/response.h" #include "server/util.h" #include "db/auth.h" #include "jwt/jwt.h" #include #include #include #include #include typedef struct { char* user_id; } permission_form_t; static void permission_form_dtor(permission_form_t* form) { if (form->user_id) free(form->user_id); } static int field_found(const char* key, const char* filename, char* path, size_t pathlen, void* user_data) { return MG_FORM_FIELD_HANDLE_GET; } static int field_get(const char* key, const char* value, size_t valuelen, void* user_data) { permission_form_t* form = (permission_form_t*)user_data; if (strcmp(key, "user_id") == 0) { form->user_id = kqm_strndup(value, valuelen); return MG_FORM_FIELD_HANDLE_ABORT; } return MG_FORM_FIELD_HANDLE_GET; } int user_permission_handler(mg_connection* conn, void* cbdata) { const mg_request_info* post_body = mg_get_request_info(conn); if (post_body == NULL) { res_null_req(conn); return 1; } if (strcmp(post_body->request_method, "POST")) { res_must_post(conn); return 1; } permission_form_t form = {NULL}; mg_form_data_handler permission_callback = { .field_found = field_found, .field_get = field_get, .field_store = NULL, .user_data = &form, }; mg_handle_form_request(conn, &permission_callback); if (!form.user_id) { res_need_user_id(conn); permission_form_dtor(&form); return 1; } int perm; int flag = get_user_permission(form.user_id, &perm); if (!flag) { res_check_permission_fail(conn); } else { res_permission(conn, perm); } permission_form_dtor(&form); return 1; }