Can specify default clients

This commit is contained in:
Pierre HUBERT 2023-04-15 10:31:11 +02:00
parent 14bda544f7
commit eed9bcdf8b
2 changed files with 39 additions and 16 deletions

View File

@ -65,7 +65,7 @@ pub struct UpdateUserQuery {
} }
pub async fn users_route( pub async fn users_route(
user: CurrentUser, admin: CurrentUser,
users: web::Data<Addr<UsersActor>>, users: web::Data<Addr<UsersActor>>,
update_query: Option<web::Form<UpdateUserQuery>>, update_query: Option<web::Form<UpdateUserQuery>>,
logger: ActionLogger, logger: ActionLogger,
@ -225,7 +225,7 @@ pub async fn users_route(
HttpResponse::Ok().body( HttpResponse::Ok().body(
UsersListTemplate { UsersListTemplate {
_p: BaseSettingsPage::get("Users list", &user, danger, success), _p: BaseSettingsPage::get("Users list", &admin, danger, success),
users, users,
} }
.render() .render()
@ -233,11 +233,14 @@ pub async fn users_route(
) )
} }
pub async fn create_user(user: CurrentUser, clients: web::Data<ClientManager>) -> impl Responder { pub async fn create_user(admin: CurrentUser, clients: web::Data<ClientManager>) -> impl Responder {
let mut user = User::default();
user.authorized_clients = Some(clients.get_default_clients().iter().map(|u| u.id.clone()).collect());
HttpResponse::Ok().body( HttpResponse::Ok().body(
EditUserTemplate { EditUserTemplate {
_p: BaseSettingsPage::get("Create a new user", user.deref(), None, None), _p: BaseSettingsPage::get("Create a new user", admin.deref(), None, None),
u: Default::default(), u: user,
clients: clients.cloned(), clients: clients.cloned(),
} }
.render() .render()
@ -251,7 +254,7 @@ pub struct EditUserQuery {
} }
pub async fn edit_user( pub async fn edit_user(
user: CurrentUser, admin: CurrentUser,
clients: web::Data<ClientManager>, clients: web::Data<ClientManager>,
users: web::Data<Addr<UsersActor>>, users: web::Data<Addr<UsersActor>>,
query: web::Query<EditUserQuery>, query: web::Query<EditUserQuery>,
@ -266,7 +269,7 @@ pub async fn edit_user(
EditUserTemplate { EditUserTemplate {
_p: BaseSettingsPage::get( _p: BaseSettingsPage::get(
"Edit user account", "Edit user account",
user.deref(), admin.deref(),
match edited_account.is_none() { match edited_account.is_none() {
true => Some("Could not find requested user!".to_string()), true => Some("Could not find requested user!".to_string()),
false => None, false => None,

View File

@ -6,11 +6,24 @@ pub struct ClientID(pub String);
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)] #[derive(Clone, Debug, serde::Serialize, serde::Deserialize)]
pub struct Client { pub struct Client {
/// The ID of the client
pub id: ClientID, pub id: ClientID,
/// The human-readable name of the client
pub name: String, pub name: String,
/// A short description of the service provided by the client
pub description: String, pub description: String,
/// The secret used by the client to retrieve authenticated users information
pub secret: String, pub secret: String,
/// The URI where the users should be redirected once authenticated
pub redirect_uri: String, pub redirect_uri: String,
/// Specify if the client must be allowed by default for new account
#[serde(default = "bool::default")]
pub default: bool,
} }
impl PartialEq for Client { impl PartialEq for Client {
@ -33,6 +46,13 @@ impl EntityManager<Client> {
None None
} }
/// Get the list of default clients.
///
/// i.e. the clients that are granted to new accounts by default
pub fn get_default_clients(&self) -> Vec<&Client> {
self.iter().filter(|u| u.default).collect()
}
pub fn apply_environment_variables(&mut self) { pub fn apply_environment_variables(&mut self) {
for c in self.iter_mut() { for c in self.iter_mut() {
c.id = ClientID(apply_env_vars(&c.id.0)); c.id = ClientID(apply_env_vars(&c.id.0));