mod actix;
mod resources;
use crate::biome::OAuthUserSessionStore;
use crate::rest_api::actix_web_1::{Resource, RestResourceProvider};
#[cfg(feature = "authorization")]
use crate::rest_api::auth::authorization::Permission;
#[cfg(feature = "biome-profile")]
use crate::biome::UserProfileStore;
use super::OAuthClient;
#[cfg(feature = "authorization")]
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> {
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()),
actix::list_users::make_oauth_list_users_resource(
self.oauth_user_session_store.clone(),
),
]
}
}