mirror of
https://github.com/emqx/neuron.git
synced 2026-10-17 04:40:42 +08:00
fix user persistence
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user