Refactor users management (#6)

* Use asynchronous interface to set authorized clients list
This commit is contained in:
2022-11-26 14:51:08 +01:00
parent b68304c976
commit f5ac7bf278
6 changed files with 90 additions and 22 deletions

View File

@ -11,7 +11,7 @@ use crate::controllers::settings_controller::BaseSettingsPage;
use crate::data::action_logger::{Action, ActionLogger};
use crate::data::client::{Client, ClientID, ClientManager};
use crate::data::current_user::CurrentUser;
use crate::data::user::{User, UserID};
use crate::data::user::{GrantedClients, User, UserID};
use crate::utils::string_utils::rand_str;
#[derive(Template)]
@ -98,24 +98,41 @@ pub async fn users_route(
user.two_factor
.retain(|f| factors_to_keep.contains(&f.id.0.as_str()));
user.authorized_clients = match update.0.grant_type.as_str() {
"all_clients" => None,
"custom_clients" => Some(
update
.0
.granted_clients
.split(',')
.map(|c| ClientID(c.to_string()))
.collect::<Vec<_>>(),
),
_ => Some(Vec::new()),
};
let res = users
.send(users_actor::UpdateUserRequest(user.clone()))
.await
.unwrap();
// Update list of granted clients
let granted_clients = match update.0.grant_type.as_str() {
"all_clients" => GrantedClients::AllClients,
"custom_clients" if !update.0.granted_clients.is_empty() => {
GrantedClients::SomeClients(
update
.0
.granted_clients
.split(',')
.map(|c| ClientID(c.to_string()))
.collect::<Vec<_>>(),
)
}
_ => GrantedClients::NoClient,
};
if user.granted_clients() != granted_clients {
logger.log(Action::AdminSetNewGrantedClientsList(
&user,
&granted_clients,
));
users
.send(users_actor::SetGrantedClients(
user.uid.clone(),
granted_clients,
))
.await
.unwrap();
}
// Clear user 2FA history if requested
if update.0.clear_2fa_history.is_some() {
logger.log(Action::AdminClear2FAHistory(&user));