fix user persistence

This commit is contained in:
fengzero
2022-10-20 06:28:50 +00:00
parent 206574808a
commit e3d8a9fec9
6 changed files with 30 additions and 50 deletions
+6 -12
View File
@@ -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);
}
+4 -4
View File
@@ -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)
+2 -2
View File
@@ -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
}
+2 -4
View File
@@ -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;
}
+12 -17
View File
@@ -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);
}
+4 -11
View File
@@ -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
}