From e3d8a9fec9ea02befccc3ae5d94d7e1c23db0a8d Mon Sep 17 00:00:00 2001 From: fengzero Date: Thu, 20 Oct 2022 06:28:50 +0000 Subject: [PATCH] fix user persistence --- plugins/restful/normal_handle.c | 18 ++++++------------ plugins/restful/user.c | 8 ++++---- plugins/restful/user.h | 4 ++-- src/argparse.c | 6 ++---- src/persist/persist.c | 29 ++++++++++++----------------- src/persist/persist.h | 15 ++++----------- 6 files changed, 30 insertions(+), 50 deletions(-) diff --git a/plugins/restful/normal_handle.c b/plugins/restful/normal_handle.c index 65af3aec..a429214a 100644 --- a/plugins/restful/normal_handle.c +++ b/plugins/restful/normal_handle.c @@ -53,11 +53,8 @@ void handle_login(nng_aio *aio) { REST_PROCESS_HTTP_REQUEST( aio, neu_json_login_req_t, neu_json_decode_login_req, { - neu_plugin_t * plugin = neu_rest_get_plugin(); - neu_plugin_common_t * common = neu_plugin_to_plugin_common(plugin); neu_json_login_resp_t login_resp = { 0 }; - neu_user_t * user = - neu_load_user(common->adapter->persister, req->name); + neu_user_t * user = neu_load_user(req->name); if (NULL == user) { nlog_warn("could not find user `%s`", req->name); @@ -99,19 +96,16 @@ void handle_password(nng_aio *aio) { REST_PROCESS_HTTP_REQUEST_VALIDATE_JWT( aio, neu_json_password_req_t, neu_json_decode_password_req, { - neu_plugin_t * plugin = neu_rest_get_plugin(); - neu_plugin_common_t *common = neu_plugin_to_plugin_common(plugin); - neu_persister_t * persister = common->adapter->persister; - neu_user_t * user = NULL; - int rv = 0; - int pass_len = strlen(req->new_pass); + neu_user_t *user = NULL; + int rv = 0; + int pass_len = strlen(req->new_pass); if (pass_len < NEU_USER_PASSWORD_MIN_LEN || pass_len > NEU_USER_PASSWORD_MAX_LEN) { nlog_error("user `%s` new password too short or too long", req->name); rv = NEU_ERR_INVALID_PASSWORD_LEN; - } else if (NULL == (user = neu_load_user(persister, req->name))) { + } else if (NULL == (user = neu_load_user(req->name))) { nlog_error("could not find user `%s`", req->name); rv = NEU_ERR_INVALID_USER_OR_PASSWORD; } else if (!neu_user_check_password(user, req->old_pass)) { @@ -120,7 +114,7 @@ void handle_password(nng_aio *aio) } else if (0 != (rv = neu_user_update_password(user, req->new_pass))) { nlog_error("user `%s` update password fail", req->name); - } else if (0 != (rv = neu_save_user(persister, user))) { + } else if (0 != (rv = neu_save_user(user))) { nlog_error("user `%s` persist fail", req->name); } diff --git a/plugins/restful/user.c b/plugins/restful/user.c index a928f31c..ed1c9f3c 100644 --- a/plugins/restful/user.c +++ b/plugins/restful/user.c @@ -383,7 +383,7 @@ bool neu_user_check_password(neu_user_t *user, const char *password) return pass; } -neu_user_t *neu_load_user(neu_persister_t *persister, const char *name) +neu_user_t *neu_load_user(const char *name) { neu_user_t *user = malloc(sizeof(*user)); if (NULL == user) { @@ -391,7 +391,7 @@ neu_user_t *neu_load_user(neu_persister_t *persister, const char *name) } neu_persist_user_info_t *info = NULL; - if (0 != neu_persister_load_user(persister, name, &info)) { + if (0 != neu_persister_load_user(name, &info)) { free(user); return NULL; } @@ -403,14 +403,14 @@ neu_user_t *neu_load_user(neu_persister_t *persister, const char *name) return user; } -int neu_save_user(neu_persister_t *persister, neu_user_t *user) +int neu_save_user(neu_user_t *user) { neu_persist_user_info_t info = { .name = user->name, .hash = user->hash, }; - return neu_persister_update_user(persister, &info); + return neu_persister_update_user(&info); } int neu_user_update_password(neu_user_t *user, const char *new_password) diff --git a/plugins/restful/user.h b/plugins/restful/user.h index 96208e8b..6d5ce233 100644 --- a/plugins/restful/user.h +++ b/plugins/restful/user.h @@ -38,8 +38,8 @@ void neu_user_free(neu_user_t *user); bool neu_user_check_password(neu_user_t *user, const char *password); int neu_user_update_password(neu_user_t *user, const char *new_password); -neu_user_t *neu_load_user(neu_persister_t *persister, const char *name); -int neu_save_user(neu_persister_t *persister, neu_user_t *user); +neu_user_t *neu_load_user(const char *name); +int neu_save_user(neu_user_t *user); #ifdef __cplusplus } diff --git a/src/argparse.c b/src/argparse.c index f9597993..8004bf79 100644 --- a/src/argparse.c +++ b/src/argparse.c @@ -87,14 +87,12 @@ static inline void version() static inline int reset_password() { - neu_persister_t * persister = neu_persister_create("persistence"); - neu_persist_user_info_t info = { + neu_persist_user_info_t info = { .name = "admin", .hash = "$5$PwFeXpBBIBZuZdZl$fP8fFPWCLoaWcnVXVSR.3Xi8TEqCvX92gjhowNNn6S4", }; - int rv = neu_persister_update_user(persister, &info); - neu_persister_destroy(persister); + int rv = neu_persister_update_user(&info); return rv; } diff --git a/src/persist/persist.c b/src/persist/persist.c index 99510797..4bccfce2 100644 --- a/src/persist/persist.c +++ b/src/persist/persist.c @@ -1064,45 +1064,41 @@ int neu_persister_delete_node_setting(const char *node_name) node_name); } -int neu_persister_store_user(neu_persister_t * persister, - const neu_persist_user_info_t *user) +int neu_persister_store_user(const neu_persist_user_info_t *user) { - return execute_sql(persister->db, + return execute_sql(global_db, "INSERT INTO users (name, password) VALUES (%Q, %Q)", user->name, user->hash); } -int neu_persister_update_user(neu_persister_t * persister, - const neu_persist_user_info_t *user) +int neu_persister_update_user(const neu_persist_user_info_t *user) { - return execute_sql(persister->db, - "UPDATE users SET password=%Q WHERE name=%Q", user->hash, - user->name); + return execute_sql(global_db, "UPDATE users SET password=%Q WHERE name=%Q", + user->hash, user->name); } -int neu_persister_load_user(neu_persister_t *persister, const char *user_name, +int neu_persister_load_user(const char * user_name, neu_persist_user_info_t **user_p) { neu_persist_user_info_t *user = NULL; sqlite3_stmt * stmt = NULL; const char * query = "SELECT password FROM users WHERE name=?"; - if (SQLITE_OK != - sqlite3_prepare_v2(persister->db, query, -1, &stmt, NULL)) { + if (SQLITE_OK != sqlite3_prepare_v2(global_db, query, -1, &stmt, NULL)) { nlog_error("prepare `%s` with `%s` fail: %s", query, user_name, - sqlite3_errmsg(persister->db)); + sqlite3_errmsg(global_db)); return NEU_ERR_EINTERNAL; } if (SQLITE_OK != sqlite3_bind_text(stmt, 1, user_name, -1, NULL)) { nlog_error("bind `%s` with `%s` fail: %s", query, user_name, - sqlite3_errmsg(persister->db)); + sqlite3_errmsg(global_db)); goto error; } if (SQLITE_ROW != sqlite3_step(stmt)) { nlog_warn("SQL `%s` with `%s` fail: %s", query, user_name, - sqlite3_errmsg(persister->db)); + sqlite3_errmsg(global_db)); goto error; } @@ -1136,8 +1132,7 @@ error: return NEU_ERR_EINTERNAL; } -int neu_persister_delete_user(neu_persister_t *persister, const char *user_name) +int neu_persister_delete_user(const char *user_name) { - return execute_sql(persister->db, "DELETE FROM users WHERE name=%Q", - user_name); + return execute_sql(global_db, "DELETE FROM users WHERE name=%Q", user_name); } diff --git a/src/persist/persist.h b/src/persist/persist.h index 3e96493b..b145e5af 100644 --- a/src/persist/persist.h +++ b/src/persist/persist.h @@ -274,40 +274,33 @@ int neu_persister_delete_node_setting(const char *node_name); /** * Save user info. - * @param persister persister object. * @param user user info * @return 0 on success, none-zero on failure */ -int neu_persister_store_user(neu_persister_t * persister, - const neu_persist_user_info_t *user); +int neu_persister_store_user(const neu_persist_user_info_t *user); /** * Update user info. - * @param persister persister object. * @param user user info * @return 0 on success, none-zero on failure */ -int neu_persister_update_user(neu_persister_t * persister, - const neu_persist_user_info_t *user); +int neu_persister_update_user(const neu_persist_user_info_t *user); /** * Load user info. - * @param persister persister object. * @param user_name name of the user. * @param user_p output parameter of user info * @return 0 on success, none-zero on failure */ -int neu_persister_load_user(neu_persister_t *persister, const char *user_name, +int neu_persister_load_user(const char * user_name, neu_persist_user_info_t **user_p); /** * Delete user info. - * @param persister persister object. * @param user_name name of the user. * @return 0 on success, none-zero on failure */ -int neu_persister_delete_user(neu_persister_t *persister, - const char * user_name); +int neu_persister_delete_user(const char *user_name); #ifdef __cplusplus }