mirror of
https://gitlab.com/comunic/comunicapiv3
synced 2025-06-22 01:15:16 +00:00
Automatically clean old access tokens
This commit is contained in:
@ -13,7 +13,7 @@ use crate::data::security_settings::SecuritySettings;
|
||||
use crate::data::user::{AccountImageVisibility, User, UserID, UserPageStatus};
|
||||
use crate::data::user_token::UserAccessToken;
|
||||
use crate::helpers::{comments_helper, conversations_helper, custom_emojies_helper, database, events_helper, friends_helper, groups_helper, likes_helper, notifications_helper, posts_helper, survey_helper, user_helper};
|
||||
use crate::helpers::database::{DeleteQuery, InsertQuery, QueryInfo, UpdateInfo};
|
||||
use crate::helpers::database::{DeleteQuery, InsertQuery, QueryInfo, RowResult, UpdateInfo};
|
||||
use crate::helpers::events_helper::Event;
|
||||
use crate::helpers::likes_helper::LikeType;
|
||||
use crate::utils::crypt_utils::{legacy_crypt_pass, rand_str};
|
||||
@ -76,16 +76,7 @@ pub fn find_user_by_login_token(token: &str, client: &APIClient) -> ResultBoxErr
|
||||
.cond("token", token)
|
||||
.set_custom_where("last_refresh + timeout > ?")
|
||||
.add_custom_where_argument_u64(time())
|
||||
.query_row(|res| {
|
||||
Ok(UserAccessToken {
|
||||
id: res.get_u64("id")?,
|
||||
client_id: res.get_u64("client_id")?,
|
||||
user_id: res.get_user_id("user_id")?,
|
||||
token: res.get_str("token")?,
|
||||
last_refresh: res.get_u64("last_refresh")?,
|
||||
timeout: res.get_u64("timeout")?,
|
||||
})
|
||||
})
|
||||
.query_row(db_to_user_access_token)
|
||||
}
|
||||
|
||||
/// Check out whether an email address exists or not
|
||||
@ -116,6 +107,20 @@ pub fn destroy_login_tokens(access_tokens: &UserAccessToken) -> Res {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Clean up old access tokens
|
||||
pub fn clean_up_old_access_tokens() -> Res {
|
||||
let to_delete = QueryInfo::new(USER_ACCESS_TOKENS_TABLE)
|
||||
.set_custom_where("last_refresh + timeout < ?")
|
||||
.add_custom_where_argument_u64(time())
|
||||
.exec(db_to_user_access_token)?;
|
||||
|
||||
for token in to_delete {
|
||||
destroy_login_tokens(&token)?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Destroy all login tokens of a user
|
||||
pub fn destroy_all_user_tokens(id: &UserID) -> ResultBoxError {
|
||||
user_ws_controller::disconnect_user_from_all_sockets(id)?;
|
||||
@ -379,4 +384,15 @@ fn validate_password(user: &User, password: &str) -> Res<bool> {
|
||||
change_password(&user.id, password)?;
|
||||
|
||||
Ok(true)
|
||||
}
|
||||
|
||||
fn db_to_user_access_token(res: &RowResult) -> Res<UserAccessToken> {
|
||||
Ok(UserAccessToken {
|
||||
id: res.get_u64("id")?,
|
||||
client_id: res.get_u64("client_id")?,
|
||||
user_id: res.get_user_id("user_id")?,
|
||||
token: res.get_str("token")?,
|
||||
last_refresh: res.get_u64("last_refresh")?,
|
||||
timeout: res.get_u64("timeout")?,
|
||||
})
|
||||
}
|
Reference in New Issue
Block a user