#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* token; // char* user_id; // } logout_form_t; // static void logout_form_dtor(logout_form_t* form) // { // if (form->token) free(form->token); // 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) // { // logout_form_t* form = (logout_form_t*)user_data; // if (strcmp(key, "token") == 0) { // form->token = kqm_strndup(value, valuelen); // } else if (strcmp(key, "user_id") == 0) { // form->user_id = kqm_strndup(value, valuelen); // } // if (form->token && form->user_id) { // return MG_FORM_FIELD_HANDLE_ABORT; // } // return MG_FORM_FIELD_HANDLE_GET; // } int user_logout_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; } res_logout(conn); // logout_form_t form = {NULL, NULL}; // mg_form_data_handler logout_callback = { // .field_found = field_found, // .field_get = field_get, // .field_store = NULL, // .user_data = &form, // }; // mg_handle_form_request(conn, &logout_callback); // if (!form.token) { // res_need_token(conn); // logout_form_dtor(&form); // return 1; // } // if (!verify_token(form.token, secret)) { // res_auth_fail(conn); // logout_form_dtor(&form); // return 1; // } // char* user_id = get_payload(form.token); // if (form.user_id && strcmp(user_id, form.user_id)) { // int perm1; // int flag = get_user_permission(user_id, &perm1); // if (!flag) { // res_check_permission_fail(conn); // } // int perm2; // flag = get_user_permission(form.user_id, &perm2); // if (!flag) { // res_check_permission_fail(conn); // } // if (perm1 < perm2) { // int flag = logout_user(form.user_id); // if (!flag) { // res_logout_fail(conn); // } else { // res_logout(conn); // } // } else { // res_permission_denied(conn); // } // } else { // int flag = logout_user(user_id); // if (!flag) { // res_logout_account_fail(conn); // } else { // res_logout_account(conn); // } // } // free(user_id); // logout_form_dtor(&form); return 1; }