Refactor users management (#6)
* Use asynchronous interface to set authorized clients list
This commit is contained in:
@ -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));
|
||||
|
Reference in New Issue
Block a user