#[cfg(feature = "rest-api-actix")]
mod actix;
mod resources;
use crate::biome::OAuthUserSessionStore;
use crate::rest_api::actix_web_1::{Resource, RestResourceProvider};
#[cfg(all(feature = "authorization", feature = "rest-api-actix",))]
use crate::rest_api::auth::authorization::Permission;
#[cfg(feature = "biome-profile")]
use crate::biome::UserProfileStore;
use super::OAuthClient;
#[cfg(all(feature = "authorization", feature = "rest-api-actix",))]
const OAUTH_USER_READ_PERMISSION: Permission = Permission::Check {
permission_id: "oauth.users.read",
permission_display_name: "OAuth Users read",
permission_description: "Allows the client to read OAuth users",
};
#[derive(Clone)]
pub struct OAuthResourceProvider {
client: OAuthClient,
oauth_user_session_store: Box<dyn OAuthUserSessionStore>,
#[cfg(feature = "biome-profile")]
user_profile_store: Box<dyn UserProfileStore>,
}
impl OAuthResourceProvider {
pub fn new(
client: OAuthClient,
oauth_user_session_store: Box<dyn OAuthUserSessionStore>,
#[cfg(feature = "biome-profile")] user_profile_store: Box<dyn UserProfileStore>,
) -> Self {
Self {
client,
oauth_user_session_store,
#[cfg(feature = "biome-profile")]
user_profile_store,
}
}
}
impl RestResourceProvider for OAuthResourceProvider {
fn resources(&self) -> Vec<Resource> {
#[allow(unused_mut)]
let mut resources = Vec::new();
#[cfg(feature = "rest-api-actix")]
{
resources.append(&mut vec![
actix::login::make_login_route(self.client.clone()),
actix::callback::make_callback_route(
self.client.clone(),
self.oauth_user_session_store.clone(),
#[cfg(feature = "biome-profile")]
self.user_profile_store.clone(),
),
actix::logout::make_logout_route(self.oauth_user_session_store.clone()),
]);
resources.append(&mut vec![
actix::list_users::make_oauth_list_users_resource(
self.oauth_user_session_store.clone(),
),
]);
}
resources
}
}